delphi4arab منتديات دلفي للعرب
كتآبة دآلة تغنيني عن تكرار بعض العمليّات - نسخة قابلة للطباعة

+- 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...


الحل الثاني Big Grin
يمكنك عمل 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> 
يمكنك استقبال الرابط ونوعه في الحدث OnLinkClick من الثابت Link والنمط TSysLinkType بشيء مثل:
PHP كود :
procedure TForm1.LinkLabel1LinkClick(Sender: TObject; const Link: string;
  
LinkType: TSysLinkType);
begin
  
if LinkType = sltURL then
    ShowMessage
('It''s URL')
  else
    
ShowMessage('It''s ID');

  
ShowMessage(Link);
end; 
بالتوفيق أخي المبرمج.



كتآبة دآلة تغنيني عن تكرار بعض العمليّات - AL-MOB4RM3G - 17-02-2010

بارك الله فيكم اخوآني, تم حلّ المشكلة ولله الحمد بستخدام حل ال لووب, (وجدته اسهل و اسرع شئ)

فيما يخص,
إقتباس :و هنا عليك عمل Castللمتحول Sender للحصول على اسم ال Control...
اود معرفة المزيد [صورة: biggrin.gif]
اين يمكن التعرف على هذه الطريقة او ما المقصود ب كاست للمتحول Sender ؟

بارك الله لكم اخوآني الكرام,


كتآبة دآلة تغنيني عن تكرار بعض العمليّات - kachwahed - 17-02-2010

التعرف على هذه الطريقة