Einzelnen Beitrag anzeigen

Breezen

Registriert seit: 7. Jul 2004
4 Beiträge
 
Delphi 7 Enterprise
 
#1

ExcludeClipRect funzt nicht wie es soll...

  Alt 7. Jul 2004, 15:27
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
  Mit Zitat antworten Zitat