Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Größe der Canvas ermitteln? (https://www.delphipraxis.net/18336-groesse-der-canvas-ermitteln.html)

SirThornberry 16. Mär 2004 22:06


Größe der Canvas ermitteln?
 
Wie kann ich die größe einer Canvas ermitteln?? Wenn ich zum Beispiel eine funktion hab die nur das Handel von der Canvas übergeben bekommt wie kann ich dann die größe davon rausfinden. Bisher habe ichs das so gemacht
Delphi-Quellcode:
procedure dosomething(CanvasHandle: Cardinal);
var LCanvas: TCanvas;
begin
  LCanvas := TCanvas.Create;
  LCanvas.Handle := CanvasHandle;
  //und jetzt mit LCanvas.ClipRect die größe ermittelt
  LCanvas.Free;
end;
Allerdings musste ich heute feststellen das diese Methode nicht funktioniert. Ein Blick in die OH hat mir dann verraten das mit ClipRect den bereich der Canvas zurückgibt der neu gezeichnet werden muss. Wenn jetzt also meine funktion innerhalb eines WM_PAINT aufgerufen wird, so kann ich nicht mehr über ClipRect die größe rausfinden, da manchmal nur ein stück der Canvas neu gepaintet werden muss... Hoffe ihr habts verstanden, wenn ni einfach posten welchen teil ich nochmal besser erklären muss..

neolithos 16. Mär 2004 22:21

Re: Größe der Canvas ermitteln?
 
schau mal in der MSDN nach GetBoundsRect

sonst könnte man nach über das Bitmap, welches Hinter dem DC hängt versuchen an die Größe heranzukommen.

SirThornberry 16. Mär 2004 22:33

Re: Größe der Canvas ermitteln?
 
ich schau mal nach GetBoundsRect. Über das Bitmap kann ich nicht rankommen da ich bei WM_Paint kein Bitmap mitbekomme sondern nur das Handle der Canvas. Außerdem sollen meine Funktionen nicht von irgend einem Object abhängig sein sondern halt für jede canvas zu verwenden sein. So das man auch die Canvas von anderen Programmen angeben kann

himitsu 16. Mär 2004 22:47

Re: Größe der Canvas ermitteln?
 
Delphi-Quellcode:
Width := Canvas.ClipRect.Right - Canvas.ClipRect.Left;
Height := Canvas.ClipRect.Bottom - Canvas.ClipRect.Top;

// da aber LEFT und TOP 0 sind, reicht es auch so:

Width := Canvas.ClipRect.Right;
Height := Canvas.ClipRect.Bottom;

neolithos 16. Mär 2004 22:49

Re: Größe der Canvas ermitteln?
 
Zu dem Bitmap:

Meiner bescheiden Meinung nach liegt hinter jeden Canvas ein Bitmap. Und wenn man an dieses heran kommt, könnte man von diesem die Größe verwenden. Denn mehr kann der Canvas eh nicht verarbeiten.

Via GetObject kann man eve. das Bitmap holen.

Ob das exakt stimmt weiß ich aber auch nicht so genau.

SirThornberry 16. Mär 2004 22:51

Re: Größe der Canvas ermitteln?
 
@himitsu: Das klappt eben nicht immer. Angenommen ich habe ein Bild 100x100 Pixel und ich verschiebe ein anderes fenster so das es kurzzeitig die rechte untere ecke von meinem Bild verdeckt so bekomme ich in der Paintmethode beispielsweise folgende Werte: Rect(75, 80, 100, 100) oder so, auf jeden fall nicht die richtige größe da in dem fall nur der untere bereich neu gezeichnet werden muss. Hab meine Componenten bisher leider fast alle mit verwendung von Cliprect geschrieben weil ich das bis zum heutigen zeitpunkt auch nicht wusste das cliprect nur den bereich enthält der neu gezeichnet werden muss.

Robert Marquardt 17. Mär 2004 05:35

Re: Größe der Canvas ermitteln?
 
Ein Canvas hat keine Groesse.
Man kann malen wohin man will. Das zugeordnete Fenster hingegen hat eine Groesse.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 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