Hallo zusammen
Ich habe folgenden Code:
Delphi-Quellcode:
var
I : Integer;
DC : HDC;
Save: Integer;
//Clip: Integer;
//Canvas: TCanvas;
begin
if (DrawExtensions.Count = 0)
then Exit;
DC := Self.Canvas.Handle;
Save := SaveDC(
DC);
try
for I := 0
to ControlCount-1
do
with Controls[I].BoundsRect
do begin
ExcludeClipRect(
DC, Left, Top, Right, Bottom);
end;
//Canvas := TCanvas.Create;
//Canvas.Handle := DC;
Canvas.Brush.Style := bsSolid;
Canvas.Pen.Style := psSolid;
Canvas.Pen.Mode := pmCopy;
Canvas.Pen.Width := 1;
Canvas.Brush.Color := Color;
Canvas.Pen.Color := Color;
Canvas.Rectangle(ClientRect);
Canvas.Pen.Color := clBlack;
for I := 0
to DrawExtensions.Count-1
do
if (ExactMatch
and (DrawExtensions[I].ClassType = ExtensionClass))
or (
NOT ExactMatch
and DrawExtensions[I].InheritsFrom(ExtensionClass))
then
DrawExtensions[I].Paint(Canvas, ClientRect);
//if (csCustomPaint in ControlState) then
//PaintControls(Canvas.Handle, NIL);
//Canvas.Free;
finally
RestoreDC(
DC, Save);
end;
Die Zeile
DrawExtensions[I].Paint(Canvas, ClientRect);
ruft den Handler einer Erweiterungs-Klasse auf, welche dann auf das übergebene Canvas einige Verbindungs-Linien mit Canvas.MoveTo und Canvas.LineTo zeichnet.
Wie aus obigem Code zu ersehen ist, werden auf dem Canvas alle Controls geclipped, die Zeile Canvas.Rectangle verhält sich auch wie erwartet, es werden keine Controls "übermalt".
Allerdings funktioniert das Ganze dann bei den Linien nicht mehr so richtig...
Manchmal, wenn nur einige SubControls vorhanden sind, funktionierts, und wenn einige mehr vorhanden sind, gibt es plötzlich einige Linien, welche über die Controls drüber gezeichnet werden...
Was aber ja nicht sein sollte...
Kann mir da jemand helfen?
Greetz Breezen