![]() |
|
كتآبة دآلة تغنيني عن تكرار بعض العمليّات - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كتآبة دآلة تغنيني عن تكرار بعض العمليّات (/showthread.php?tid=1680) |
كتآبة دآلة تغنيني عن تكرار بعض العمليّات - AL-MOB4RM3G - 17-02-2010 السلام عليكم ورحمة الله, اخوآني الكرام, احآول عمل دآلة تغنيني عن بعض الأكوآد المتكررة, في البرنآمج الذي اعمل عليه يتكرر نفس الأمر بالنسبة لعدة Labels الا وهو استغلآل OnMouseDown و onMouseUp, في حآلة OnMouseDown يكون الكود هو التآلي, كود : Label1.Font.Color := clred;وفي حآلة OnMouseUp يكون الكود, كود : Label1.Font.Color := clBlue;بالإضآفة الى ذلك, يكون ال Cursor = crHandPoint وهذا الأمر ينطبق على اكثر من 50 Label في المشورع, ---- محآولتي هو التآلي, عملت Procedure وهو التآلي, بالنسبة OnMouseDown كود : Procedure LinkRed(Sender: TObject);
begin
if (Sender is Tlabel) then
begin
With (sender as Tlabel) do font.Color := clred;
end;
end;وعملت Procedure و, بالنسبة OnMouseUp كود : Procedure LinkBlue(Sender: TObject);
begin
if (Sender is Tlabel) then
begin
With (sender as Tlabel) do font.Color := clBlue;
end;
end;هذا الحل يعمل, لكن مع كل label احتاج الى الكتآبة في حدثين 2, الأول اكتب فيه LinkRed و الثآني اكتب فيه LinkBlue, -- المطلوب هو التآلي, اود كتآبة نفس الأمر في كل الأحداث, يعني اود عمل Procedure يدمج LinkRed مع LinkBlue ونسمّيه ContolLink بدآخله يكون الأمر انه يفحص مثلا من اي حدث جآء هذا الطلب وبعدها يعمل المطلوب منه عمله, مثال حتى تتضح الصورة, كود : procedure ControlLink(Sender: TObject);
begin
if OnMouseDown then LinkRed;
if OnMouseUp then LinkBlue
end;وبهذا اكتب في كل حدث الأمر ContolLink و الدآلة تتكفل في البآقي, بارك الله لك, والسلام عليكم ورحمة الله كتآبة دآلة تغنيني عن تكرار بعض العمليّات - Wael Dalloul - 17-02-2010 الحل الاول, يمكنك ربط حدث ما مع اكثر من Control دون الجاجة إلى إعادة كتابة الكود مرة اخرى, و هنا عليك عمل Castللمتحول Sender للحصول على اسم ال Control... الحل الثاني ![]() يمكنك عمل Loop على جميع ال Controls و من ثم فحص فيما إذا كانوا Labels و إذا اردت يمكن وضع قيمة ما في الحقل Tag وذلك للتمييز بين ال Labels التي تريد تطبيق الامر عليهم... المثال خير من المقال: كود : procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:= 0 to Self.ComponentCount - 1 do
begin
if Components[i].ClassNameIs('TLabel') then
begin
TLabel(Components[i]).OnMouseDown:= LinkRedMouseDown;
TLabel(Components[i]).OnMouseUp := LinkBlueMouseUp;
end;
end;
end;
procedure TForm1.LinkBlueMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TLabel(sender).font.Color := clBlue;
end;
procedure TForm1.LinkRedMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TLabel(sender).font.Color := clred;
end;كتآبة دآلة تغنيني عن تكرار بعض العمليّات - kachwahed - 17-02-2010 وعليكم السلام ورحمة الله حدد جميع مكونات TLabel واكتب في الحدث OnMouseMove: كود : (Sender as Tlabel).Font.Color := clBlue;هناك حل آخر... في إصدارات دلفي الحديثة (2006 فما فوق) يمكن استخدام المكون TLinkLabel ضعه واكتب في الـ Caption وسم HTML الذي تريد مثل: PHP كود : <a href="www.delphi4arab.net">Delphi4arab</a> PHP كود : procedure TForm1.LinkLabel1LinkClick(Sender: TObject; const Link: string;كتآبة دآلة تغنيني عن تكرار بعض العمليّات - AL-MOB4RM3G - 17-02-2010 بارك الله فيكم اخوآني, تم حلّ المشكلة ولله الحمد بستخدام حل ال لووب, (وجدته اسهل و اسرع شئ) فيما يخص, إقتباس :و هنا عليك عمل Castللمتحول Sender للحصول على اسم ال Control...اود معرفة المزيد ![]() اين يمكن التعرف على هذه الطريقة او ما المقصود ب كاست للمتحول Sender ؟ بارك الله لكم اخوآني الكرام, كتآبة دآلة تغنيني عن تكرار بعض العمليّات - kachwahed - 17-02-2010 التعرف على هذه الطريقة |