Registriert seit: 26. Nov 2007
54 Beiträge
|
hDC überzeichnet zu unbestimmten zeiten alles
17. Mai 2010, 04:14
Hi ich habe ein inzwischen etwas größeres projekt in dem ich alle objekte per hand zeichne was auch wunderbar funktioniert bis irgendwann zu einem zufälligen zeitpunkt der komplette berreich mit einer meiner verwendeten farben gefüllt wird.
aber da dies spontan passiert weiß ich auch nicht wo ich ansetzen sollte mit der fehlerssuche ?
Hier mal ein auszug aus einer der zeichenroutinen...
Delphi-Quellcode:
rocedure TOrganismus.Koerper;
Var Winkel, SichtX, SichtY, SichtRichtungI, Prozent: Integer;
p: Extended;
R, G: Byte;
begin
//Kreis
Winkel:=1;
APenWidth:=2;
hPen := CreatePen (APenStyle, APenWidth, APenColor);
SelectObject(A_DC,hPen);
MoveToEx(A_DC, AStartX+Round(cos(Pi*Winkel/180)*AGroesse), AStartY+Round(sin(Pi*Winkel/180)*AGroesse) ,NIL );
for Winkel := 1 to 360 do
begin
LineTo(A_DC, AStartX+Round(cos(Pi*Winkel/180)*AGroesse), AStartY+Round(sin(Pi*Winkel/180)*AGroesse) );
end;
hBrush:= CreateSolidBrush(ABrushColor);
SelectObject(A_DC,hBrush);
ExtFloodFill(A_DC, AStartX,AStartY,APenColor,FLOODFILLBORDER);
//RichtungsLinie
APenWidth:=3;
hPen := CreatePen (APenStyle, APenWidth, clBlack);
SelectObject(A_DC,hPen);
MoveToEx(A_DC, AStartX, AStartY, NIL);
LineTo(A_DC, AStartX+Round(cos(Pi*ASichtRichtung/180)*AGroesse), AStartY+Round(sin(Pi*ASichtrichtung/180)*AGroesse) );
//Sichtfeld
APenWidth:=1;
SetBkMode(A_DC, TRANSPARENT);
APenStyle:=PS_DOT;
hPen := CreatePen(APenStyle, APenWidth, clBlack);
SelectObject(A_DC,hPen);
SichtX:=AStartX+Round(cos(Pi*ASichtRichtung/180)*AGroesse);
SichtY:=AStartY+Round(sin(Pi*ASichtRichtung/180)*AGroesse);
MoveToEx(A_DC, AStartX+Round(cos(Pi*ASichtRichtung/180)*AGroesse), AStartY+Round(sin(Pi*ASichtrichtung/180)*AGroesse), NIL );
for SichtRichtungI := (ASichtRichtung-(ASichtWinkel div 2)) to (ASichtRichtung+(ASichtWinkel div 2)) do
begin
LineTo(A_DC, SichtX+Round(cos(Pi*SichtRichtungI/180)*ASichtWeite), SichtY+Round(sin(Pi*SichtRichtungI/180)*ASichtWeite) );
end;
LineTo(A_DC, AStartX+Round(cos(Pi*ASichtRichtung/180)*AGroesse), AStartY+Round(sin(Pi*ASichtrichtung/180)*AGroesse) );
|