TGraphicControl, WM_SIZE, TPaintbox

0

Witam :)

Stworzyłem sobie osobną klasę dziedziczącą po TPaintbox. Tworzę za pomocą tej klasy dynamiczne Paintboxy na formie z Align ustawionym na Altop. Potrzebuję wykonać pewną czynność, opierając się na dynamicznie stworzonych Paintboxach, przy rozciąganiu okna. Pomyślałem zaraz o zdarzeniu OnResize formy głównej, ale to zdarzenie odpada, ponieważ bym musiał wykonywać czasem bardzo długie pętle wykonujące jakieś czynności na dynamicznych Paintboxach, więc wolałbym tego uniknąć. Zaraz przyszedł mi do głowy pomysł, by obsłużyć komunikat występujący przy rozciąganiu Paintboxa. Mógłbym wtedy wykonywać jakieś czynności na danym paintboxie, bez zbędnych pętli. Znalazłem w internecie komunikat WM_SIZE, ale niestety, ze Paintbox dziedziczy po TGraphicControl komunikat ten, się nie wykonuje.

Proszę o pomoc i wskazówki, jak rozwiązać ten problem. W skrócie chodzi mi o to, by wykonać jakąś czynność przy rozciąganiu Paintboxa z Align na Altop bez konieczności korzystania ze zdarzenia OnResize formy (Wychwycić komunikat wysyłany do Paintboxa).

Pozdrawiam :)

0

a nie mozesz podczepic zdazenia pod zmiane wartosci Width?
cos w stylu:

private
  procedure SetWidth(val:integer);
  {..}
published
  {..}
  property Width: Integer read Width write SetWidth;
end;

i potem w SetWidth malujesz i robisz co chcesz...

0

Ten pomysł byłby nawet dobry, zdarzenie się wykonuje, lecz tylko gdy samemu ustawię Width Paintboxa. Gdy Paintbox jest ustawiony na Altop, własność Width zmienia program samoistnie, więc zdarzenie się nie wykona :/

Głównie chciałbym zmieniać wartość Height Paintboxa ze względu na wartość Width. (Piszę zawijanie tekstu na Canvasie Paintboxa i dlatego jest mi to potrzebne).

Dziękuję za zainteresowanie się tematem. Możliwe, że Twój pomysł jest dobry, tylko ja coś źle go interpretuję. Pozdrawiam i proszę o dalsze wskazówki.

0
protected
  procedure Resize; override;

albo

public
  procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;

btw w TControl już jest

    procedure WMSize(var Message: TWMSize); message WM_SIZE;

i tam jakoś działa :>

0

Dziękuję użytkownikowi cimak oraz Misiekd

protected
    procedure Resize; override;

To jest właśnie to o co mi chodziło :)

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1