Rysowanie przekątnej [Borland C++/Delphi]

0

mam taki oto kod w zdarzeniu OnPaint:

  Canvas->Pen->Style   = psSolid;
  Canvas->Pen->Color   = clBlack;
  Canvas->Brush->Style = bsSolid;
  Canvas->Brush->Color = clBlack;

  TRect rect;
  rect.left=0;
  rect.top=0;
  rect.right=Form1->ClientWidth;
  rect.Bottom=Form1->ClientHeight;

  Canvas->Rectangle(rect);

  Canvas->Pen->Color   = clWhite;

  Canvas->MoveTo(0,0);
  Canvas->LineTo(Form1->ClientWidth,Form1->ClientHeight);

oczekuję że na formie zawsze będzie rysowana przekątna. włączam program i sobie myślę: jaka ładna przekątna :P jednak ku mojemu zaskoczeniu przy rozciąganiu formy dzieje się coś takiego:
http://img24.imageshack.us/img24/4503/abcxiv.png

proszę o pomoc, bo mnie troszkę zaczyna denerwować ta anomalia.. pzdr ;)

ps. kod ciut różni się od oryginału to by można było łatwiej wkleić przy świeżo otwartym borlandzie

EDIT: wiem już jak to poprawić. dodałem w zdarzeniu OnResize wywoływanie funkji malowania okna. jednak nadal nie rozumiem dlaczego tak się działo. Czy system przy zmienianiu rozmiaru okna nie wysyla WM_PAINT?

0

Dodaj do onresize Repaint();

0

dobra, rozciąganie okna działa poprawnie (choć nie wiem czemu wcześniej nie działało).. ale teraz lepszy numer...

kod wygląda teraz tak (C=Canvas):

  C->Pen->Style   = psSolid;
  C->Pen->Color   = clBlack;
  C->Brush->Style = bsSolid;
  C->Brush->Color = clBlack;

  C->Rectangle(C->ClipRect);

  C->Pen->Color   = clWhite;

  C->MoveTo(0,0);
  C->LineTo(C->ClipRect.Width(),C->ClipRect.Height());

przy maksymalizowaniu okna robi się takie coś:

http://img22.imageshack.us/img22/6273/abcljr.png

0

Mi się wydaje że to co zostało już narysowane nie jest przerysowywane, przy dorysowywaniu linii na canvasie.

0

a jak sprawdzić czy okno właśnie zostało zmaksymalizowane? :P tymczasowo problem rozwiązałem blokując przycisk maksymalizacji, ale wole zwalczać przyczyny niż skutki.. :)

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