delphi4arab منتديات دلفي للعرب
جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow (/showthread.php?tid=5994)



جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 03-03-2014

السلام عليكم ورحمة الله وبراتة

لدي نافذة وقد اعطيتها الخاصية
BroderStyle=bsNone
المراد هو ان اجعل هذا الفورم يكون في مقدمة الونافذ في برنامجي فقط
حيث يوجد عدة نوافذ في هذا البرنامج وأريـ ـد لهذا الفورم ان يكون في مقدمتها دوماً ولا يكون في مقدمة البرامج الآخرى

السؤال الآخر .. ابحث عن الحدث خاص بتحريك النافذة أي عندما اقوم بنقل النافذة من مكان إلى آخرى على الشاشة يتم حدث .. كمثال OnMoveWindow
وإن لم يكن موجود كيف اعمل مثل هذا الحدث ^^


وشكراً لحسن القراءة


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - Lam.Abdeldjalil - 03-03-2014

و عليكم السلام ورحمة الله وبركاته
كود :
المراد هو ان اجعل هذا الفورم يكون في مقدمة الونافذ في برنامجي فقط
formStyle=fsStayOnTop
إقتباس :ابحث عن الحدث خاص بتحريك النافذة أي عندما اقوم بنقل النافذة من مكان إلى آخرى على الشاشة يتم حدث
كود :
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const SC_DRAGMOVE = $F012; begin if Button = mbLeft then begin ReleaseCapture; Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); end; end;
كود :
http://stackoverflow.com/questions/10921093/move-form-without-border-style
باتلوفيق


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 03-03-2014

أوه ^^" .. كنت اضن أن formStyle=fsStayOnTop تعمل على حميع البرامج عذراً على هذا السؤال .. وشكراً على الاجابة

لكن ماذا عن إذا كنت أريـ ـد تحرك النافذة الرئيسية وجعل النوافذ الاخرى تتحرك معها .. لذلك قصدت الحدث OnMoveWindow

كمثال .. لدي نافذتين .. النافذة الرئيسية تملك إطار اما الآخرى لا تملك ايطار .. وانا اريـ ـد عندما اقوم بتحرك النافذة الرئيسية تتحرك النافذة اللتي لا تملك إطار معها


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - Lam.Abdeldjalil - 03-03-2014

مثال (Form1 هي الرئيسية ) :
كود :
TForm1 = class(TForm) procedure FormShow(Sender: TObject); private procedure WMMove(var Message: TMessage) ; message WM_MOVE; public iIniLeft,iIniTop: integer;
كود :
procedure TForm1.FormShow(Sender: TObject); begin iIniLeft:=Form2.Left-left; iIniTop:=Form2.Top-Top; end; procedure TForm1.WMMove(var Message: TMessage); begin Form2.Left:=iIniLeft+TWMMove(Message).XPos; Form2.Top:=iIniTop+TWMMove(Message).YPos; end;
بالتوفيق


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 03-03-2014

شكراً اخي على الكود .. يعمل بكفائة

لكن هذا يعمل مع Windows .. فقط ؟

وكذلك كيف اعرف طرق التعامل مع النظام مثل هذه الحالة ؟


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 03-03-2014

بالنسبة للمثال الذي كتبت .. عندما اقوم بتشغيل البرنامج .. تظهر رسالة خطاء تحتوي :
PHP كود :
Access violation at address 005D86B4 in module 'project.exe'. Read of address 0000001C. 
وموقع الخطاً يكون هنا :

PHP كود :
procedure TCustomForm.SetTop(Value: Integer);
begin
  
if (csDesigning in ComponentState) and (Parent <> nil) then  //<< ----- Error
  
begin
    DesignInfo 
:= (DesignInfo and $FFFF0000) or (Cardinal(Value) and $FFFF);
    if 
not (csLoading in ComponentState) and (Position <> poDefaultSizeOnly) then
      Position 
:= poDesigned;
  
end else
    
inherited Top := Value;
end; 

علماً ان الخطاء يظهر وقت تنفيذ البرنامج فقط ..
ما سبب الخطاء .. وشكراً

قمت بتجربة الكود على D7 , D XE4 ونفس الخطاء يظهر


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 03-03-2014

وجدت الاجابة هنا :
PHP كود :
http://delphi.about.com/od/windowsshellapi/a/dragnocaption.htm 

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


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 03-03-2014

قمت بتبديل الدالة إلى :
PHP كود :
procedure WMMove(var Msg: TWMMoving) ; message WM_MOVING; 
كي تعمل مع تحريك النافذة


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - Lam.Abdeldjalil - 04-03-2014

السلام عليكم
إقتباس : لكن هذا يعمل مع Windows .. فقط ؟
نعم خاص بـ Windows فقط
كود :
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632631%28v=vs.85%29.aspx
هل تخلصت من رسالة الخطأ ؟ (لا أملك دلفي للتجريب Big Grin)


جعل الفورم في مقدمة النوافذ و تحريكها مثل OnMoveWindow - ALmuhhnad - 05-03-2014

إقتباس :هل تخلصت من رسالة الخطأ ؟
نعم عندما قمت بتغيير WM_MOVE إلى WM_MOVING .. لم يظهر الخطاء
على ما يبدو ان له طريقة استعمال خاصة او انه يوجد Bug