![]() |
ExcludeClipRect funzt nicht wie es soll...
Hallo zusammen
Ich habe folgenden Code:
Delphi-Quellcode:
Die Zeile
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;
Delphi-Quellcode:
ruft den Handler einer Erweiterungs-Klasse auf, welche dann auf das übergebene Canvas einige Verbindungs-Linien mit Canvas.MoveTo und Canvas.LineTo zeichnet.
DrawExtensions[I].Paint(Canvas, ClientRect);
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 |
Re: ExcludeClipRect funzt nicht wie es soll...
Also ich habs nur mal kurz überflogen, klappt
Delphi-Quellcode:
vielleicht?
ExcludeClipRect(DC, Left, Top, Left + Right, Top + Bottom);
|
Re: ExcludeClipRect funzt nicht wie es soll...
Hi
Ne, leider nicht. Left, Top, Right und Bottom vom BoundsRect sind bereits die richtigen Koordinaten. Aber trotzdem danke für die Antwort! Gruss Breezen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz