TGraphicControl, WM_SIZE, TPaintbox

TGraphicControl, WM_SIZE, TPaintbox
SZ
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 6 lat
  • Postów:107
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 :)

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

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

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

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

SZ
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 6 lat
  • Postów:107
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.

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0
Kopiuj
protected
  procedure Resize; override;

albo

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

btw w TControl już jest

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

i tam jakoś działa :>


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
SZ
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 6 lat
  • Postów:107
0

Dziękuję użytkownikowi cimak oraz Misiekd

Kopiuj
protected
    procedure Resize; override;

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

Pozdrawiam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.