السلام عليكم ورحمة الله وبراتة
لدي نافذة وقد اعطيتها الخاصية
BroderStyle=bsNone
المراد هو ان اجعل هذا الفورم يكون في مقدمة الونافذ في برنامجي فقط
حيث يوجد عدة نوافذ في هذا البرنامج وأريـ ـد لهذا الفورم ان يكون في مقدمتها دوماً ولا يكون في مقدمة البرامج الآخرى
السؤال الآخر .. ابحث عن الحدث خاص بتحريك النافذة أي عندما اقوم بنقل النافذة من مكان إلى آخرى على الشاشة يتم حدث .. كمثال OnMoveWindow
وإن لم يكن موجود كيف اعمل مثل هذا الحدث ^^
وشكراً لحسن القراءة
و عليكم السلام ورحمة الله وبركاته
كود :
المراد هو ان اجعل هذا الفورم يكون في مقدمة الونافذ في برنامجي فقط
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
باتلوفيق
أوه ^^" .. كنت اضن أن formStyle=fsStayOnTop تعمل على حميع البرامج عذراً على هذا السؤال .. وشكراً على الاجابة
لكن ماذا عن إذا كنت أريـ ـد تحرك النافذة الرئيسية وجعل النوافذ الاخرى تتحرك معها .. لذلك قصدت الحدث OnMoveWindow
كمثال .. لدي نافذتين .. النافذة الرئيسية تملك إطار اما الآخرى لا تملك ايطار .. وانا اريـ ـد عندما اقوم بتحرك النافذة الرئيسية تتحرك النافذة اللتي لا تملك إطار معها
مثال (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;
بالتوفيق
شكراً اخي على الكود .. يعمل بكفائة
لكن هذا يعمل مع Windows .. فقط ؟
وكذلك كيف اعرف طرق التعامل مع النظام مثل هذه الحالة ؟
بالنسبة للمثال الذي كتبت .. عندما اقوم بتشغيل البرنامج .. تظهر رسالة خطاء تحتوي :
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 ونفس الخطاء يظهر
وجدت الاجابة هنا :
PHP كود :
http://delphi.about.com/od/windowsshellapi/a/dragnocaption.htm
شبيهي بالمثال الذي ذكرت لكن على ما يبدو ان النوع المستعمل في الدالة مختلف عن ما ذكرت
لكني إلى الان لا اعرف سبب الخط الذي حدث لي مع مثالك
قمت بتبديل الدالة إلى :
PHP كود :
procedure WMMove(var Msg: TWMMoving) ; message WM_MOVING;
كي تعمل مع تحريك النافذة
السلام عليكم
إقتباس : لكن هذا يعمل مع Windows .. فقط ؟
نعم خاص بـ Windows فقط
كود :
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632631%28v=vs.85%29.aspx
هل تخلصت من رسالة الخطأ ؟ (لا أملك دلفي للتجريب

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