ورود

View Full Version : جلوگیری از بسته شدن فرم



ali_just
یک شنبه 15 فروردین 1389, 18:39 عصر
سلام
می خوام وقی رو دکمه خروج فرم کلیک کردم دوباره همون فرم باز شه
و همینجور ادامه داشته باشه
یعنی اگه دوباره هم ببندم دوباره خودش باز شه
ممنون

HjSoft
یک شنبه 15 فروردین 1389, 18:45 عصر
اره ، اگر منظورتون دکمه ضرب در فرم هست . که در رویدادQueryUnload میتونید لغوش کنید . برای جلوگیری از بسته شدن برنامه هم میتونید یک برنامه دیگر کنار نرم افزار بزارید که در صورت بسته شدن دوباره باز شود .

aryasoft2872
یک شنبه 15 فروردین 1389, 18:49 عصر
می تویند توی form_unload بنویسید:

Cancel = True

(این مسئله فک نمی کنم مربوط به ابزار بشه...)

ali_just
یک شنبه 15 فروردین 1389, 19:04 عصر
شما میگید کجا بنویسمش؟

حمید محمودی
یک شنبه 15 فروردین 1389, 19:13 عصر
شما میگید کجا بنویسمش؟

هم هر دو جایی که میشه Cancel رو برابر false قرار داد (تا کاربر باکلیک روی ضربدر فرم نتونه از برنامتون خارج بشه) رو دوستان گفتن.


اما به نظر من بهتره که در SysMenu آیتم Close رو disable بکنی

REZADG
دوشنبه 16 فروردین 1389, 22:00 عصر
هم هر دو جایی که میشه Cancel رو برابر false قرار داد (تا کاربر باکلیک روی ضربدر فرم نتونه از برنامتون خارج بشه) رو دوستان گفتن.


اما به نظر من بهتره که در SysMenu آیتم Close رو disable بکنی
خوب این آخری رو چطوری انجام بدیم

اما به نظر من بهتره که در SysMenu آیتم Close رو disable بکنی

حمید محمودی
دوشنبه 16 فروردین 1389, 22:17 عصر
سلام.

میتونید با توابع API که در این زمینه هستش اینکارو انجام بدید.





Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&
Private Sub Form_Load()
Dim hSysMenu As Long, nCnt As Long
' Get handle to our form's system menu
' (Restore, Maximize, Move, close etc.)
hSysMenu = GetSystemMenu(Me.hwnd, False)

If hSysMenu Then
' Get System menu's menu count
nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then
' Menu count is based on 0 (0, 1, 2, 3...)
RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
DrawMenuBar Me.hwnd
' Force caption bar's refresh. Disabling X button
Me.Caption = "Try to close me!"
End If
End If
End Sub



موفق باشید

ali_just
سه شنبه 17 فروردین 1389, 10:01 صبح
دوستان همه ی اینها با Task Manager بسته میشن

حمید محمودی
سه شنبه 17 فروردین 1389, 10:44 صبح
دوستان همه ی اینها با Task Manager بسته میشن

سلام.

مگه کسی گفته که بسته نمیشن. اگه میخاین به هیج وجه بسته نشن بایستی برین دنبال روش های دیگه که یکم دردس دار میشه واسه برنامتون.

اگه هم فقط میخاین در تسک منجر نشه که اونو End Task (و نه End Process) کرد دوباره اونو در FormTerminate() لودش کنید

موفق باشید

HjSoft
سه شنبه 17 فروردین 1389, 12:56 عصر
یا توسط یک برنامه دیگه اونو به محض بسته شدن اجرا کنید .

saeedvir
سه شنبه 17 فروردین 1389, 13:52 عصر
اینجا کلی روش هست :

http://forum.persiancoder.com/showthread.php?t=170