Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Hint mit Tabulator formatieren (https://www.delphipraxis.net/152175-hint-mit-tabulator-formatieren.html)

bernau 14. Jun 2010 12:14

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:
Label1.hint:=
  'Langer Name'+#9+'123.23'+#13+#10+
  'Name'+#9+'213.23';
Gibt's ne Möglichkeit, wie bei der Listbox eine Tabulatorposition zu setzen?

hathor 14. Jun 2010 12:19

AW: Hint mit Tabulator formatieren
 
Die TAB-Taste hat den Scancode 15.

Delphi-Quellcode:
TAB8:='       ';
bExit.hint:='Das'+#15+'ist'+#15+'das'+#15+'Ende!';
Exit.hint:='Das'+TAB8+'ist'+TAB8+'das'+TAB8+'Ende!';//so geht's
Stelle soeben fest, dass #15 als Quadrat ersetzt wird...
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!

idefix2 14. Jun 2010 12:51

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:

Ein Font mit konstanter Zeichenbreite wäre sehr sinnvoll!
Genau das will man aber meistens nicht, weil diese Fonts nicht attraktiv aussehen. Mit fixed pitch Fonts die Spalten untereinander anzeigen ist trivial, aber darum geht es hier eben nicht.

bernau 14. Jun 2010 14:07

AW: Hint mit Tabulator formatieren
 
Zitat:

Zitat von idefix2 (Beitrag 1028726)
Genau das will man aber meistens nicht, weil diese Fonts nicht attraktiv aussehen. Mit fixed pitch Fonts die Spalten untereinander anzeigen ist trivial, aber darum geht es hier eben nicht.

So ist es....

ralfschwalbe 14. Jun 2010 14:08

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.

bernau 14. Jun 2010 14:10

AW: Hint mit Tabulator formatieren
 
Zitat:

Zitat von ralfschwalbe (Beitrag 1028742)
da wirst Du Dein eigenes THintWindow bauen müssen...

Das denke auch....

David Martens 14. Jun 2010 15:44

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:
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;
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.

idefix2 14. Jun 2010 18:13

AW: Hint mit Tabulator formatieren
 
Ich fürchte, mit Leerzeichen bekommt man bei Zeichensätzen mit variabler Buchstabenbreite nichts ordentlich untereinander

David Martens 14. Jun 2010 18:39

AW: Hint mit Tabulator formatieren
 
Ich hab mal ein wenig gestöbert und das hier gefunden: Creating custom hints for yoru application/component

Ein bisschen Modifikation bei:
Delphi-Quellcode:
sHeight := HintWindow.Canvas.TextHeight(s) * sList.Count;
HintWindow.ActivateHint(
  Rect(P.X,P.Y, P.x + sWidth + 6, P.Y + sHeight),s);
sollte eigentlich reichen.

BerndS 15. Jun 2010 07:37

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:
initialization
  HintWindowClass:=TTabHintWindow;// Tabulatoren werden unterstützt
end.
Ist schon recht alt, daher kann ich nicht sagen, wo das her ist.
Gruß Bernd


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Seite 1 von 2  1 2      

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