PDA

View Full Version : سوال: چه دستوری بنویسم که کل event handler برای تمام DBEdit ها یک کار را انجام دهند؟



ali_abbasi22145
جمعه 30 بهمن 1394, 08:14 صبح
سلام

چه دستوری بنویسم که کل event handler مثلا MouseMove ها برای تمام DBEdit ها یک کار را انجام دهند؟
یعنی یکی یکی برای هر کل DBEdit ها ننویسم مثلا :

procedure TDynamicForm.First_nameMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
First_name.Hint := First_name.Text;
end;

hadisalahi2
شنبه 01 اسفند 1394, 06:08 صبح
باید از پارامتر Sender برای این کارها استفاده کنی
و همچنین میتونی از یک حلقه for برای نسبت دادن پروسیجر ها استفاده کنی
مثلا اینطوری



for 1 :=0 to form1.controlscount-1 do
if form1.controls[i] is tedbedit then
Tdbedit(Form1.controls[i]).onmouseMove:=
First_nameMouseMove;

ali_abbasi22145
شنبه 01 اسفند 1394, 08:06 صبح
سلام
مرسی چک کردم خطا می دهد!
لطفا یک برنامه ساده دلفی کنید و attach کنید اینجا:
فکر کنم اینجا نوشته هاش درهم برهم شده

ali_abbasi22145
شنبه 01 اسفند 1394, 15:03 عصر
اگر منظورتون اينه كار نمي كند

for i:=0 to DynamicForm.ControlCount -1 do
if DynamicForm.Controls[i]is TDBEdit then
begin
TDBEdit(DynamicForm.Components[i]).OnMouseMove := First_nameMouseMove;
end;

ابوالفضل عباسی
سه شنبه 11 اسفند 1394, 09:52 صبح
سلام
نمیدونم چرا انقدر سختش میکنید؟
اگر قراره همه ی dbedit ها یک کار انجام دهند مثلا در onclick یکی از dbedit ها یک فرمان بنویسید،بعد در قسمت event بقیه dbedit ها روی مثلث کوچیکه بزنید،تا لیستی بیاید و در آن لیستonclick آن dbedit رو پیدا کنید مثلا:
در dbedit1 یک فرمان نوشته ام.
در آن event یک dbedit2 روی مثلث کوچیکه انتخاب میکنم و onclickdbedit1 رو پیدا میکنم.
حالا dbedit2 هم فرمان dbedit1 رو انجام میدهد.

فقط اگر فرمان برای هر dbedit جداگانه باید انجام بشود باید از اسم کامپوننت component[i].name استفاده شود.

mm26363@yahoo.co.uk
پنج شنبه 13 اسفند 1394, 11:21 صبح
از evenhandlerها نیز میتونی استقاده کنی

hadisalahi2
یک شنبه 16 اسفند 1394, 03:56 صبح
اگر منظورتون اينه كار نمي كند

for i:=0 to DynamicForm.ControlCount -1 do
if DynamicForm.Controls[i]is TDBEdit then
begin
TDBEdit(DynamicForm.Components[i]).OnMouseMove := First_nameMouseMove;
end;

چه خطایی میده لطفا خطا رو بنویس به ببینم مشکل کجاست

hadisalahi2
یک شنبه 16 اسفند 1394, 03:58 صبح
سلام
نمیدونم چرا انقدر سختش میکنید؟
اگر قراره همه ی dbedit ها یک کار انجام دهند مثلا در onclick یکی از dbedit ها یک فرمان بنویسید،بعد در قسمت event بقیه dbedit ها روی مثلث کوچیکه بزنید،تا لیستی بیاید و در آن لیستonclick آن dbedit رو پیدا کنید مثلا:
در dbedit1 یک فرمان نوشته ام.
در آن event یک dbedit2 روی مثلث کوچیکه انتخاب میکنم و onclickdbedit1 رو پیدا میکنم.
حالا dbedit2 هم فرمان dbedit1 رو انجام میدهد.

فقط اگر فرمان برای هر dbedit جداگانه باید انجام بشود باید از اسم کامپوننت component[i].name استفاده شود.

ما سختش نمیکنیم عزیزم
اینی که شما میگی در موقع طراحی کاربرد داره نه اجار

اگه فرضا من صد تا کنترل داشته باشم به نظرت میتونم بیام یکی یکی اینا رو انتخاب کنم و بعد بهشون پروسیجر نسبت بدم؟

این کدی که نوشتم هیچ مشکلی نداره و خودم صد ها بار ازش استفاده کردم
پس اگه خطایی داره مربوط به سینتکس هستش

بفرمایید تا مشکل رو برطرف کنیم

hadisalahi2
یک شنبه 16 اسفند 1394, 04:07 صبح
از evenhandlerها نیز میتونی استقاده کنی

شما بفرمایید یعنی چه؟

ابوالفضل عباسی
سه شنبه 18 اسفند 1394, 07:51 صبح
ایشون به سوال خودشون جواب میده.
روش اقا هادی کاملا درسته . و امتحان شده است.ولی من برای edit هایی که عملیات های مشابه ای دارند از پروسیجر استفاده میکنم.