PDA

View Full Version : کنترل DBNavigator1



davoodmz
دوشنبه 14 فروردین 1385, 11:27 صبح
با سلام
من برای کنترل DBNavigator1 در یکی از برنامه ها و در یکی از فرمها کد زیر را می نویسم که خطا می دهد ولی در سایر فرمها و یا برنامه های دیگر همان کد را نوشتم و خطایی نمی دهد. لطفاً کمک کنید
کد مربوطه برای کنترل
در آن کلیک DBNavigator1:
var
btname:string
begin
if button:=nbfirst then
عملیات مورد نظر
end;
--------------------------------- خطای داده شده
error]unit7.pas[534]:incompatible types:'TnavigateBtn'and'TbsNavigateBtn]

با تشکر از شما

Mohammad_Mnt
دوشنبه 14 فروردین 1385, 12:36 عصر
کد شما :
if button:=nbfirst then

کد صحیح :
if button=nbfirst then

davoodmz
دوشنبه 14 فروردین 1385, 14:17 عصر
ببخشید
من اشتباه املایی داشتم ولی خطا همچنان باقی است

Mohammad_Mnt
دوشنبه 14 فروردین 1385, 14:58 عصر
خوب مشکل اینه که Type اون دوتا ( button و nbFirst ) یکی نیست !

davoodmz
سه شنبه 15 فروردین 1385, 09:46 صبح
چرا پس در همان برنامه در بعضی از فرمها این کد جواب می‌دهد بدون هیچ خطایی
من در کل می خواهم که dbnavigator را کنترل کنم
ضمناً enable کردن یک کلید خاص را نیز بلد نیستم . مثلاً اگر کلید nbpost زده شد کلید nbnext اینیبلش فالس شود.
با تشکر

Mohammad_Mnt
سه شنبه 15 فروردین 1385, 12:21 عصر
این TbsNavigateBtn چیه ؟ خودتون درست کردین ؟



مثلاً اگر کلید nbpost زده شد کلید nbnext اینیبلش فالس شود



procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
if button = nbPost then
dbnavigator1.VisibleButtons:= dbnavigator1.VisibleButtons-[nbNext];
end;

davoodmz
سه شنبه 15 فروردین 1385, 13:07 عصر
آقا محمد با سلام
(کد بالا ویزیبل می کند یعنی کلید را از بین می برد)
من می خواهم نویگیتور را کنترل کنم مثلاً اگر کلید delete را زدم قبلش کدش را نوشتم ولی اصلا عملا نمی کند و نویگیتور کار خودش را انجام می دهد
لطفاً به کد زیر توجه کنید
procedure TForm1.suitempDBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var
d:integer;
BtnName:string;
begin
if Button=nbdelete then
d:=application.MessageBox('delete the record?','title',mb_yesno);
if d=idyes then
begin
DM.Q_gh.Delete;
end;

این کد بالا در button معمولی هیچ مشکلی ندارد ولی در نویگیتور خطا می دهد . اصلا کار خودش را انجام میدهد یعنی رکورد را حذف می کند.
لطفاً اگر کد کامل برای کنترل نویگیتور دارید محبت کنید یا راهنمایی کنید
باتشکر

javidtaheri
سه شنبه 15 فروردین 1385, 22:55 عصر
از ABORT جهت قطع ادامه دستورات استفاده کن
چون با فشردن کلید nbDelete روتین حلقه شما اجرا و سپس دستور delete اجرا میشود

procedure TForm1.suitempDBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var
d:integer;
BtnName:string;
begin
if Button=nbdelete then
d:=application.MessageBox('delete the record?','title',mb_yesno);
if d=idyes then
begin
DM.Q_gh.Delete;
end
else
Abort
end

davoodmz
چهارشنبه 16 فروردین 1385, 09:09 صبح
با سلام
با گذاشتن دستور abort بازهم مشکل حل نشد کار خود را انجام می دهد (عمل حذف رکورد) و به شرطی که ما گذاشتیم اگر کلیدی yes را زد حذف و در غیر اینصورت حذف انجام نشود کاری ندارد.
با تشکر
داود

Mohammad_Mnt
چهارشنبه 16 فروردین 1385, 19:18 عصر
این رو امتحان کن ببین می شه :


procedure TForm1.suitempDBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
if (Button=nbdelete) and (application.MessageBox('delete the record?','title',mb_yesno) <> idyes) then Abort;
end;

davoodmz
پنج شنبه 17 فروردین 1385, 14:16 عصر
با تشکر
مشکل حل شد
کنترل را در رویداد BEFORDELET خود ADOTABLE نوشتم و مشکل حل شد
با تشکر از شما

javidtaheri
پنج شنبه 17 فروردین 1385, 15:44 عصر
مساله حذف رکورد برمیگردد به کد نویسی شما
چون شما باید کد را قبل از کلیک شدن بنویسید و بعد Abort را بنویسید که رویداد کلیک انجام نشود یعنی در رویداد BeforeAction اینو امتحان کن
procedure TForm1.DBNavigator1BeforeAction(Sender: TObject;
Button: TNavigateBtn);
var d:integer;
BtnName:string;
begin
if Button=nbdelete then
d:=application.MessageBox('delete the record?','title',mb_yesno);
if d=idyes then
begin
DM1.Q_gh.Delete;

end;

Abort;
end;

davoodmz
شنبه 26 فروردین 1385, 10:28 صبح
با تشکر از دوستان
مشکل حل شد