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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #45 kdy: 04-07-2019, 23:31:20 »
Tak som v rámci pokusov nahodil štandardný PageControl a zapol funkcie k OnResize. AdvPgeControl som celkom vypol. Overené. Ostal som prekvapený. Nejaký veľký rozdiel tam nebol.
S pokusmi končím. A už preťahujem večierku o 1,5 hodiny.
Dobrú noc!
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #46 kdy: 05-07-2019, 09:03:06 »
Citace
Visible:=false, som u seba spravil v rámci TAdvOfficePager.onChanging, pretože to nastáva len keď treba zmenu.
Podľa mňa to má byť povinne v OnChange.
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ěď #47 kdy: 05-07-2019, 09:15:37 »
.. Pred prepnutim na jiny tab se schova aktualne zobrazeny formular a zobrazi ten co je na prepinanem tabu (cimz se vyvola realign). Nic vic, nic mene. ..
To by zodpovedalo onChanging teda pred prepnutím.
OnChange nastane v čase, keď už je prepnutie hotové. Neskoro.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #48 kdy: 05-07-2019, 09:40:01 »
.. Pred prepnutim na jiny tab se schova aktualne zobrazeny formular a zobrazi ten co je na prepinanem tabu (cimz se vyvola realign). Nic vic, nic mene. ..
To by zodpovedalo onChanging teda pred prepnutím.
OnChange nastane v čase, keď už je prepnutie hotové. Neskoro.
Hm, asi to tak je. Skúšal som to a akosi to v OnChange nefungovalo, aj kvôli môjmu zdrojáku, na 100 %. Tak to skúsim v OnChanging
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #49 kdy: 05-07-2019, 11:12:22 »
Udalosti WMExitSizeMove, WMExitSizeMove  sa nevolajú opakovane! Nie sú súčasťou OnResize. Jedine pri výbere okraja formulára, kurzor v tvare <-> a spol., plus ľavé tlačidlo myši dole a potom hore. Čiže len jediný raz.
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ěď #50 kdy: 05-07-2019, 12:15:21 »
Udalosti WMEnterSizeMove, WMExitSizeMove  sa nevolajú opakovane! Nie sú súčasťou OnResize. Jedine pri výbere okraja formulára, kurzor v tvare <-> a spol., plus ľavé tlačidlo myši dole a potom hore. Čiže len jediný raz.
Máš pravdu.
Predpokladal som, že WMEnterSizeMove sa volá pri ťahaní myšou opakovane.
Nevolá. Je tam tiež len raz.

Ale konečne: M Á M    T O !!!
  • WMEnterSizeMove, WMExitSizeMove ako bolo uvedené posledne
  • a OnChanging takto :
Kód: Delphi [Vybrat]
  1. procedure TFrmMain.AdvOfficePager1Changing(Sender: TObject; FromPage, ToPage: Integer; var AllowChange: Boolean);
  2. var
  3.   i : Integer;
  4. begin
  5.    for i := 0 to pGC.AdvPageCount - 1 do
  6.      if pGC.AdvPages[ i ].Visible <> ( pGC.AdvPages[ ToPage ] = pGC.ActivePage ) then
  7.        pGC.AdvPages[ i ].Visible := pGC.AdvPages[ ToPage ] = pGC.ActivePage;
  8. end;
Pri ťahaní myšou vôbec nebliká a ani nezanecháva čierne stopy pod oknom. Hurá..

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #51 kdy: 05-07-2019, 15:08:03 »
Citace
Stovky komponent iMHO nemaji z pohledu prehlednosti UX na jednom tabu co delat.
Ten maximálny počet komponentov na jednom subform nie je 211 ale 107. Z toho 12 nevizuálnych. Sú rozhodené na 4 paneloch a vždy je viditeľný len jeden. Takže tých WinControl bude okolo 400 na celom PageControl. Kopa Label-ov, panelov a GroupBox-ov.
V mojom prípade som si nemohol vyberať. Edit komponenty sú dané predpismi (STN). Ostatné
  • logikou skupín vstupov,
  • vzhľadom formulára ako takého a
  • mojím spôsobom práce. Hlavne panely
Formulár musí byť čo najjednoduchší a musí viesť užívateľa pri zadávaní údajov.
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ěď #52 kdy: 05-07-2019, 15:37:08 »
    Dík.
    Ale celkom bez názoru nie som.
..
  • Na každej strane/záložke som všetky komponenty strčil na TPanel. Ten na báze eventu onChanging upravím Visible:=False. Dúfam, že tak sa zbytočne nevykresľujú všetky komponenty, keď nie sú visible..
