Autor Téma: SubForm - nevykoná sa kód v OnClose a OnCloseQuery  (Přečteno 292 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Podformuláre sú vytvorené podľa návodu na Delphi.cz. Nerozumiem prečo tomu tak je.
Mám problém v tom, že potrebujem uvoľniť objekty z ComboBox-ov. Ale v časti OnDestroy mám ComboBox.Items.Count = 0
Teraz neviem čo s tým. Viem si vytvoriť samostatné zoznamy objektov. To považujem za somarinu. Doteraz mi to fungovalo bez problémov.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 510
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #1 kdy: 20-09-2019, 20:06:38 »
vsak urci comboboxom vlastnika formular a on ich uvolni automaticky pri svojom uvolneni

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #2 kdy: 20-09-2019, 20:12:13 »
To nejde. O objekty sa musí postarať programátor. Toľko návod a moja skúsenosť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 510
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #3 kdy: 21-09-2019, 08:48:13 »
opytaj sa sisarpistov

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #4 kdy: 21-09-2019, 10:36:47 »
Už tuším kde asi je chyba ;)  Žiaľ, ešte mi nenapadlo ako to vyriešiť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #5 kdy: 21-09-2019, 12:24:09 »
Bol som vonku a postupne mi to došlo. Ale jednej veci nerozumiem. Bol by som rád, keby mi to niekto vysvetlil.
.

Vytvorím formulár a v ňom si vytvorím podformuláre, ktorým priradím parent. Je to panel na formulári. Inštancie podformulárov dávam do premenných.
.
Zatvorím formulár a podromuláre nie sú zničené. Moja úvaha bola nasledovná:
  • podformulár má priradený parent z formulára
  • tým pádom sa ako vlastník nastaví formulár
  • pri zničení formulára sa samotný formulár postará o zničenie podformulárov
Posledný bod zjavne neplatí. A tu by som si poprosil vysvetlenie prečo?
Teraz už viem, že musím sám zničiť premenné v ktorých sú inštancie podformulárov.
Ďakujem.
.
To František: čo to je ten sisarpista?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 510
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #6 kdy: 21-09-2019, 13:24:11 »
parent je vlastnik na formulari (viz.komponentov)
owner v hierarchii objetov

vid. https://delphi.cz/post/Nahrazeni-frames-za-vlozene-formulare.aspx
« Poslední změna: 21-09-2019, 13:27:28 od František »

Offline František

  • Guru
  • *****
  • Příspěvků: 510
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #7 kdy: 21-09-2019, 13:25:44 »
To František: čo to je ten sisarpista?

síšarpista - C# programátor - tam sa uvoľňujú automaticky

Offline František

  • Guru
  • *****
  • Příspěvků: 510
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #8 kdy: 21-09-2019, 13:59:05 »
citace z odkazu (RČ):

"... vytvoříme instanci formuláře (vlastníkem, a tedy ten kdo ho uvolní je formulář via Self), přes Parent ho přiřadíme do panelu.

Tohle je častý omyl u začátečníků - nepleťte si vlastníka (toho kdo bude objekt uvolňovat v okamžiku kdy vlastník zanikne) a ten prvek, který bude vizuálním otcem. Mohl bych napsat jako vlastníka Panel1, a bylo by to korektní - ale takto se můj formulář zruší, až se zruší ten druhý formulář. Mezitím mohu cvičit s Panel1 a nebude to mít vliv na život injektovaného formuláře. Možná to trošku komplikuji, ale chtěl jsem ukázat, že vlastník a parent nemusí být ten sám."

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #9 kdy: 21-09-2019, 14:12:17 »
Veľké ďakujem. Keby si použil diakritiku, tak by som vedel o čom píšeš :)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 510
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #10 kdy: 24-09-2019, 09:36:06 »
a aké riešenie si nakoniec použil/vybral?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:SubForm - nevykoná sa kód v OnClose a OnCloseQuery
« Odpověď #11 kdy: 24-09-2019, 11:54:50 »
Najprv k problému: subform som robil podľa odkazu. Tam len písal, že Owner a Parent nie sú to isté. To som už vedel. Odpoveď na svoju otázku som tam nenašiel.
.
Riešenie: v OnCloseForm ničím všetky podformuláre. Nemám žiadne AV, Memory leak ani nič podobné.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.