AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi wie temoräres Canvas erstellen und nutzen?
Thema durchsuchen
Ansicht
Themen-Optionen

wie temoräres Canvas erstellen und nutzen?

Ein Thema von himitsu · begonnen am 4. Feb 2009 · letzter Beitrag vom 4. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

wie temoräres Canvas erstellen und nutzen?

  Alt 4. Feb 2009, 16:46
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 von EInvalidOperation:
Leinwand/Bild erlaubt kein Zeichnen
das wäre mir ja egal, da ich doch eh nicht zeichnen wollte ... nur auslesen.

z.B.
Delphi-Quellcode:
Canvas := TCanvas.Create;
Try
  ...
  GetTextExtentPoint32W(Canvas.Handle,
  ...
Finally
  Canvas.Free;
End;
Aber anscheinend macht da das Handle, bzw. csAllValid nicht mit:
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.

$2B or not $2B
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#2

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 16:55
Hmm, ist TControlCanvas eine Alternative?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 16:55
Oder eine temporäre Bitmap?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 16:58
Oder dem Canvas ein temp. HDC zuweisen... ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#5

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 17:19
Delphi-Quellcode:
var Canvas:TCanvas;
begin
   Canvas:=TCanvas.Create;
   Canvas.Handle:=GetDC(GetDesktopWindow);
...
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 18:44
Hi himitsu,

müsstest Du jetzt nicht etwas werden, bist doch auch schon länger dabei

Harter Typcast auf eine eigene TCanvas-Klasse und RequiredState überschreiben.

Beispiel (von TntUnicode):
Delphi-Quellcode:
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;
Gruß Assertor

Edits: Tippfehler...
Frederik
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#7

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 18:57
Oh, oh, das ist wieder einmal so ein Moment, wo sich die Spreu vom Weizen trennt
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 19:00
Macht nichts, Ralph, nobody' s perfect (ich schon lange nicht)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#9

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 19:17
Danke, Detlef, das hast du lieb gesagt!
Arbeiten wir also weiter an unserer Fortbildung!
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: wie temoräres Canvas erstrllen und nutzen?

  Alt 4. Feb 2009, 19:18
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)
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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