Autor Téma: Zmena veľkosti formulára - veľké oneskorenie  (Přečteno 934 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #15 kdy: 04-07-2019, 13:02:34 »
Vyskúšal som všetky možné komponenty vhodné pre tento účel. Štandardné a TMS. Ani jeden to nezvládal prekresľovať bez odozvy :(  Ale boli kratšie. No nemal som tam nahodené všetky "stránky" s komponentami. Len tri.
Pri niektorých bolo očividne vidieť, že prekresľujú len viditeľnú stránku/tab. Pri ich zmene sa menila doba odozvy.
Z toho mi vyplýva, že asi nemá veľmi zmysel písať na podporu TMS. Buď ostanem pre poslednom riešení, alebo použijem iný komponent, ktorý vykresľuje len aktívnu stránku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #16 kdy: 04-07-2019, 14:09:45 »
Na rozdiel od TMS TAdvOfficePager, mi klasický vcl TPageControl funguje pekne a nepreblikáva.
Jasne, je menej sofistikovaný.
V prípade TMS TAdvOfficePager ma veľmi zaujala možnosť odpájať/pripájať dynamicky jednotlivé TMS TAdvOfficePage-s.
Úžasná je správa jednotlivých tabs.
Napr. CheckBox na skrytie. Zvislý text (ak sú vľavo). A ďalšie ..
Je to boj medzi účelným/zložitým a jednoduchým, bez blikania.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #17 kdy: 04-07-2019, 16:46:55 »
Priviedol si ma k napadu.
Nakoniec by to mozno stacilo takto:
Kód: Delphi [Vybrat]
  1. procedure TFrmMain.WMEnterSizeMove(var MsgSizeMove: TWMMove);
  2. var
  3.   i : Integer;
  4. begin
  5.   for i := 0 to pGC.AdvPageCount - 1 do
  6.     if ( i <> pGC.ActivePageIndex ) and not pGC.AdvPages[ i ].AlignDisabled then
  7.       pGC.AdvPages[ i ].DisableAlign;
  8.  
  9.   if not ComboBox1.AlignDisabled then        // Tieto tri Edit/Combo
  10.    ComboBox1.DisableAlign;                   // na hlavnej stranke priserne blikaju
  11.   if not EditOrigFileName.AlignDisabled then // pretoze su top-Aligned
  12.     EditOrigFileName.DisableAlign;           // Potrebujem ich totiz natahovat
  13.   if not Edit1.AlignDisabled then            // na celu sirku strany
  14.     Edit1.DisableAlign;
  15. end;
  16. //---
  17. procedure TFrmMain.WMExitSizeMove( var MsgSizeMove: TWMMove );
  18. var
  19.   i : Integer;
  20. begin
  21.   for i := 0 to pGC.AdvPageCount - 1 do
  22.     if pGC.AdvPages[ i ].AlignDisabled then
  23.       pGC.AdvPages[ i ].EnableAlign;
  24.  
  25.   ComboBox1.EnableAlign;
  26.   EditOrigFileName.EnableAlign;
  27.   Edit1.EnableAlign;
  28. end;
Tie drobné zmeny by mohli pomôcť.
Je to podľa vyššie uvedených kódov.
Robím tam testy, aby som zbytočne nevolal procedúry, ak netreba.
Plus myslím, ze je zbytočné tvoje visible =  false. (za predpokladu, že DisableAlign robí, čo sa očakáva)
Ide o to prekreslovanie.
Kukám na výsledok, ale zasvet neviem, či to je lepšie, než pôvodne.
Zdá sa mi to čoraz použitelnejšie..
Ak je to lepšie, tak Delfin vďaka za primárny odkaz.
Ešte to musím trochu premysliet.
Zatiaľ nie som si istý, že komponenty ozaj reagujú na tú peknú myšlienku


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #18 kdy: 04-07-2019, 18:26:35 »
Pri Visible = False je o niečo pružnejšia reakcia. Tá rekurzia SetAlign() nemá na konečný výsledok žiaden viditeľný vplyv. Skúšal som to. Mám tam toho dosť. Odhadom 100 - 200 komponentov.
Tie ComboBoxy majú poctivo nastavené DoubleBuffered = True? Ja si to nastavujem programovo. Lebo:
  • nemôžem nič vynechať
  • niektorým komponentom sa táto vlastnosť v dobe návrhu nedá nastaviť
« Poslední změna: 04-07-2019, 18:30:11 od Stanislav Hruška »
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #19 kdy: 04-07-2019, 18:34:37 »
Teraz som sa pozrel na ComboBox-y a u nich sa to zrovna v dobe návrhu nastaviť nedá ;D ;D
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #20 kdy: 04-07-2019, 19:00:58 »
Skúsil som teda TAdvDBLookupComboBox bez DisableAlign. Pri zmene veľkosti mi neblikal.
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #21 kdy: 04-07-2019, 20:19:14 »
Ja osobne všade kde mám PageControl, tak na Page vždy vkladám subForm. Vyskúšam Tvoj nápad. Dám vedieť.
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #22 kdy: 04-07-2019, 20:27:42 »
Dal som podformuláre Hide. Je to bez zmeny správania sa.
Edit: Dokonca to je horšie ako súčasné riešenie :o ???
« Poslední změna: 04-07-2019, 20:30:31 od Stanislav Hruška »
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #23 kdy: 04-07-2019, 21:07:19 »
Aby som nemusel rozmýšľať, tak som si spočítal všetko čo mám na PageControl. Trochu som to podcenil. Je toho 934. Je v tom všetko čo sa aj automaticky vygenerovalo. TAction, TIntegerField - polia tabuliek...
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #24 kdy: 04-07-2019, 21:10:54 »
Mám tam
Kód: Delphi [Vybrat]
  1. procedure TfrmFormMain.WMEnterSizeMove(var MsgSizeMove: TWMMove);
  2. var
  3.   I: Integer;
  4. begin
  5.   for I := 0 to offpgrPobes.AdvPageCount -1 do
  6.   begin
  7.     if (I <> offpgrPobes.ActivePageIndex) then
  8.     begin
  9.       offpgrPobes.AdvPages[I].Visible := False;
  10.       SetAlign(offpgrPobes.AdvPages[I], True);
  11.     end;
  12.   end;
  13. end;
Pričom SetAlign je rekurzívna procedúra, ktorá všetkým TWinControl nastaví DisableAlign.
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #25 kdy: 04-07-2019, 21:36:34 »
Citace
ControlCount?
Nie, skopírovanie z formulára do excelu a spočítanie.
Citace
Nevim na koho je ta reakce.
Na Teba. Je tam aj Tab.Visible := False. Ale to nestačí. Musí tam byť aj tá rekurzívna procedúra.
Urobil som to presne tak ako si písal a aj teraz píšeš. Overil som si to. Okrem jedného tabu boli všetky prázdne.
.
Predpokladal som presne to čo si napísal v teórii. Preto som tam vypleštil oči a čudujem sa.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #26 kdy: 04-07-2019, 21:43:37 »
Zdá sa, že Stano zdôrazňuje, že neaktívny tab má visible:=false;
Nie som si istý, či presne v tomto prípade, nemá zbytočné opakovanie príkazu "hide" negatívny vplyv. Zo skúseností viem, že sa vždy treba vyhnúť príkazom, čo sú už nadbytočné.
V tomto prípade sa cyklus zneviditeľnenia opakuje veľmi veľakrát (váčšinou zbytočne).
Preto som v príspevku dal kontrolu na
Kód: Delphi [Vybrat]
  1. if ( i <> pGC.ActivePageIndex ) and not pGC.AdvPages[ i ].AlignDisabled then
  2.       pGC.AdvPages[ i ].DisableAlign;
Je možné vložiť tam aj visible:=false;
"If ..AlignDisabled" spôsobí, že sa nevykonajú žiadne príkazy zbytočne.
Visible:=false, som u seba spravil v rámci TAdvOfficePager.onChanging, pretože to nastáva len keď treba zmenu.
Nie zbytočne pre každú udalosť "WMEnterSizeMove".
Tá sa kľudne vyvolá aj 100-vky, či 1000-ky krát medzi jednotlivými  "onChanging".
« Poslední změna: 04-07-2019, 21:50:18 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #27 kdy: 04-07-2019, 21:49:55 »
..
To je ovsem na ukor rychlosti prepinani (protoze se pred prepnutim tabu zobrazi form jenz se musi velikostne prepocist).
Tak ti neviem. Môže byť, že TAdvOfficePager tie svoje taby má ako subForms.
Pretože ich dokáže pripínať a odopínať. Ako samostatné okná.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #28 kdy: 04-07-2019, 22:20:46 »
Rozšírenie podmienky sa nijako neprejavilo. Ani obsah subFormu nemá vplyv na odozvu. 49 prvkov oproti 211 prvkom.
Znamená to jediné. Moja mašina to stačí všetko spracovať podstatne rýchlejšie, než to spracuje AdvPageControl. A je jedno či to je v debug režime alebo release.
.
To Delfin: urobil som to presne tak ako si písal. WMEnterSizeMove s WMExitSizeMove som zablokoval pomocou Exit na prvom riadku.
Ostávajú dve možnosti:
  • buď sa s tým zmieriť. To je môj prípad. Alebo
  • napísať na podporu. S ohľadom na skutočnosť, že k dlhšej odozve dochádza aj na štandardnom PageControl to považujem za zbytočné
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:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #29 kdy: 04-07-2019, 22:30:09 »
Tak som pre istotu urobil ešte raz test so štandardným PageControl. Dal som tam len jeden tab a obsah najbohatšieho formulára. Odozva je prakticky okamžitá. A teraz neviem čo s tým :-\  Predtým som mal obsadené tri taby.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.