..[/list]
Už tam som prakticky skrýval obsah tabov v OnChanging. Myslím, že pred tvojou zmienkou o ich skrývaní.
Lenže, skryl som všetko okrem prvého tab. Ten je na začiatku prázdny a osamotený. Sám o sebe vôbec nezdržoval.
Po naplnení to bol práve on, ktorý sa stal problémovým.
Popri nemnohých iných controls, obsahuje TAdvRichEdit. Ten v kritickom čase už obsahuje veľa fôzne formátovaného textu.
Pokus omyl ukázal, že takto naplnený TAdvRichEdit je veľká galiba..
TAdvRichEdit je TMS náhrada za RichEdit a nijako nie je odvodený od toho vo Windows.
Editor na začiatku prázdny ( pred načítaním databáz ) nič nezdržoval.
Zmiatlo ma to a doviedlo k špatnému záveru, že až tie ďalšie taby sú problém.
Pričom hlavný problém v danom programe je tento:
TAdvRichEdit ale
  • naplnený a bohato formátovaný
  • v kombinácii s viacerými tab (ak nie sú skryté ) OnChanging
Predošlé skúsenosti s RichEdit mi ani na chvíľu nenavodili podozrenie z formátovania textu.
Lenže platí TAdvRichEdit <> RichEdit (Windows)
Preto som tak dlho laboroval.
Potvrdzujem Stanovi (mechanicky som zamenil svoj cyklus tým jeho. Vtedy sa kód vztiahol na všetky tab )
aj Delfinovi (WMEnterSizeMove, WMExitSizeMove),
že majú zásluhu na použiteľnosti TAdvOfficePager pre môj prípad.
Predtým sa vôbec nedal pozerať - blikal a zanechával nechutnú čiernu stopu pri zmene veľkosti okna.

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ěď #53 kdy: 05-07-2019, 15:56:12 »
Absolútne.
Aj som to tak mal, lenže v rámci neho som mal schválne výnimku na prvý tab.
Ten som považoval za neškodný. Keďže na začiatku neblikal..
(V OnChanging som mal aj ďalší, dosť veľký kód.)
Potom som tam mechanicky bachol celý Stanov cyklus a rozsvietilo sa.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #54 kdy: 05-07-2019, 16:25:46 »
Citace
To by Ti to schovavani neviditelneho obsahu melo s tou odezvou pomoci. Z tech cca 400 komponent by se tak realign provadel se zmenou velikosti pro takovych 25 (?), v danou dobu viditelnych.
Nemám ich ani toľko. Ale doba odozvy sa akosi veľmi neodvíja od zložitosti zobrazeného subform. To už neriešim. Dá sa žiť so súčasným stavom.
 
Citace
Dalsi veci je blikani. To pak zavisi na vykreslovani tech komponent, ovsem popsana optimalizace realign na nej bude mit pozitivni vliv.
Nič mi nebliká. Vyriešil som to programovým nastavením DoubleBuffered := True pre všetky WinControl. Ručne sa to ani nedá.
Vyššie som písal, že som skúsil štandardný PageControl a tiež mal problém. Preto to riešili aj iný.
Akurát, že nám sa nepáči nastaviť DisableAlign pre viditeľný tab.
  • Vyzerá to otrasne
  • Ako si má užívateľ nastaviť správnu veľkosť, keď to nevidí :)  Myslím tým účinok/výsledok zmeny veľkosti formulára
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #55 kdy: 05-07-2019, 18:30:11 »
Citace
Ad DoubleBuffered, komponentam staci nechat zapnutou volbu ParentDoubleBuffered a DoubleBuffered zapnout jen jejich predkovi (jenz tim zajisti propagaci volby).
Viem o tom. Ale to už mám jedno čo nastavím. Takto určite nič nevynechám.
Citace
Nicmene DoubleBuffered jsem v realne aplikaci snad nikdy pouzity nevidel.
Mnohé komponenty majú Default hodnotu = True. Bavím sa hlavne o TMS, lebo pri štandardných neviem ako to je. Viacero diskutujúcich tu to používa.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #56 kdy: 05-07-2019, 20:31:24 »
Poslednému príspevku akosi nerozumiem. Najprv skratky podľa google
  • DWM - Dynamic Window Manager. Všade mi vyskočilo, že to je program :)
  • FYI - For You Information. V tomto kontexte mi to nedáva zmysel
Ak to dobre chápem, tak by som mal nastavovať ParentDoubleBuffered a nie DoubleBuffered. Vlastne to tam píšeš. Len môj príspevok pod tým je zlý.
Edit:
Už sa stalo.
« Poslední změna: 05-07-2019, 20:33:20 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Zmena veľkosti formulára - veľké oneskorenie
« Odpověď #57 kdy: 05-07-2019, 20:39:13 »
Je pri tom nutné nastaviť DoubleBuffered := False?
Edit:
  Už viem. Netreba. ParentDoubleBuffered to prepíše.
« Poslední změna: 05-07-2019, 20:44:00 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.