Autor Téma: Embarcadero príklad  (Přečteno 1558 krát)

Offline František

  • Hrdina
  • ****
  • Příspěvků: 459
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Embarcadero príklad
« Odpověď #15 kdy: 08-12-2018, 13:59:14 »
vdaka
takze momentálne tam mám tDictionary, mám to nahradiť?

ps. OnCreate a OnClose sú evety hlavného formulara, takže mam to teda dat radšej na OnDestroy?

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1523
  • Karma: 60
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Embarcadero príklad
« Odpověď #16 kdy: 08-12-2018, 14:43:16 »
vdaka
takze momentálne tam mám tDictionary, mám to nahradiť?

ps. OnCreate a OnClose sú evety hlavného formulara, takže mam to teda dat radšej na OnDestroy?

Zavreni formulare jeste neznamena jeho destrukci (od toho ma udalost OnClose parametr Action). A pokud chces kolekci objektu, pouzij spis TObjectDictionary (u TDictionary bys musel objekty uvolnovat sam; bud extrakci nebo napr. v udalosti OnValueNotify). TObjectDictionary umoznuje v konstruktoru specifikovat vlastnictvi klicu nebo hodnot, cimz se jeho instance pri destrukci postara o destrukci vlastnenych klicu ci hodnot.

Muzeme tedy rict, ze se TObjectDictionary muze starat o lifetime klicu ci hodnot. TDictionary toto neumi. To jsem se snazil rict uvodnim prispevkem.
« Poslední změna: 08-12-2018, 14:47:55 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3833
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Embarcadero príklad
« Odpověď #17 kdy: 08-12-2018, 14:44:27 »
Citace
ps. OnCreate a OnClose sú evety hlavného formulara, takže mam to teda dat radšej na OnDestroy?
Každý je iný a má svoju špecifikú úlohu. Kedysi som si dal tú namahu a vytvoril toto - príloha:



« Poslední změna: 08-12-2018, 14:48:49 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1523
  • Karma: 60
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Embarcadero príklad
« Odpověď #18 kdy: 08-12-2018, 15:14:34 »
Citace
ps. OnCreate a OnClose sú evety hlavného formulara, takže mam to teda dat radšej na OnDestroy?
Každý je iný a má svoju špecifikú úlohu. Kedysi som si dal tú namahu a vytvoril toto - príloha:

Osobne bych se snazil tyto objekty oddelit od UI (tedy formularu a jeho udalosti), ale to uz je jine tema...
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3833
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Embarcadero príklad
« Odpověď #19 kdy: 11-12-2018, 11:17:33 »
Citace
Jelikož ReportMemoryLeaksOnShutdown je testována až ve finalization sekci FastMM4.pas tak to jednoznačně není pravda, navíc nechápu jak by to mělo fungovat, protože i z různých formulářů můžeš alokovat třeba globální proměnné nebo cokoliv jiného a ten memory manager by to v tvém případě reportoval. Prostě je to nesmysl, možná si to pleteš se zavřením posledního formuláře.
Teraz som si overil, že niektoré veci hlási už pri uzavretí fromulára. Pokus o uvoľnenie už uvoľneného objektu.
Ale máš pravdu. Nie je to MemoryLeak. To som nerozlíšil/neuvedomil si.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Hrdina
  • ****
  • Příspěvků: 459
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Embarcadero príklad
« Odpověď #20 kdy: 12-12-2018, 09:34:55 »
takže to patrí do
Kód: Delphi [Vybrat]
  1. initialization
  2. finalization
