Autor Téma: Reakce na změnu velikosti subkomponenty  (Přečteno 575 krát)

Offline Vejrous

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 2
Reakce na změnu velikosti subkomponenty
« kdy: 15-02-2019, 14:00:18 »
Excellent
Rated 1 time
Dobrý den,
tvořím si jednoduchý systém, který automaticky urovnává komponenty na formuláři, neboť formulář je tvořen za běhu, nikoliv pomocí IDE.

Form -> (LayoutTable -> LayoutRow -> LayoutCell -> Komponenta)

Použití je podobné jako u HTML tabulky:
LayoutTable := TLayoutTable.Create
  LayoutTable.AddRow;
    LayoutTable.AddCell;
      LayoutTable.AddComponent();
    LayoutTable.AddCell;
      LayoutTable.AddComponent();
  LayoutTable.AddRow;
  ....
  ....

Vlastník komponenty (Owner)=Form
Parent komponenty = LayoutTable

Pokud se zvětší rozměr některé komponenty, potřebuji to odchytit a vše překreslit.
Netuší někdo jakým způsobem dávají komponenty vědět Parent-ovi, že je třeba změnit rozměry?
Shodně funguje např. TPanel, když Autosize=True;

Za nasměrování/radu mockrát děkuji.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Reakce na změnu velikosti subkomponenty
« Odpověď #1 kdy: 15-02-2019, 14:21:46 »
Komponenty, ktoré ako, zvyknú mať udalosť OnResize.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Reakce na změnu velikosti subkomponenty
« Odpověď #2 kdy: 15-02-2019, 14:24:05 »
Ešte sa skús pozrieť na TFlowPanel či TGridPanel.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Reakce na změnu velikosti subkomponenty
« Odpověď #3 kdy: 15-02-2019, 15:05:18 »
Citace
Metodou AlignControls.
Hm, to asi nebude ono. On mení veľkosť komponentu a tomu sa má prispôsbiť Parent. Align funguje opačne. Zmení sa veľkosť Parent-u a tomu sa prispôsobí komponent.
Ale je možné, že zle chápem otázku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Vejrous

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 2
Re:Reakce na změnu velikosti subkomponenty
« Odpověď #4 kdy: 15-02-2019, 21:00:12 »
Excellent
Rated 1 time
Dobrý den,
děkuji za radu, opravu se jedná o AlignControls.
Přehled volání:
Kód: Delphi [Vybrat]
  1. Heigth -> SetHeigth -> TControl.SetBounds -> InvalidateControl -> TControl.RequestAlign --> skok na parent Parent - TWinControl.AlignControl(AControl: TControl) -> TWinControl.AlignControls(AControl: TControl; var Rect: TRect)
  2.  

K druhé části - překreslení probíhá automaticky, nepřesně jsem se vyjářil. Jde o přepočtení pozic.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Reakce na změnu velikosti subkomponenty
« Odpověď #5 kdy: 15-02-2019, 21:16:57 »

OT:
Citace
Dotaz chapeme stejne. Se zmenou velikosti nebo pozice potomka se notifikuje jeho rodic pomoci AlignControls.
Sľubujem, že odkazy už budem čitať dôsledne. Nie len jedný okom. Ja som si to zamenil s vlastnosťou Align :-[
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.