przerysowanie (InvalidateRect)

0

Jak najproścciej przerysować ( po przysłonieniu przez inne okno) narysowany rysunek na canvasie.
Wyczytalem ze mozna to zrobic przez
<font color="blue">InvalidateRect (wnd: hwnd ; Rect: Prect ; Erase:Bool)</span>

Ale mam problemy z tymi parametrami , zwłaszcza drugim, gdy mam:
<font color="darkblue">InvalidateRect (handle, null , true)</span>
to wyskakują błędy .

Jak przerysować cały canvas?

0

Zamiast null daj nil. Jeżeli to jest pochodna klasy TControl to wywołaj po prostu Invalidate (np. Form1.Invalidate)
Ale czuję, że Invalidate nie jest rozwiązaniem twojego problemu.

0

Rzeczywiście nic to nie dało. :(

To ja już nie wiem jak to przerysować. Narysowałem coś takiego :

procedure TForm1.Button1Click(Sender: TObject);
var
pkt : array[1..6] of TPoint;
begin
pkt[1] := Point(40, 100);
pkt[2] := Point(20, 60);
pkt[3] := Point(70, 30);
pkt[4] := Point(10, 30);
pkt[5] := Point(60, 60);
pkt[6] := Point(40, 10);
Polyline(listBox1.Canvas.Handle, pkt, 6);
end;

Może ktoś wie jak to przerysować po przykryciu przez inne okno ?

Najchętniej to <ort>podpiołbym </ort>Button1Click(nil); pod jakieś zdarzenie które zachodzi w momencie gdy form1 pojawia się na wierzchu.
Tylko jakie to jest zdarzenie (jaka procedura) ?
<font color="red">onActivate</span> nie pomaga - nie wiem czemu .

0

Wrzuć to do OnPaint :)

0

Wrzuć to do OnPaint :)

Też próbowałem, ale w tym przypadku dzieje się coś dziwnego.
Przy pojawieniu się form1 na wierzchu rysunek ukazuje się na ułamek sekundy i znika, tak jakby wymagał jeszcze jedengo przerysowania.

0

Daj ten fragment:

var
  pkt : array[1..6] of TPoint;
begin
  pkt[1] := Point(40, 100);
  pkt[2] := Point(20, 60);
  pkt[3] := Point(70, 30);
  pkt[4] := Point(10, 30);
  pkt[5] := Point(60, 60);
  pkt[6] := Point(40, 10);
  Polyline(listBox1.Canvas.Handle, pkt, 6);
end;

do onPaint...

0

Bez zmian.
To wyglada tak jakby te procedury były wykonywane wcześniej niż forma na dobre wyjdzie na wierzch.

0

Chcesz na ListBox rysować i dlatego. On jest odmalowywany już po formie. Ponieważ ListBox nie ma OnPaint (a raczej ma, ale nie udostępnione ;) ) to wykorzystaj OnDrawItem. Z tym, że chociaż jeden element na liście musi być, aby została wywołana ta funkcja.

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