954,559 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Apply code to 'x' button on form

Id like it so that when you click the 'x' button to close the program it doesnt just end.

How do I apply code to the 'x' button?

All help is appreciated, thanks in advance

-Russell aka Rabbit

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

what you mean? "it doesnt just end."
You want it will hide? then write code in form_laod
"me.hide" or "form1.hide"

abu taher
Practically a Posting Shark
845 posts since Jul 2008
Reputation Points: 14
Solved Threads: 78
 

Id like a message box prompt to come up to ask the user if he or she is sure about their decision.

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 
Id like it so that when you click the 'x' button to close the program it doesnt just end.


Use the Form_Unload() event

Private Sub cmdX_Click()
     unload Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim intReturn As Integer
    
    intReturn = MsgBox("Ready to Exit", vbOKCancel, "Exit?")
    If intReturn = vbOK Then
    Else
        Cancel = True
    End If
End Sub
hkdani
Posting Pro in Training
435 posts since Nov 2007
Reputation Points: 49
Solved Threads: 47
 

Hi rabbithaveit

I would suggest the API way as it gives you more flexibility... See picture attached...

Please place a Command Button on the form so that you can exit.

Paste this code in the general declaration of the form...

Option Explicit

Private Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private ReadyToClose As Boolean

Private Sub RemoveMenus(frm As Form, remove_restore As Boolean, _
remove_move As Boolean, remove_size As Boolean, remove_minimize As Boolean, _
remove_maximize As Boolean, remove_seperator As Boolean, remove_close As Boolean)
    
    Dim hMenu As Long
    
    '~~> Get the form's system menu handle.
    hMenu = GetSystemMenu(hwnd, False)
    
    If remove_close Then DeleteMenu hMenu, 6, MF_BYPOSITION
    If remove_seperator Then DeleteMenu hMenu, 5, MF_BYPOSITION
    If remove_maximize Then DeleteMenu hMenu, 4, MF_BYPOSITION
    If remove_minimize Then DeleteMenu hMenu, 3, MF_BYPOSITION
    If remove_size Then DeleteMenu hMenu, 2, MF_BYPOSITION
    If remove_move Then DeleteMenu hMenu, 1, MF_BYPOSITION
    If remove_restore Then DeleteMenu hMenu, 0, MF_BYPOSITION
End Sub

Private Sub cmdClose_Click()
    ReadyToClose = True
    Unload Me
End Sub

Private Sub Form_Load()
    '~~> Remove the Close system menu item and the menu separator.
    RemoveMenus Me, False, False, False, False, False, True, True
End Sub

'~~> Cancel if ReadyToClose is false.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Cancel = Not ReadyToClose
End Sub
Attachments API_Way.bmp (153.45KB)
koolsid
Light Poster
35 posts since Feb 2005
Reputation Points: 11
Solved Threads: 6
 

Thanks for replying guys.

hkdani thanks again. I will be sure to try that solution

Koolsid I like the concept but it seems a bit complicated for mke at the moment....
thanks for the reply. But I dont want answer per say...I prefer solutions. So I can learn from them. I'll be sure to look up the API and put your coding to use soon. So thank you

Will be back with a post if it works hkdani

Thanks again guys

-Russell aka Rabbit

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

Nah, unfortunately that didnt work hkdani. But thanks for the post

koolsid I'll do some research on API and use your code in the meanwhile.

Will post back with results

-Russell aka Rabbit

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

In the code editor click (i think its the right) combo box at the top and choose where it says terminate with a lightning bolt next to it

jbennet
Moderator
Moderator
18,523 posts since Apr 2005
Reputation Points: 1,826
Solved Threads: 601
 

@koolsid

Does this code just disable the 'x' button?

Thats the conclusion im drawing from your image there.

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

@jbennet

In the code editor click (i think its the right) combo box at the top and choose where it says terminate with a lightning bolt next to it


Can you supply an image to support that?

Thanks in advance

-Russell aka Rabbit

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

http://www.vb6.us/files/Image/Hello-World/Visual-Basic-Tutorial-screen5.jpg

Look at this image

You see where the two drop down boxes say Command1 and Click?

