Zatrzymanie aplikacji na wyjsciu

0

mam prosty programik z memo i dwoma buttonami, wczytywanie z pliku i zapisywanie do pliku. Zrobilem tez zmienna logiczna ktora okresla czy wprowadzono zmiany we wczytanym tekscie. Chcialem zrobic zdarzenie przy zamykaniu aplikacji polegające na sprawdzeniu wartosci zmiennej logicznej i w przypadku gdyby byla prawdziwa - program powinien sie zatrzymac i zapytac czy zapisac zmiany. Przegladajac zakładke events glownej formatki znalazlem pozycje "onDestroy" i wpisałem nastepujący kod:

procedure Tformgl.FormDestroy(Sender: TObject);
var
blad:integer;
begin
  if zmiana then
  begin
    blad:=messagedlg('Nie zapisano zmian! Zapisać?',mtWarning,mbYesNoCancel,0);
    if blad=6 then
    begin
      bZapiszzmiany.Click;
      bZamknijpl.Click;
    end;
    if blad=7 then bZamknijpl.Click;
    if blad=2 then exit;
  end;
end;

No i niestety jak zamykam program to tylko przez chwile widze jak okienko z pytaniem mignie, ale caly program i tak sie zamyka, nie zatrzymuje sie na tym pytaniu. Co zrobic aby program czekał na wybor opcji? Moze inaczej to sie realizuje niz przez onDestroy? jak?

0
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   if MessageDlg('Nie zapisano zmian! Zapisać?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then bZapiszzmiany.Click;
end;
0

Dziekuje, działa, a czy jest mozliwosc aby dodac guzik Anuluj i po jego nacisnieciu zatrzymac procedure, tzn aby aplikacja sie nie zamknela?

0
WombaT napisał(a)

Dziekuje, działa, a czy jest mozliwosc aby dodac guzik Anuluj i po jego nacisnieciu zatrzymac procedure, tzn aby aplikacja sie nie zamknela?

dasej napisał(a)
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   if MessageDlg('Nie zapisano zmian! Zapisać?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then bZapiszzmiany.Click;
end;

zrób tak (działa ale czy to zgodne z konwencją ;) )

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   if MessageDlg('Nie zapisano zmian! Zapisać?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
             bZapiszzmiany.Click
  else
             Application.Run;
end;

</quote>
0

No kurcze, nie podpowiadaj mu głupot.

w tym zdarzeniu masz zmienną CanClose. Nadaj jej wartość false

0

omg! ilo racja ;) tylko proszę nie bić ;) przyznaję się do błędu! może to dlatego że już 8 godzin przed kompem siedzę ;)

0

działa, wielkie dzieki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1