![]() |
Hint mit Tabulator formatieren
Gibt's ne Möglichkeit einen Hint formatiert anzuzeigen. Sprich ich möchte zwei Spalten darstellen. Produktname und Preis.
Folgendes wird beim mir nicht sehr schön angezeigt:
Delphi-Quellcode:
Gibt's ne Möglichkeit, wie bei der Listbox eine Tabulatorposition zu setzen?
Label1.hint:=
'Langer Name'+#9+'123.23'+#13+#10+ 'Name'+#9+'213.23'; |
AW: Hint mit Tabulator formatieren
Die TAB-Taste hat den Scancode 15.
Delphi-Quellcode:
Stelle soeben fest, dass #15 als Quadrat ersetzt wird...
TAB8:=' ';
bExit.hint:='Das'+#15+'ist'+#15+'das'+#15+'Ende!'; Exit.hint:='Das'+TAB8+'ist'+TAB8+'das'+TAB8+'Ende!';//so geht's Ersetze #15 einfach durch eine Stringkonstante oder Variable, z.B. TAB8:=' '; Das wird hier im Forum falsch dargestellt, weil Leerzeichen gelöscht werden... Ein Font mit konstanter Zeichenbreite wäre sehr sinnvoll! |
AW: Hint mit Tabulator formatieren
Wie kommst Du auf 15? Tab war immer und ist nach wie vor #9 in allen Zeichensätzen, die ich kenne (ich habe aber selbst nicht ausprobiert, ob tabs in einem Hint fnktionieren).
Zitat:
|
AW: Hint mit Tabulator formatieren
Zitat:
|
AW: Hint mit Tabulator formatieren
Hi,
da wirst Du Dein eigenes THintWindow bauen müssen... Wichtig ist dann in der überschriebenen Paint-Procedure den Text mit DrawText ausgeben und dort das Flag DT_EXPANDTABS zu setzen. |
AW: Hint mit Tabulator formatieren
Zitat:
|
AW: Hint mit Tabulator formatieren
Du kannst dir ja die Breite der einzelnen Texte berechnen und dann zu einer gestimmten Breite auffüllen.
Hier wie ich die Breite der DropdownListe für ComboBoxen ermittle:
Delphi-Quellcode:
Im Grunde reicht dir WMFCanvas.TextWidth(String) mit den richtigen Fonteinstellungen für die einzelnen Texte und das muß dann nur mit Leerzeichen sinnvoll aufgefüllt werden.
procedure OnComboBoxDropdown(Sender: TObject);
var WMF : TMetafile; // virtuelle WMF bzw. EMF Datei (enthält das Image) WMFCanvas : TMetafileCanvas; // virtuelle Oberfläche des Metafiles i, Width : integer; begin WMF := TMetafile.Create; WMFCanvas := TMetafileCanvas.Create( WMF, 0); WMFCanvas.Brush.Style := bsClear; WMFCanvas.Font := TComboBox(Sender).Font; Width := TComboBox(Sender).Width; for i := 0 to TComboBox(Sender).Items.Count - 1 do begin Width := max(Width ,WMFCanvas.TextWidth(TComboBox(Sender).Items[i]) + 25); end; TComboBox(Sender).Perform(CB_SETDROPPEDWIDTH, Width, 0); WMFCanvas.Free; WMF.Free; end; |
AW: Hint mit Tabulator formatieren
Ich fürchte, mit Leerzeichen bekommt man bei Zeichensätzen mit variabler Buchstabenbreite nichts ordentlich untereinander
|
AW: Hint mit Tabulator formatieren
Ich hab mal ein wenig gestöbert und das hier gefunden:
![]() Ein bisschen Modifikation bei:
Delphi-Quellcode:
sollte eigentlich reichen.
sHeight := HintWindow.Canvas.TextHeight(s) * sList.Count;
HintWindow.ActivateHint( Rect(P.X,P.Y, P.x + sWidth + 6, P.Y + sHeight),s); |
AW: Hint mit Tabulator formatieren
Hallo Bernau, ich habe bei mir ein einfaches TTabHintWindow drin. Sieht dann so aus:
Delphi-Quellcode:
TTabHintWindow=class(THintWindow) // Stellt auch Tabs mit dar
public function CalcHintRect(MaxWidth: Integer; const AHint: string;AData: Pointer): TRect; override; procedure Paint; override; end;
Delphi-Quellcode:
function TTabHintWindow.CalcHintRect(MaxWidth: Integer;
const AHint: string; AData: Pointer): TRect; begin Result := Rect(0, 0, MaxWidth, 0); DrawText(Canvas.Handle, PChar(AHint), -1, Result, DT_CALCRECT or DT_LEFT or DT_EXPANDTABS or DT_WORDBREAK or DT_NOPREFIX or DrawTextBiDiModeFlagsReadingOnly); Inc(Result.Right, 6); Inc(Result.Bottom, 2); end; procedure TTabHintWindow.Paint; var R: TRect; begin R := ClientRect; Inc(R.Left, 2); Inc(R.Top, 2); Canvas.Font.Color := clInfoText; DrawText(Canvas.Handle, PChar(Caption), -1, R, DT_LEFT or DT_NOPREFIX or DT_EXPANDTABS or DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly); end;
Delphi-Quellcode:
Ist schon recht alt, daher kann ich nicht sagen, wo das her ist.
initialization
HintWindowClass:=TTabHintWindow;// Tabulatoren werden unterstützt end. Gruß Bernd |
AW: Hint mit Tabulator formatieren
Zitat:
|
AW: Hint mit Tabulator formatieren
Habe doch noch ein Problem. Wenn ich folgendes anzeigen will, sind die Texte nach dem Tabstop nicht mehr untereinander
Delphi-Quellcode:
Gibt es so was wie LB_SETTABSTOPS für Listboxen?
TextZumAnzeigen :=
'Spalte1'+#9+'Spalte2'+#13+#10+ 'ein gaaaaaaaaaaaaaanz langer Text'+#9+'Spalte2'; |
AW: Hint mit Tabulator formatieren
Soviel ich weiss, nein. Einziger Workaround: Die tatsächliche Länge des Texts feststellen und entsprechend mehr oder weniger Tabs nachsenden - allerdings müsste man dazu den Abstand zwische zwei Tabs abfragen können, und da weiss ich auch nicht, wie das geht. Probieren wird nicht helfen, weil das auf verschiedenen Rechnern mit verschiedenen Fonts unterschiedlich aussehen kann. Also vielleicht doch alles zu Fuss machen?
|
AW: Hint mit Tabulator formatieren
(Ich weiß, das Thema ist alt. Aber ich bin grad über die Lösung und diesen Thread gestolpert. Da kann ich nicht widerstehen. :mrgreen:)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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