Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ExcludeClipRect funzt nicht wie es soll... (https://www.delphipraxis.net/25494-excludecliprect-funzt-nicht-wie-es-soll.html)

Breezen 7. Jul 2004 15:27


ExcludeClipRect funzt nicht wie es soll...
 
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
Delphi-Quellcode:
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

Vjay 7. Jul 2004 22:34

Re: ExcludeClipRect funzt nicht wie es soll...
 
Also ich habs nur mal kurz überflogen, klappt
Delphi-Quellcode:
ExcludeClipRect(DC, Left, Top, Left + Right, Top + Bottom);
vielleicht?

Breezen 8. Jul 2004 08:21

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 12:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz