wojtek4994 Opublikowano 30 Maja 2006 Zgłoś Opublikowano 30 Maja 2006 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 30 Maja 2006 Zgłoś Opublikowano 30 Maja 2006 (edytowane) 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 30 Maja 2006 przez Dj_AnT Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 30 Maja 2006 Zgłoś Opublikowano 30 Maja 2006 (edytowane) 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 30 Maja 2006 przez PelzaK Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
SGJ Opublikowano 31 Maja 2006 Zgłoś Opublikowano 31 Maja 2006 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; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 31 Maja 2006 Zgłoś Opublikowano 31 Maja 2006 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
wojtek4994 Opublikowano 31 Maja 2006 Zgłoś Opublikowano 31 Maja 2006 Dzięki za pomoc, już działa!! Pozdro 4All Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...