Autor Téma: FormPaint - kedy sa vlastne volá  (Přečteno 140 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4180
  • Karma: 37
    • Verze Delphi: XE7 professional
FormPaint - kedy sa vlastne volá
« kdy: 13-04-2019, 23:17:21 »
Mal som problém s prvotným vykreslením Vst.SetFocus. Tak so to hodil do metódy Form.FromPaint. Podľa návodu sa má volať pri každej požiadavke na prekreslenie akéhkoľvek komponentu na fromulári.
Ovšem pri prepínaní záložiek PageControl sa očividne nevolá. Čo ma veľmi teší, ale nezhoduje sa to s návodom.
Ako to vlastne je? Niečo som zle pochopil?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4180
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:FormPaint - kedy sa vlastne volá
« Odpověď #1 kdy: 13-04-2019, 23:23:02 »
Hm, jedná so TMS komponent. Už tu bolo napísané, že používajú vlastné vykresľovanie. Možno to je spôsobené tým. Ale to si môžem akurát tak len domýšľať.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1744
  • Karma: 67
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:FormPaint - kedy sa vlastne volá
« Odpověď #2 kdy: 13-04-2019, 23:38:04 »
Dotazu nerozumim. Kresleni ve Windows funguje tak ze si bud klient nebo operacni system vyzada vykresleni komponenty (pripadne jen urcite jeji casti). Komponenta pak reaguje tim ze po prijmu zpravy o tomto pozadavku (WM_PAINT) vykresli sama sebe. No a jeden takovy pozadavek na prekresleni by IMHO melo vyvolat bud Delphi (nemam ted po ruce Delphi) nebo sam operacni system v pripade zmeny focus komponenty (cimz by nasledne melo dojit k prekresleni komponenty ztracejici i ziskavajici focus). Jinymi slovy, nevidim problem.

Mozna bude treba MCVE s uvedenim verzi Delphi a TMS.
« Poslední změna: 13-04-2019, 23:43:27 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ů: 4180
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:FormPaint - kedy sa vlastne volá
« Odpověď #3 kdy: 13-04-2019, 23:48:22 »
Citace
v pripade zmeny focus komponenty (cimz by nasledne melo dojit k prekresleni komponenty ztracejici i ziskavajici focus).
Ale ja som v tom, a návod, ako som ho porozumel ma v tom utvrdzuje, že by sa mala volať udalosť Form.FormPaint. Ale to sa nedeje. To je celé.
Osobne mi to mentálne veľmi vyhovuje, lebo sa šetria systémové prostriedky. Aj keď v dnešnej dobe to je vlastne už o ničom.
Dodatok:

Aha, Ty píšeš o dotknutom komponente. Tak to potom vysvetľuje nevyvolanie FormPaint.
« Poslední změna: 13-04-2019, 23:50:05 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1744
  • Karma: 67
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:FormPaint - kedy sa vlastne volá
« Odpověď #4 kdy: 14-04-2019, 00:06:53 »
Citace
v pripade zmeny focus komponenty (cimz by nasledne melo dojit k prekresleni komponenty ztracejici i ziskavajici focus).
Ale ja som v tom, a návod, ako som ho porozumel ma v tom utvrdzuje, že by sa mala volať udalosť Form.FormPaint. Ale to sa nedeje. To je celé.
Osobne mi to mentálne veľmi vyhovuje, lebo sa šetria systémové prostriedky.

Komponenty se maji kreslit na zaklade pozadavku od systemu (zpravou WM_PAINT, pripadne nucene v Delphi; nekde jsem popisoval rozdil mezi Invalidate a Repaint).

Aha, Ty píšeš o dotknutom komponente. Tak to potom vysvetľuje nevyvolanie FormPaint.

Ja jen popsal mechanismus kresleni (VCL). Nemam tuseni co je ten zminovany FormPaint. Pokud jde o metodu vazanou na udalost formulare OnPaint, pak by mela byt IMHO volana jen pri prekresleni celeho formu (ne se zmenou focus jeho komponent). Ale nemam ted po ruce Delphi (logicky bych vsak cekal ze se udalost OnPaint se zmenou focus komponent nevyvola).
« Poslední změna: 14-04-2019, 00:12:41 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 Delfin

  • Padawan
  • ******
  • Příspěvků: 1744
  • Karma: 67
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:FormPaint - kedy sa vlastne volá
« Odpověď #5 kdy: 14-04-2019, 01:15:04 »
Nemam tuseni co je ten zminovany FormPaint. Pokud jde o metodu vazanou na udalost formulare OnPaint, pak by mela byt IMHO volana jen pri prekresleni celeho formu (ne se zmenou focus jeho komponent). Ale nemam ted po ruce Delphi (logicky bych vsak cekal ze se udalost OnPaint se zmenou focus komponent nevyvola).

Ostatne zda se OnPaint formulare vola se zmenou focus komponent se da snadno overit snadno na cistem projektu. I s naslednym pridanim dane TMS komponenty...
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!