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

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