الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحريك المكونات في الفورم

مغلق
بدأه romanof في 3 يونيو 2005 · 5 رد · 1,163 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم يا شباب ار يد ان أسالكم

الم يخطر ببال احدكم السؤال التالي بما ان دلفي برنامج في النهاية كيف تتمكن من تحريك

العناصر عليها بواسطة السحب و الافلات هذا التقنية نافعة جدا وخصوصا لبرامج الحرافيكس وبرامج الهندسة والدواير المنطقية حتى في معالجات النصوص الشهيرة مثل الورد

في هذا المقال الصغير احب ان اضع درسا صغيرا جدا في هذا الموضوع

خذا عنصرا وليكن Image1 من الخاصية picture حمل الصورة التي تريدها

من اجل Image1 قم بالاتي :

ضع القيمة dkdock للخاصية DragKind ضع القيمة dmAutomatic للخاصية DargMode

من اجل الفورم قم بالاتي:

في الفورم ضع القيمة true للخاصية dockSite

في الحدث OnCreate في الفورم ضع الكود التالي

Image1.ManualFloat(Rect(Form1.Left+Image1.Left, Form1.Top+Image1.Top,
                         Form1.Left+Image1.Left+Image1.Width,
                         Form1.Top+Image1.Top+Image1.Height));
 Image1.ManualDock(Form1,nil,alLeft);

والان يا صديقي قم بتشغيل البرنامج نعم ... ماذا تقول مبروك لقد فعلتها حاول ان تخرج الصورة من الفورم

والان قم بتكرير الخطوات السابقة لعنصر من النوع Button1 إ ضافة لذلك اذهب الى الحدث onClick من اجل ال Button1 و اكتب بداخله اي شيء ShowMessage(‘hi’); مثلا

ماذا هل تواجه بعض المشاكل اذا كانت اجابتك بنعم فانت محق يبدو انك لا ترى الرسالة رغم ضغطك على الزر مرارا وتكرار حسنا سوف احاول مساعدتك

والان مع الButton1 قم بما يلي

اولا : ضع القيمة dmManual للخاصية DargMode

ثم اذهب الى الحدث onKeyDown و اكتب ما يلي

if (Key = VK_MENU)
   then (Sender as TButton).DragMode := dmAutomatic;

ثم اذهب الى الحدث onKeyUp و اكتب ما يلي:

 if (Key = VK_MENU)
    then (Sender as TButton).DragMode := dmManual;

بالنسبة نوافذ الادخال النصي ك Edit1 مثلا او الmemo1 عاملها معاملة ال Button1

والان يا صديقي قم بتشغيل البرنامج حرك الزر هل استطعت ان تفعل ذلك والان حاول سحب الزر ضاغطا اثناء ذلك على الِAlt هل تمكنت من تحريكه ممتاز

اعرف انك اخرجت الصورة والزر من الفورم وتفكر الان ماذا لو ان مستخدما ذكيا مثلا قام باغلاق الصورة من الاطار الذي يتكون حولها بعد اخراجها خارج حدود الفورم كيف اضمن عدم حدوث هذا انت ذكي جدا اخي ولكن كأي مبرمح ذكي لابد ان تدفع ثمن ذكائك

الطريقة الثانية:

قم بإغلاق التطبيق الحالي وافتح تطبيقا جديدا

وقم بالخطوات التالية

خذا عنصرا وليكن Image1 من الخاصية picture حمل الصورة التي تريدها

قم بتعريف متغيرات عامة او داخل الكلاس كالاتي

………
public
    { Public declarations }
    move:boolean;
   X0,Y0:integer;
   rec:TRect;
  end;
…………

من اجل Image1 قم بالاتي :

أذهب الى الحدث onMouseDown واكتب الكود الاتي

if Button<>mbLeft then exit;
 x0:=X;
 y0:=y;
 move:=true;
 rec:=(Sender as TControl).BoundsRect;

ثم أذهب الى الحدث onMouseUp واكتب الكود الاتي

Canvas.DrawFocusRect(rec);
   With (Sender as TControl) do
    begin
     SetBounds(rec.Left+X-X0,rec.Top+Y-Y0,Width,Height);
     BringToFront;
    end;
    move:=false;

ثم أذهب الى الحدث onMouseMove واكتب الكود الاتي

if not move then exit;
    Canvas.DrawFocusRect(rec);
    with rec do
      begin
        left:=left+X-X0;
        Right:=Right+X-X0;
        top:=Top+Y-Y0;
        bottom:=Bottom+Y-Y0;
        X0:=X;
        Y0:=Y;
      end;
    Canvas.DrawFocusRect(rec);

انا شخصيا افضل الطريقة الثانية

اعتقد ان الكود واضح جدا جدا

اذا كان عدد المكونات كبيرا استخدم ActionList عفوا على الاطالة وا عذرونا على التقصير

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#2

بارك الله فيك romanof

:rolleyes: :rolleyes: :rolleyes:

..................بسم الله الرحمن الرحيم..................

وتعاونوا على البر والتقوى ولا تعاونوا على الإثم والعدوان

.............................................................................................................................

لنبدا دورة دلفي

سلسلة تعلم برمجة Pascal , تعلم اساسيات الباسكال

التحكم بمنفذ الطابعة عن طريق الدلفي

سلسلة دروس تعلم قواعد بيانات Midas

هيا لنبدأ بالApi

أفكار سريعة, مجموعة شفرات صغيرة وفاعله لدلفي

كتب + مواقع ::: مراجع مهمة للغة دلفي, مجموعة كتب مجانية + مواقع مفيدة

مكتبه الأكواد, أكواد وبرامج دلفي

.............................................................................................................................

18_07_05_10_53_18_1121752398da3wa_18.gif

#3

شكرا رومانوف

#4

ما رأيك بهذا الكود رومانوف لتحريك الفورم عن طريق بانل مثلا

ويمكن استخدامه لتحريك أي عنص على الفورم بتعديل بسيط فيه

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

ReleaseCapture;

SendMessage(Form1.Handle , WM_NCLBUTTONDOWN, HTCAPTION, 0);

end;

شكراا

______________________________

M.g.s

ex.rar

1 2 me and u r alone

1 2 u a i a a

#5

ممتاز اليك هذا الموضوع

/index.php?showtopic=58751

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#6

بصراحة يا mahmola ان اصبحت استخدم الكود تبعك بشكل دائم

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

هذا الموضوع مغلق.

مواضيع مشابهة