Autor Téma: VirtualStringTree - OnChange  (Přečteno 163 krát)

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3081
  • Karma: 29
    • Verze Delphi: XE7 professional
VirtualStringTree - OnChange
« kdy: 10-12-2017, 20:14:46 »
Podľa mojich zistení sa táto udalosť vždy volá 2 x po sebe. To mi robí dosť problém, lebo mám tieto udalosti zreťazené. Keď mám napr. tri úrovne, tak VST3.OnChange sa vykoná 8 x. Keď uvážime, že tam hľadám záznam v DB pomocou Locate(), čo je ten lepší prípad a napĺňam iné VST + ktovie čo, tak to už je o držku.
Dá sa to nejako minimalizovať? Nemám na mysli samotné OnChange. To musí zbehnúť 2 x, lebo až pri druhom zbehnutí sú k dispozícii tie správne údaje, ale môj kód. Stačí ho spustiť pri druhom vykonávaní OnChange.

To je daň "zložený" formulár. Mám PageControl a na každej strane (aj 14) je pôvodne samostatný formulár, ktoré sú teraz väčšinou previazané. To znamená, že výber záznamu v jednom VST zmení obsah všetkých VST pod ním.
« Poslední změna: 10-12-2017, 20:19:30 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 546
  • Karma: 25
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:VirtualStringTree - OnChange
« Odpověď #1 kdy: 10-12-2017, 20:38:12 »
Podľa mojich zistení sa táto udalosť vždy volá 2 x po sebe. To mi robí dosť problém, lebo mám tieto udalosti zreťazené. Keď mám napr. tri úrovne, tak VST3.OnChange sa vykoná 8 x. Keď uvážime, že tam hľadám záznam v DB pomocou Locate(), čo je ten lepší prípad a napĺňam iné VST + ktovie čo, tak to už je o držku.
Dá sa to nejako minimalizovať? Nemám na mysli samotné OnChange. To musí zbehnúť 2 x, lebo až pri druhom zbehnutí sú k dispozícii tie správne údaje, ale môj kód. Stačí ho spustiť pri druhom vykonávaní OnChange.

To je daň "zložený" formulár. Mám PageControl a na každej strane (aj 14) je pôvodne samostatný formulár, ktoré sú teraz väčšinou previazané. To znamená, že výber záznamu v jednom VST zmení obsah všetkých VST pod ním.

Pri vyberu jedne vetve je prvni udalost pro zruseni vyberu (ClearSelection), druha udalost pro aktivaci nove vybrane vetve. V prvnim pripade je parametr Node == nil, v pripade druhem jde a nove vybiranou vetev. Mohl bys tedy pouzit:

Kód: Delphi [Vybrat]
  1. procedure TForm1.VirtualStringTree1Change(Sender: TBaseVirtualTree; Node: PVirtualNode);
  2. begin
  3.   if Assigned(Node) then
  4.     ShowMessage('New node is being selected... [applies only for single node selection, not for node multiselection!]');
  5. end;
« Poslední změna: 10-12-2017, 20:44:53 od Delfin »
Shiny disco balls! I don't like :)

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3081
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:VirtualStringTree - OnChange
« Odpověď #2 kdy: 10-12-2017, 20:44:50 »
Hm, ja tam mám test na Node = nil. Tak si to preverím či mi to za tým testom ide 2 x.
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: