Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz: Kilépés OnCloseQuery? 2015 márc. 14 06:00 #1504

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Igen, közben rájöttem. Köszönöm!!
:)

Válasz: Kilépés OnCloseQuery? 2015 márc. 14 05:32 #1503

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Az Application.Terminate nem egy adott Form-ot zár be, ezért Form-specifíkus eseménykezelőt sem hív (alapesetben). Az Application.Terminate egy virtuális metódus aminek van ugyan alaértelmezett kódja, de létrehozhatsz egy másikat helyette (az igényeidnek megfelelőt) a saját alkalmazásod fő forrásfájljában (*.lpr).

Ráadásul az exitButtonClick eljárásodbanól hívhatod a Form-od Close metódusát aminek hatására a már elkészített OnCloseQuery eseménykezelő végre lesz hajtva:
procedure TForm1.exitButtonClick(Sender: TObject);
begin
  Close;
end;
Fontos: Egy Form bezárása nem minden körülmények között egyenlő az alkalmazásból történő kilépéssel.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 20:35 #1502

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Kipróbáltam amit küldtél. Köszönöm!

Egy win64 Laz-1.4RC2-n. De szerintem nem ez lesz a probléma.
A kód, amit küldtél, az nálam is működik Win és Linux (1.2.6) alatt is!
Mert, ha csak a bezárás ikonnal zárom be az alkalmazást, akkor működik:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
   if MessageDlg('Biztos, hogy kilép?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
     CanClose:=false;
end;

Ha viszont a Kilépés gombbal, akkor nem:
procedure TForm1.exitButtonClick(Sender: TObject);
begin
  application.Terminate;
end;

Tehát ez a különbség! Azaz az "application.Terminate;" esetén nem fut le az OnCloseQuery.

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 18:45 #1501

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Elküldtem!
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 18:13 #1498

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1

Gábor írta: Nos, én is megnéztem egy régebbi windows-os kiadást és nekem az is működik.
Nemigen tudok másra gondolni, minthogy az eljárás nincs az OnCloseQuery eseményhez rendelve az "Objektum felügyelőben"...


Minden oké az objektum felügyelőben. Eltudnád küldeni ezt a demo projektet? Kíváncsi vagyok nálam működik-e.

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 17:11 #1496

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Nos, én is megnéztem egy régebbi windows-os kiadást és nekem az is működik.
Nemigen tudok másra gondolni, minthogy az eljárás nincs az OnCloseQuery eseményhez rendelve az "Objektum felügyelőben"...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 16:05 #1495

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Egy másik gépen (win32) kipróbáltam 1.4RC2 verziót, de ott se működött:
procedure TForm1.exitButtonClick(Sender: TObject);
begin
  application.Terminate;
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
   if MessageDlg('Biztos, hogy kilép?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
     CanClose:=false;
end;

A fenti kódra a kilépés gombra azonnal kilép. Nem kérdez semmit.
Vagy rosszul csinálom?

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 15:43 #1493

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1

Gábor írta: Nem írtad melyik változatot használod, mindenesetre nálam a fejlesztői változatban megjelenik a kérdés.
Javaslom, hogy töltsd le a legutóbbi kiadás t (1.4RC2) és próbáld meg azzal is.


Jogos: 1.2.6 win64 változaton próbáltam.

Válasz: Kilépés OnCloseQuery? 2015 márc. 13 13:45 #1491

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 504
  • Köszönetek: 86
Nem írtad melyik változatot használod, mindenesetre nálam a fejlesztői változatban megjelenik a kérdés.
Javaslom, hogy töltsd le a legutóbbi kiadás t (1.4RC2) és próbáld meg azzal is.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Kilépés OnCloseQuery? 2015 márc. 13 07:23 #1489

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!

Delphi-ben szépen működött az OnCloseQuery eseményben a kilépés kezelése:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
    if MessageDlg('Biztos, hogy kilép?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
     CanClose:=false;
end;  


Lazarusban nem fut le. Vagy mit hagyok ki?

  • Oldal:
  • 1