AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TCanvas für TextWidth in Komponente verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

TCanvas für TextWidth in Komponente verwenden

Ein Thema von Helmi · begonnen am 12. Jun 2007 · letzter Beitrag vom 12. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 13:34
Hallo,

ich muss die Breite eines Textes in einem Panel wissen.
Das ganze passiert in einer Komponente.

Meine erste Version war so:
Delphi-Quellcode:
var
  Text_Width: Integer;

begin
  Text_Width := Application.MainForm.Canvas.TextWidth(S); //In "S" ist der String
end;
Da ich aber die Unit "Forms" in meiner Komponente nicht brauch und will, dacht ich mir, ich könnte ja ein Canvas erzeugen:
Delphi-Quellcode:
var
  Canvas : TCanvas;

begin
  //Canvas ereugen
  Canvas := TCanvas.Create;

  try
    Text_Width := Canvas.TextWidth(S);
  finally
    FreeAndNil(Canvas);
  end;
end;
Wenn ich aber nun diesen Code ausführe, erhalte ich die Fehlermeldung:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInvalidOperation aufgetreten. Meldung: 'Leinwand/Bild erlaubt kein Zeichnen'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Also muss ich irgendwas falsch machen mit dem Canvas. Kann mir da jemand helfen?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#2

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 13:41
Ach,

ich könnt mich in den Arsch beissen

Wenn alles so simple wär:

Delphi-Quellcode:
var
  Canvas : TCanvas;

begin
  //Canvas ereugen
  Canvas := TCanvas.Create;

  try
    Canvas.Handle := FPanel.Handle; //Das hat gefehlt!! //FPanel ist das Panel

    Text_Width := Canvas.TextWidth(S);
  finally
    FreeAndNil(Canvas);
  end;
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 13:47
Übrigens, wenn Du von TCustomPanel ableitest, ist Dein Panel ein TCustomControl, hat also bereits einen (wenn auch versteckten) Canvas.
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 Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 13:54
Wie wäre es mit:
Text_Width := FPanel.Canvas.TextWidth(S) Wieso noch ein Extra Canvas erzeugen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 13:58
Zitat von Bernhard Geyer:
Wieso noch ein Extra Canvas erzeugen?
Deswegen:
Zitat:
[Fehler] MaskPanelEdit.pas(148): Undefinierter Bezeichner: 'Canvas'
[Edit]
sooo: Nach etwas rumbasteln, hab ich jetzt die Textbreite abhängig von der Schrift:
Delphi-Quellcode:
  //Canvas ereugen
  Canvas := TCanvas.Create;

  try
    //Handle zuweisen
    Canvas.Handle := GetWindowDC(FPanel.Handle);

    Canvas.Font := FPanel.Font;

    Text_Width := Canvas.TextWidth(FPanel.Caption);
  finally
    FreeAndNil(Canvas);
  end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 14:03
Falsch gelesen
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 14:10
Vorher den Font Canvas.Font zuweisen, sonst rechnet GetTextWidth falsch.
Das TPanel hat bereits wie erwaehnt einen Canvas. Er ist aber protected und daher nicht direkt zugreifbar. In einer TPanel-Ableitung Canvas einfach public machen.
Die implementierte Version ist zwar nicht falsch, aber heftig ineffizient.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#8

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 14:14
Zitat von Robert Marquardt:
Vorher den Font Canvas.Font zuweisen, sonst rechnet GetTextWidth falsch.
Mach ich doch...
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#9

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 15:47
Zitat von Robert Marquardt:
Das TPanel hat bereits wie erwaehnt einen Canvas. Er ist aber protected und daher nicht direkt zugreifbar. In einer TPanel-Ableitung Canvas einfach public machen.
Wie macht man das public? *dummfrag*
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TCanvas für TextWidth in Komponente verwenden

  Alt 12. Jun 2007, 15:48
Delphi-Quellcode:
TMyPanel = class(TPanel)
   ...
  public
    property Canvas;
end;
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
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 09:11 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