المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : سؤال حول الدورة وبلأخص درس رقم اثنين... امر.. form2.ShowModal


AL-MOB4RM3G
15-12-2008, 11:40 AM
السلام عليكم ورحمة الله

اخواني هنا سؤال حول الدورة وبلأخص درس رقم اثنين...

اولاّ

ما مهمت هذا الكود form2.ShowModal; ؟
وما الفرق بينه وبين form2.visible:= true; ؟

ثانيا...
وجهتني مشكلة مع form2.ShowModal; وهي انها تغلق البرنامج الى النفذة الثانية... يعني لا استطيع الرجوع الى فورم 1 الّى اذا اغلقت فورم 2... وللعلم هذه المشكلة لا تظهر عندي اذا استخدمد ال form2.visible := true; والله تعلى اعلم... يعني كيف احل هذه المشكلة بارك الله لكم ؟

بلإضافة الى سؤال بجانب الموضوع...
وهو متى سيأتي ال HomeWork الثاني ومتى سيأتي حل ال HomeWork الأول ...

نعم ... بارك الله بكم مرة اخرى.

STRELiTZIA
16-12-2008, 10:43 AM
بسم الله الرحمن الرحيم
Form.ShowModal : هي دالة موجودة في وحدة Forms لاستدعاء و إظهار نافذة مشروع، دون السماح للرجوع لنافتها الأساسية بالنقر خارجها.


function TCustomForm.ShowModal: Integer;
var
WindowList: Pointer;
SaveFocusCount: Integer;
SaveCursor: TCursor;
SaveCount: Integer;
ActiveWindow: HWnd;
begin
CancelDrag;
if Visible or not Enabled or (fsModal in FFormState) or
(FormStyle = fsMDIChild) then
raise EInvalidOperation.Create(SCannotShowModal);
if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
ReleaseCapture;
Application.ModalStarted;
try
Include(FFormState, fsModal);
ActiveWindow := GetActiveWindow;
SaveFocusCount := FocusCount;
Screen.FSaveFocusedList.Insert(0, Screen.FFocusedForm);
Screen.FFocusedForm := Self;
SaveCursor := Screen.Cursor;
Screen.Cursor := crDefault;
SaveCount := Screen.FCursorCount;
WindowList := DisableTaskWindows(0);
try
Show;
try
SendMessage(Handle, CM_ACTIVATE, 0, 0);
ModalResult := 0;
repeat
Application.HandleMessage;
if Application.FTerminate then ModalResult := mrCancel else
if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;
Result := ModalResult;
SendMessage(Handle, CM_DEACTIVATE, 0, 0);
if GetActiveWindow <> Handle then ActiveWindow := 0;
finally
Hide;
end;
finally
if Screen.FCursorCount = SaveCount then
Screen.Cursor := SaveCursor
else Screen.Cursor := crDefault;
EnableTaskWindows(WindowList);
if Screen.FSaveFocusedList.Count > 0 then
begin
Screen.FFocusedForm := Screen.FSaveFocusedList.First;
Screen.FSaveFocusedList.Remove(Screen.FFocusedForm );
end else Screen.FFocusedForm := nil;
if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow);
FocusCount := SaveFocusCount;
Exclude(FFormState, fsModal);
end;
finally
Application.ModalFinished;
end;
end;



Form.Show : هي إجرائية إظهار نافذة دون تحديدات النقر السابقة الذكر.


procedure TCustomForm.Show;
begin
Visible := True;
BringToFront;
end;


Visible := True : هي إعطاء خاصية Visible قيمة Boolean إما True أو False يمكننا استعمالها لإظهار نافذة كانت مخفية مسبقا.


الغرض من استعمال ShowModal : هو عدم السماح بالرجوع إلى النافذة التي استدعيت منها بالنقر خارجها إلا بإغلاقها، يعني إذا أردت أن لا تختفي نوافذ معينة من مشروعك وراء النوافذ التي استدعيت منها استعمل ShowModal.


بالتوفيق إن شاء الله

AL-MOB4RM3G
16-12-2008, 10:47 AM
نعم بارك الله فيك اخي على الإجابة...
يعني معليش سامحني فأنا كثير السؤال والله المستعان :)

STRELiTZIA
16-12-2008, 11:22 AM
يعني معليش سامحني فأنا كثير السؤال والله المستعان

كل سؤال مفيد و غير مكرر سنحاول الاجابة عليه اخي العزيز بقلب رحب :) حتى لو تأخرنا قيلا في و ضع الاجابة - مشاغل الحياة

بالفائدة ان شاء الله

nabilkeb
16-12-2008, 10:16 PM
كل سؤال مفيد و غير مكرر سنحاول الاجابة عليه اخي العزيز بقلب رحب :) حتى لو تأخرنا قيلا في و ضع الاجابة - مشاغل الحياة

بالفائدة ان شاء الله

بارك الله فيك أخينا ، و جزاك الله ألف خير .