اريد ان اعمل برنامج لا يستطيع المستخدم اغلاقها
قمت باغلاق alt + f4 ولكن يمكن اغلاقها من taskbar بالنقر علي زر الماوس اليمين
او اريد ان لا يظهر علي taskbar حتي لاستطيع اغلاقها
سوف ارفق لكم البرنامج
اريد ان اعمل برنامج لا يستطيع المستخدم اغلاقها
قمت باغلاق alt + f4 ولكن يمكن اغلاقها من taskbar بالنقر علي زر الماوس اليمين
او اريد ان لا يظهر علي taskbar حتي لاستطيع اغلاقها
سوف ارفق لكم البرنامج
السلام عليكم
جرب هذا الكود لاخفاء البرنامج من TaskBar
procedure TMainForm.FormShow(Sender: TObject);
var
hwndOwner: HWnd;
begin
hwndOwner := GetWindow(Handle, GW_OWNER);
ShowWindow(hwndOwner, SW_HIDE);
// For Windows 2000, additionally call the ShowWindowAsync function:
ShowWindowAsync(hwndOwner, SW_HIDE);
ShowWindowAsync(Self.Handle, SW_HIDE);
end;
{
Prevent the form from reappearing on the Taskbar after minimizing it:
Verhindern, dass nach einem Minimize die Applikation wieder in der Taskbar
erscheint:
}
private
procedure WMSysCommand(var msg: TWMSysCommand); message WM_SysCommand;
{....}
implementation
procedure TMainForm.WMSysCommand(var msg: TWMSysCommand);
begin
if msg.CmdType and $FFF0 = SC_MINIMIZE then
hide
else
inherited;
end;بسم الله الرحمن الرحيم
أخي العزيز...
تستطيع ضمن الحدث onclose لأي form كتابة الكود التالي فقط... والذي يمنع من إغلاق النافذة, سواء باستخدام alt+F4 أو باستخدام زر الإغلاق أو باستخدام
القائمة التي تظهر عند النقر على الأيقونة الظاهرة على شريط المهام...
action:=canone;
أرجو أن أكون قد فهمت ما تقصده جيداً...
المال في الغربة وطن والفقر في الوطن غربة
استخدمت طريقة الاخ in4maTic قد نجحت وشكرا لك
وايضا اشكر الاخ Menhad
ولكن اذا اردت عدم اعمل Minimized للبرنامج من ال taskbar بالنقر علي زر الماوس اليمين
لانني اريد ان يكون البرنامج ظاهرا على الشاشة (اي يكون في المقدمة)
يا شباب لدى هذا الكود
procedure TForm1.FormCreate(Sender: TObject); begin // set your applications message handler to your new one Application.OnMessage := AppMessage; end; procedure TForm1.AppMessage(var Msg: TMSG; var Handled: Boolean); begin // let your application handle all messages initially Handled := False; case Msg.Message of WM_SYSKEYDOWN: if Msg.wParam = VK_F4 then Handled := True; // don't allow ALT-F4 end; end;
وهو لمنع استخدام alt + f4 لاغلاق التطبيق ولكن ارجو ان يكون هناك من يشرح هذا الكود بالتفصيل وما ذا تعنى كل كلمة فيه :wacko:
اي تطبيق في Windows يستقبل الأحداث على شكل رسائل message من نظام التشغيل Wind0ws
في حالة تحرك الفأرة او استعمال لوحة الفاتيح ترسل Windows رسالة للتطبيق المعني بالأمر
في المثال فوق نقوم بانشاء دالة جديدة لتستقبل message و تتقوم بالغائه في حالة عان الزر Alt+F4
اي تقطع الطريق و كان الزر لم يضغط
هناك طريقة اسهل بكثير من الطريقة التي ذكرت
و هي في الحدث CloseQuery للفورم و ليس Onclose هناك Parameter اسمه CanClose
لو فرضنا انه عندك زر اسمه Cancel و تريد فقط عند الضغط عليه تنغلق الفورم
قم بتعريف متحول عام اسمه Allowclose من النمط Boolean و اسند له عند FormCreate القيمة false
الان عند النقر على زر Cancel قم باسناد القيمة true الى المتحول Allowclose
و في الحدث onCloseQuery
اكتب مايلي
canclose:= allowclose;
بالنسبة للشرح الكود السابق
اقتباسprocedure TForm1.FormCreate(Sender: TObject);begin
// set your applications message handler to your new one
Application.OnMessage := AppMessage;
end;
procedure TForm1.AppMessage(var Msg: TMSG; var Handled: Boolean);
begin
// let your application handle all messages initially
Handled := False;
case Msg.Message of
WM_SYSKEYDOWN:
if Msg.wParam = VK_F4 then
Handled := True; // don't allow ALT-F4
end;
end;
الشرح: عند انشاء الفورم يتم اسناد التابع appmessage الى الحدث Applciation.onmessage
و الذي يعني انه عند ورود اي Message من نظام التشغيل الى Application سوف يتم تنفيذ التابع appmessage تمام.
الان في التابع appmessage :
نقوم بعمل case على الرسائل التي ترد الى التطبيق اذا كانت الرسالة هي من النوع syskeydown سوف يتم بعد ذلك
فحص قيمة المفتاح الذي تم ضغطه فاذا كان المفتاح المضغوط يحتوي على F4 فيتم امساك الرسالة و لا يتم تنفيذها اي تم تدميرها و ذلك باستخدام Handled
و الا لن يتم التقاط الرسالة و سوف تنفذ اذا لم يكن فيها F4
لفهم ما قلته جيدا يجب عليك الاطلاع على قليلا على API progrmming
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
:rolleyes: بارك الله فيكم يا يا شباب :lol:
هذا الموضوع مغلق.