Autor Téma: Nezavolané procedúry formulára  (Přečteno 352 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Nezavolané procedúry formulára
« kdy: 08-08-2023, 07:26:01 »

Neviem prečo sa mi nezavolajú procedúry. Vď nižšie
Kód: Delphi [Vybrat]
  1.   TBasalForm = class(TForm)
  2.   public
  3. //  Zbehne
  4.     function CloseQuery: Boolean; override;
  5. .
  6.   TSubForm = class(TBasalForm)
  7.   end;
  8. .
  9.   TfrmsubStadium = class(TSubForm)
  10. //  Zbehne
  11. procedure TfrmsubStadium.FormDestroy(Sender: TObject);
  12. //  Nespustia sa
  13. procedure TfrmsubStadium.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  14. procedure TfrmsubStadium.FormClose(Sender: TObject; var Action: TCloseAction);
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Nezavolané procedúry formulára
« Odpověď #1 kdy: 08-08-2023, 09:03:48 »
Našiel som škaredé riešenie. Bol by som rád, keby to fungovalo bez toho.
Kód: Delphi [Vybrat]
  1.   for var I := 0 to FFormData.Last.FormObjects.Count -1 do
  2.   begin
  3.     BasalForm := FFormData.Last.FormObjects[I].BasalForm;
  4. .
  5.     if Assigned(BasalForm.OnCloseQuery) then
  6.       BasalForm.OnCloseQuery(BasalForm, T);      
  7.  .    
  8.     if Assigned(BasalForm.OnClose) then
  9.       BasalForm.OnClose(BasalForm, Ca);
  10.   end;
Alebo tie kódy presuniem do FormDestroy.
« Poslední změna: 08-08-2023, 09:09:46 od Stanislav Hruška »
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 453
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Nezavolané procedúry formulára
« Odpověď #2 kdy: 09-08-2023, 08:02:34 »
FormDestroy je uz pozde na to resit, jestli se má form zavrit (CloseQuery).
Podobne debilni  chovani je v poslednich verzich Delphi u MDI, kde prekopali logiku a nektere udalosti se nespousti nebo spousti jinde nez driv.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Nezavolané procedúry formulára
« Odpověď #3 kdy: 09-08-2023, 08:36:44 »
FormDestroy je uz pozde na to resit, jestli se má form zavrit (CloseQuery).
Podobne debilni  chovani je v poslednich verzich Delphi u MDI, kde prekopali logiku a nektere udalosti se nespousti nebo spousti jinde nez driv.
Predok má definované CloseQuery, kde riešim zatvorenie formulára. To je v poriadku. Vo FormDestroy riešim veci ako:
  • zničenie objektov
  • zapísanie hodnôt (ItemIndex, Checked...) do JSON
  • nastavenie verejných premenných pre riadenie GUI
Takže nič, čo by som nejako mohol zmeškať. Podľa Tvojho príspevku je najlepšie to riešiť takto.
Ďakujem.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.