Change that to say form1, and the second one to say (i think its either Terminate or onClose, will have a lightning bolt symbol next to it)

That will create a code block. In there you can type whatever you want to happen when they try to close the form

jbennet
Moderator
Moderator
18,523 posts since Apr 2005
Reputation Points: 1,826
Solved Threads: 601
 

@koolsid

Does this code just disable the 'x' button?

Thats the conclusion im drawing from your image there.

It not only disable's the close button but also removes the 'close' option from the form's shortcut menu ;)

The API is very simple... All you need to do is copy and paste the code in the general declaration of the area....

Edit: Attaching a project sample for you :)

Attachments rabbithaveit.zip (2.1KB)
koolsid
Light Poster
35 posts since Feb 2005
Reputation Points: 11
Solved Threads: 6
 
Nah, unfortunately that didnt work hkdani. But thanks for the post

That's funny: it works on my vb6 program. Actually, that's the method that I learned from a Microsoft CD on VB6 programming fundamentals. I've been using that method for years. It's odd that it doesn't work for you.

What I like about the method that Microsoft recommends is it's simplicity. That's why they made Visual Basic, because they knew that programs could be written faster and programmers could be more productive, if they were provided a simple way to perform a task such as the task you describe.

From what I've read and studied from the established authors and programmers, they always recommend the KISS method: Keep it Simple Stupid.

Yes, it's true that you can use API's. And it looks quite impressive. But in the end, in the real world it's all about achieving a desired end within a certain time frame.

If you can't achieve that end with the tools that VB6 provides, then VB6 has the flexibility of being able to call the Windows APIs from the Platform Software Developer Kit (PSDK). But as a general rule, use the tools that VB6 provides and only venture into APIs if VB6 doesn't provide the means to accomplish your end.

When it comes right down to where the rubber meets the road the end user will never see your code. He only sees your program. The programmer should not try to impress someone with his knowledge of Windows APIs, the end user probably doesn't have a clue as to what an API is.

Knowledge tends to puff people up. But a truly great programmer uses his knowledge to meet the needs of his client not to enhance his ego.

hkdani
Posting Pro in Training
435 posts since Nov 2007
Reputation Points: 49
Solved Threads: 47
 

@Koolsid

I actually want the 'x' enabled. But I want to apply code to it.

@Jbennet

Thanks, that worked. Just one problem. Whether Yes or NO is chosen. The program still closes. Any reason why?

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

@Koolsid

I actually want the 'x' enabled. But I want to apply code to it.

@Jbennet

Thanks, that worked. Just one problem. Whether Yes or NO is chosen. The program still closes. Any reason why?

Oh Ok I understand :D

Is this what you want?

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode = vbFormControlMenu Then
        Ret = MsgBox("Do You want to Exit?", vbOKCancel)
        '~~> If user decides against it...
        If Ret = vbCancel Then Cancel = 1
    End If
End Sub
koolsid
Light Poster
35 posts since Feb 2005
Reputation Points: 11
Solved Threads: 6
 

Check the attachement file..
I hope that it will help you...

Attachments X_button.zip (5.82KB)
KSS
Newbie Poster
21 posts since Mar 2009
Reputation Points: 11
Solved Threads: 3
 

Gentlemen / Women...People

Thank you so very much for your suggestions and help, I really do appreciate it.

I have not yet gotten to try the zip files. But I am going to test them now. Again, I do appreciate it.

-Russell aka Rabbit

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

KSS and Sidz

You have both my thanks!

@Sidz, the zip file you gave me actually helped with another situation I had. lol One less thread to start up. Because I want my icons to show. So thank you.

@KSS, the zip you gave was EXACTLY what I was looking for. Thank again.

Now that I think of it...That final snippet you provided Sidz was the same thing in the zip KSS gave. Thanks again.

I do appreciate it.

Thread Solved!

-Russell aka Rabbit

rabbithaveit
Light Poster
32 posts since Mar 2009
Reputation Points: 10
Solved Threads: 0
 

No problem. Glad you got it solved.

jbennet
Moderator
Moderator
18,523 posts since Apr 2005
Reputation Points: 1,826
Solved Threads: 601
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You