AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Panelwidth an Caption anpassen ?

Ein Thema von Hansa · begonnen am 22. Jul 2009 · letzter Beitrag vom 22. Jul 2009
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 00:13
Moin,

ich brauche ein paar Ideen. Es geht darum, die Breite eines Panels in Abhängigkeit von der Caption darzustellen. D.h. je länger die Caption, desto größer die Breite. Rechts und links von der Caption soll noch ein Rand hinzugefügt werden und der soll unabhängig von der Caption gleich groß sein. Egal, bei welcher Schrift. So was wie hier : Font*length (Caption) scheidet also direkt aus. Ich habe bereits eine Lösung im Kopf, die funktionieren müsste, zuerst will ich mal Meinungen hören, wie man das überhaupt machen könnte. Was mir bisher vorschwebt, das dürfte unnötig kompliziert sein.
Gruß
Hansa
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 00:28
Es geht viel einfacher : Canvas hat ne Funktion, wo du die Textbreite in Pixel herausfinden kannst.


Delphi-Quellcode:
Canvas.TextWidth(Caption) +2; //die +2 für die abstehende Breite
//das geht nur wenn du einen neue Komponente erstellst. Zur Design-Zeit, also wo du die Komponenten aufs Form ziehst, musst du erst ne Variable Canvas erstellen
var Canvas : TCanvas;
begin
Canvas := TCanvas.Create;
Canvas.Handle := GetDC(Panel.Handle);
end;
//und dann halt TextWidth machen
Hoffe ich konnte dir helfen

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 00:29
TCanvas kennt eine Methode, mit der man die Länge einer zeichenkette in Pixel bestimmen kann. Guck mal in der Hilfe nach, mir fällt gerade nicht der Name ein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 01:19
Lass die Caption doch leer und nimm stattdessen ein Label. Das Label platzierst du im Panel und setzt bei beiden Autosize auf True. Abstände könntest du mit den Properties Padding bzw Margin einstellen.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 08:07
Zitat von NickelM:
//das geht nur wenn du einen neue Komponente erstellst. Zur Design-Zeit, also wo du die Komponenten aufs Form ziehst, musst du erst ne Variable Canvas erstellen
Muss er nicht:
Delphi-Quellcode:
type
  THACK_CustomPanel = class(TCustomPanel);

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel1.Width := THACK_CustomPanel(Panel1).Canvas.TextWidth(Panel1.Caption) + 16;
end;
Uli Gerhardt
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 14:28
Panel hat doch kein Canvas ? Jedenfalls war keines der angeführten Beispiele zum laufen zu kriegen. Habe jetzt mal meine eigene Idee getestet und sie an, die geht :

Delphi-Quellcode:
lblHilf.Caption := (c as TPanel).Caption;
lblHilf.Font := (c as TPanel).Font;
(c as TPanel).Width := lblHilf.Width; // jetzt Breite anpassen
Was soll ich denn überhaupt in mein Programm eine WinAPI-Funktion reinmachen oder irgendwie ein Canvas erzeugen ? Ich lasse einfach das Label die richtige Width errechnen. Das liefert dann dem Panel die richtige Width und fertig. Was ist davon zu halten ?
Gruß
Hansa
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 14:54
Zitat von Hansa:
Panel hat doch kein Canvas ? Jedenfalls war keines der angeführten Beispiele zum laufen zu kriegen. [...]
Deine idee wirkt halt son bissl gepfuscht , aber wenns geht dann gehts... allerdings muss ich sagen, dass das beispiel von uligerhardt bei mir problemlos funktioniert. Das machts halt n bissl schlanker, solltest vielleicht nochmal anschauen

Gruß
Ansgar
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 15:11
Zitat von hansa:
Panel hat doch kein Canvas ?
Doch, da es ja von TCustomControl abgeleitet ist. Allerdings wurde die Property als protected deklariert, so dass Du nur über den Umweg der Cracker-Klasse rankommst.
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 OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Panelwidth an Caption anpassen ?

  Alt 22. Jul 2009, 15:59
Zitat von Hansa:
Panel hat doch kein Canvas ?
Doch, hat es sehr wohl, ist jedoch protected. Es bietet sich daher an, eine eigene Klasse TAutoSizePanel zu erstellen (zum Beispiel), oder einfach vom Betriebssystem die passende Größe ermitteln zu lassen, dann gibts auch keine Probleme mit Widestrings und so weiter

Zitat von Hansa:
Delphi-Quellcode:
lblHilf.Caption := (c as TPanel).Caption;
lblHilf.Font := (c as TPanel).Font;
(c as TPanel).Width := lblHilf.Width; // jetzt Breite anpassen
Abgesehen davon, dass das Resourcenverschwendung ist und um den Faktor zehn langsamer, funktioniert das nur, wenn lblHilf.AutoSize=true Außerdem hast Du den im Ursprungspost erwähnten Rand links und rechts vergessen Wenn Du Dich an Deine eigene Aufgabenstellung hältst, musst Du noch mehr machen als in den obigen Zeilen

Zitat von Hansa:
Was soll ich denn überhaupt in mein Programm eine WinAPI-Funktion reinmachen oder irgendwie ein Canvas erzeugen ? Ich lasse einfach das Label die richtige Width errechnen. Das liefert dann dem Panel die richtige Width und fertig. Was ist davon zu halten ?
"reinmachen" musst Du da nirgends Die Unit Windows sollte in den allermeisten VCL-Programmen so oder so schon vorhanden sein Zum Rest siehe oben. Und wo das hinführt: Die Altlast an der ich momentan arbeite hat auf dem Mainform ca. 250 Controls in mehreren Schichten übereinander angeordnet, ca. 30 davon dienen nur dazu, irgendwelche X/Y-Positionen und Abstände zu ermitteln. Vollkommen bescheuert.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:38 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