AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hint mit Tabulator formatieren

Ein Thema von bernau · begonnen am 14. Jun 2010 · letzter Beitrag vom 30. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#1

Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 12:14
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?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 12:19
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!

Geändert von hathor (14. Jun 2010 um 12:39 Uhr)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 12:51
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.

Geändert von idefix2 (14. Jun 2010 um 12:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 14:07
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....
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von ralfschwalbe
ralfschwalbe

Registriert seit: 19. Jul 2007
Ort: Lichtenstein/Sachsen
133 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 14:08
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.
Ralf Schwalbe
viele Grüße...
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 14:10
da wirst Du Dein eigenes THintWindow bauen müssen...
Das denke auch....
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#7

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 15:44
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.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 18:13
Ich fürchte, mit Leerzeichen bekommt man bei Zeichensätzen mit variabler Buchstabenbreite nichts ordentlich untereinander
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#9

AW: Hint mit Tabulator formatieren

  Alt 14. Jun 2010, 18:39
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.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#10

AW: Hint mit Tabulator formatieren

  Alt 15. Jun 2010, 07:37
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
  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 21:57 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