Autor Téma: Zničenie podformulára a jeho premenných  (Přečteno 722 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Zničenie podformulára a jeho premenných
« kdy: 02-10-2015, 15:57:18 »
Vkladám na formulár podformulár. V ňom mám definované
Kód: Delphi [Vybrat]
  1.   public
  2.     cBankAccount: TBankAccount;
  3.     class function CreateAsSubform(AOwner: TCustomForm; AParent: TPanel): TfrmBankAccount;
  4.  
vo formulári mám
Kód: Delphi [Vybrat]
  1.   private
  2.     FfrmBankAccount: TfrmBankAccount;
  3. ...
  4.   FfrmBankAccount := TfrmBankAccount.CreateAsSubform(Self, pnlBankAccount);
  5. ...
  6.  
  7. procedure TfrmFOC.FormDestroy(Sender: TObject);
  8. begin
  9.   FreeAndNil(FfrmBankAccount);
  10.  
a vo frmBankAccount
Kód: Delphi [Vybrat]
  1.   FreeAndNil(cBankAccount);
  2.  
a tu mi, len v tomto jedinom prípade, v
Kód: Delphi [Vybrat]
  1. destructor TCustomVst.Destroy;
  2. begin
  3.   FqryFieldList.OwnsObjects := True;
  4.   FqryFieldList.Clear;
  5.  
pošle oznam "Invalid pointer operation". Ja na to nevidím dôvod. Určite to je spojené s ničením podformulára, ale neviem to vyriešiť
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3006
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Zničenie podformulára a jeho premenných
« Odpověď #1 kdy: 02-10-2015, 16:02:10 »
FqryFieldList.OwnsObjects := True;

Proč? Pokud tam jen vkládáš existujíc Fields, tak to neřeš (nesmíš), to uvolní Query. Pokud tam vytváříš vlastní TField, tak to je jiná. A stejně bych to nastavil před tím, než do toho budu něco vkládat.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Zničenie podformulára a jeho premenných
« Odpověď #2 kdy: 02-10-2015, 16:07:41 »
Citace
A stejně bych to nastavil před tím, než do toho budu něco vkládat.
Mal som to tak. Ale používam to viackrát počas života formulára a robilo to problémy. Zmena parametrov. Musel som nastaviť False.
Citace
Pokud tam vytváříš vlastní TField, tak to je jiná.
Ja tam vkladám existujúce z Dataset-ov (Query, Table, StoredProcedure).

Díky za info.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.