Forum Delphi.cz

Delphi => Obecné => Téma založeno: Vejrous 15-02-2019, 14:00:18

Název: Reakce na změnu velikosti subkomponenty
Přispěvatel: Vejrous 15-02-2019, 14:00:18
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.
Název: Re:Reakce na změnu velikosti subkomponenty
Přispěvatel: Stanislav Hruška 15-02-2019, 14:21:46
Komponenty, ktoré ako, zvyknú mať udalosť OnResize.
Název: Re:Reakce na změnu velikosti subkomponenty
Přispěvatel: Stanislav Hruška 15-02-2019, 14:24:05
Ešte sa skús pozrieť na TFlowPanel či TGridPanel.
Název: Re:Reakce na změnu velikosti subkomponenty
Přispěvatel: Stanislav Hruška 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.
Název: Re:Reakce na změnu velikosti subkomponenty
Přispěvatel: Vejrous 15-02-2019, 21:00:12
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.
Název: Re:Reakce na změnu velikosti subkomponenty
Přispěvatel: Stanislav Hruška 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 :-[