Skocz do zawartości
wojtek4994

Zapytanie Podczas Wychodzenia Z Programu

Rekomendowane odpowiedzi

Mój cel jest prosty: przy zamykaniu programu, jeśli wartość odpowiednich zmiennych jest niezerowa, program ma wyświetlać ostrzegawczy komunikat z dwoma buttonami: Tak, Nie. Jeśli user kliknie Tak, program ma się zamknąć, jeśli Nie, ma dalej normalnie działać. Kod na razie wygląda tak [oczywiście C++]:

 

int result;if ((multiwin!=0)||(credit!=0)||(win!=0)) result=Application->MessageBoxA("KOMUNIKAT Czy na pewno chcesz zamknąć grę?","UWAGA!",MB_YESNO|MB_ICONWARNING);if (result==IDNO) return;
mam to umieszczone w OnClose głównej formy i nie wiem czy to jest błąd, czy może powyższy kod nie działa z innego powodu (mam na myśli to, że po kliknięciu dowolny przycisk program i tak się zamyka)

 

Wie ktoś o co chodzi? Pozdro

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie jest to C++ ale może jakiś pomysł się Tobie nasunie:

 

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosingDim i As Integer i = MsgBox("Are you sure want to exit?", MsgBoxStyle.YesNo) If i = 6 Then  Me.Dispose() 'zamknij program Else  e.Cancel = True 'nie zamykaj End IfEnd Sub
Edytowane przez Dj_AnT

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

chyba częściowo znalazłem rozwiązanie Twojego problema :]

There are several things that happen during a delphi program:

 

1. Create the constructor is the first thing called. Not everything is set up yet: the constructor does a lot of this. It should also call its ancestor

2. OnCreate is called right after the creation is done. This is the perfect time to do things like setting initial data on components like TEdit or TMemo

3. OnShow is called right before the form is shown. You can still set a lot of things, but this procedure is called each time the form is shown. You can use this to reset certain components to default values

4. OnActivate is called when the form is created and shown, and right before it gets activated. Also this is called each time a form is shown.

5. OnCloseQuery is called when the user (or your code) tries to close the form. The closing can still be stopped by setting CanClose to false

6. OnClose occurs right before the form is closed. You cannot stop the closing anymore, and should also tell Delphi what to do with the form after it is closed: free it or just hide it and leave it in memory. This is the opposite of OnShow

7. Destroy is the destructor and is the last thing called. This is the complement of the constructor Create, and anything you've created in the constructor should be undone here.

zatem stad wynika że aby przerwać wyłączanie aplikacji należy kod umieścić w metodzie onCloseQuery() :)

 

edit:

 

i faktycznie działa...

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose){	CanClose=false;}
Możesz sobie klikać w X a aplikacji nie zamkniesz :) Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W onclose tez sie da

 

W delphi idzie to tak, w builderze powinno podobnie

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);var wynik:integer;begin  wynik:=Application.MessageBox('Czy na pewno chcesz zakończyć pracę programu?','Zamknąć program?', MB_YesNo+MB_DefButton1+MB_IconQuestion);		 case wynik of		  7: Action:=caNone;		  6: Action:=caFree;		end;end;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no popatrz.. a tam wyraźnie jest napisane: You cannot stop the closing anymore... :)

Imho w metodzie onCloseQueryy jest to bardziej po ludzku i poprawnie, gdyż metoda ma specjalnie ku temu referencję... więc masz pewność że zostanie to dobrze zinterpretowane...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...