?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3833
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Embarcadero príklad
« Odpověď #21 kdy: 12-12-2018, 10:47:59 »
Mne tu napísali, že tie dve sekcie sa používajú v špeciálnych prípadoch (asi v spojení s interface) a bežných prípadoch sa to nemá  používať. Veď použi ten TObjectDictionary a nemáš čo riešiť. A ako písali, uvoľniť/zlikvidovať to v MyForm.OnDestroy
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Hrdina
  • ****
  • Příspěvků: 459
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Embarcadero príklad
« Odpověď #22 kdy: 14-12-2018, 11:36:45 »
v podstate ten slovnik pouziavaju vsetky formulare, ale vsetky su volane z hlavneho, tak ok OnKrijejt, OnDestroj

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3833
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Embarcadero príklad
« Odpověď #23 kdy: 14-12-2018, 13:28:40 »
Máš ešte jednu možnosť. Slovník vytvoriť i zničiť v súbore *.dpr. + tým pádom nebudeš musieť robiť prepojenie na hlavný formulár. To občas robí problémy s kruhovými odkazmi. Ja ani v jedinom svojom formulári nemám odkaz na hlavný fromulár.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Mladík
  • **
  • Příspěvků: 75
  • Karma: 7
    • Verze Delphi: XE2
Re:Embarcadero príklad
« Odpověď #24 kdy: 14-12-2018, 14:47:03 »
Osobne bych se snazil tyto objekty oddelit od UI (tedy formularu a jeho udalosti), ale to uz je jine tema...

Mám taky tento názor.
V tomto případě se mi jeví jako nejvhodnější   použít Datamodul   
IMHO  lepší než   *.dpr  nebo  sekce "ini/fini"

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1523
  • Karma: 60
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Embarcadero príklad
« Odpověď #25 kdy: 14-12-2018, 14:51:54 »
Osobne bych se snazil tyto objekty oddelit od UI (tedy formularu a jeho udalosti), ale to uz je jine tema...

Mám taky tento názor.
V tomto případě se mi jeví jako nejvhodnější   použít Datamodul   
IMHO  lepší než   *.dpr  nebo  sekce "ini/fini"

Volil bych spis separatni modul (unit) a v nem implementoval singleton.
« Poslední změna: 14-12-2018, 14:54:28 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Jirka

  • Mladík
  • **
  • Příspěvků: 75
  • Karma: 7
    • Verze Delphi: XE2
Re:Embarcadero príklad
« Odpověď #26 kdy: 14-12-2018, 15:17:09 »
Volil bych spis separatni modul (unit) a v nem implementoval singleton.

Tuto techniku prakticky vůbec nepoužívám , takže je mi bližší D.M .

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1523
  • Karma: 60
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Embarcadero príklad
« Odpověď #27 kdy: 14-12-2018, 15:49:59 »
Volil bych spis separatni modul (unit) a v nem implementoval singleton.

Tuto techniku prakticky vůbec nepoužívám , takže je mi bližší D.M .

Problem je v tom, ze se da vytvorit vice instanci data modulu, cimz nebude existovat jen jedna instance toho objektu (slovniku). Navic osobne data modul povazuji jen jako kontejner na nevizualni komponenty. Ale to je vec nazoru.
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 798
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Embarcadero príklad
« Odpověď #28 kdy: 14-12-2018, 17:15:58 »
Máš ešte jednu možnosť. Slovník vytvoriť i zničiť v súbore *.dpr. + tým pádom nebudeš musieť robiť prepojenie na hlavný formulár. To občas robí problémy s kruhovými odkazmi.

Tak takovou čípovinu jsem neslyšel už dlouho. No třeba jenom nechápu.

Ja ani v jedinom svojom formulári nemám odkaz na hlavný fromulár.

Toto tě naopak zase ctí.
Embarcadero Technology Partner

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3833
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Embarcadero príklad
« Odpověď #29 kdy: 14-12-2018, 17:55:27 »
Citace
Tak takovou čípovinu jsem neslyšel už dlouho. No třeba jenom nechápu.
Aspoň má úplne jasne dané ako to nerobiť :D 
A pre mňa to znamená pozrieť do dpr a upraviť ho. Vytváram tam globálny objekt (globálne premenné), ktorý používam počas celej životnosti programu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: