![]() |
wie temoräres Canvas erstellen und nutzen?
Eigentlich wollte ich mir bei der internen Initialisierung 'ner Komponente
nur kurz ein Canvas erstellen, um darüber die Größe bestimmter Texte/Buchstaben abhängig eine bestimmten Fonts ermitteln. nur leider geht das nicht so, wie ich wollte. Zitat:
z.B.
Delphi-Quellcode:
Aber anscheinend macht da das Handle, bzw. csAllValid nicht mit:
Canvas := TCanvas.Create;
Try ... GetTextExtentPoint32W(Canvas.Handle, ... Finally Canvas.Free; End;
Delphi-Quellcode:
function TCanvas.GetHandle: HDC;
begin Changing; RequiredState(csAllValid); Result := FHandle; end; wie komm ich nun am Einfachsten ein nettes Handle ran, wo ich in Ruhe auslesen kann? Das Canvas, wo später alles ausgegeben werden soll, ist zu diesem Zeitpunkt noch nicht Verfügbar. :angel: |
Re: wie temoräres Canvas erstrllen und nutzen?
Hmm, ist TControlCanvas eine Alternative?
|
Re: wie temoräres Canvas erstrllen und nutzen?
Oder eine temporäre Bitmap?
|
Re: wie temoräres Canvas erstrllen und nutzen?
Oder dem Canvas ein temp. HDC zuweisen... ? :gruebel:
|
Re: wie temoräres Canvas erstrllen und nutzen?
Delphi-Quellcode:
var Canvas:TCanvas;
begin Canvas:=TCanvas.Create; Canvas.Handle:=GetDC(GetDesktopWindow); ... |
Re: wie temoräres Canvas erstrllen und nutzen?
Hi himitsu,
müsstest Du jetzt nicht etwas :oops: werden, bist doch auch schon länger dabei :mrgreen: Harter Typcast auf eine eigene TCanvas-Klasse und RequiredState überschreiben. Beispiel (von TntUnicode):
Delphi-Quellcode:
Gruß Assertor
type
TAccessCanvas = class(TCanvas); function WideDCTextExtent(hDC: THandle; const Text: UnicodeString): TSize; begin Result.cx := 0; Result.cy := 0; Windows.GetTextExtentPoint32W(hDC, PWideChar(Text), Length(Text), Result); end; function WideCanvasTextExtent(Canvas: TCanvas; const Text: UnicodeString): TSize; begin with TAccessCanvas(Canvas) do begin RequiredState([csHandleValid, csFontValid]); Result := WideDCTextExtent(Handle, Text); end; end; Edits: Tippfehler... |
Re: wie temoräres Canvas erstrllen und nutzen?
Oh, oh, das ist wieder einmal so ein Moment, wo sich die Spreu vom Weizen trennt :(
|
Re: wie temoräres Canvas erstrllen und nutzen?
Macht nichts, Ralph, nobody' s perfect (ich schon lange nicht) :zwinker:
|
Re: wie temoräres Canvas erstrllen und nutzen?
Danke, Detlef, das hast du lieb gesagt!
Arbeiten wir also weiter an unserer Fortbildung! :cheers: |
Re: wie temoräres Canvas erstrllen und nutzen?
Kennt ihr diesen Satz mit dem Wald und den Bäumen?
So, ich probier es gleich mal direkt mit GetDC(GetDesktopWindow) und ohne eine Canvas dazwischen. Kann ich auf den Desktop eigentlich immer zugreifen? (nicht daß ich unter Vista/Win7 mal Probleme bekomm) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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 by Thomas Breitkreuz