Delphi-PRAXiS

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/)
-   -   Hintgröße und Anzeigedauer beim TTreeview anpassen (https://www.delphipraxis.net/206762-hintgroesse-und-anzeigedauer-beim-ttreeview-anpassen.html)

swestner 27. Jan 2021 11:34

Hintgröße und Anzeigedauer beim TTreeview anpassen
 
Hallo,

ich möchte in meinem Treeview die Größe der Hints und deren Anzeigedauer anpassen.

Das Ganze möglichst ohne eine eigene THintWindow-Klasse.

Ich habe folgenden Code:

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.AppEvnts;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    procedure TreeView1Hint(Sender: TObject; const Node: TTreeNode;
      var Hint: string);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    DefTreeViewWndProc: TWndMethod;
    procedure TreeViewWndProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses CommCtrl;

const
  cHintWindowSize = 700;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DefTreeViewWndProc := TreeView1.WindowProc;
  TreeView1.WindowProc := TreeViewWndProc;
  Application.HintHidePause:=30000;
  Application.HintColor:=clRed;
end;

procedure TForm1.TreeView1Hint(Sender: TObject; const Node: TTreeNode;
  var Hint: string);
var
  b: TBitmap;
  i: Integer;
  hintline, hintresult: String;
begin
  b:=TBitmap.Create;
  try
    b.Canvas.Font.Assign(Screen.HintFont);
    hintline:=''; hintresult:='';
    i:=1;
    while i<Length(Hint) do begin
      hintline:=hintline+Copy(Hint, 1, i);
      if b.Canvas.TextWidth(hintline)>cHintWindowSize then begin
        if hintresult<>'' then hintresult:=hintresult+#13#10;
        hintresult:=hintresult+Copy(Hint, 1, i-1);
        Delete(Hint, 1, i-1);
        i:=1;
        hintline:='';
      end
      else
        Inc(i);
    end;
  finally
    b.Free;
  end;
  Hint:=hintresult;
end;

procedure TForm1.TreeViewWndProc(var Message: TMessage);
begin
  if Message.Msg = WM_NOTIFY then
  begin
    with TWMNotify(Message).NMHdr^ do
    begin
      if code = TTN_NEEDTEXTW then
      begin
        if SendMessage(hwndFrom, TTM_GETMAXTIPWIDTH, 0, 0) = -1 then
          SendMessage(hwndFrom, TTM_SETMAXTIPWIDTH, 0, cHintWindowSize);
      end;
    end;
  end;
  DefTreeViewWndProc(Message);
end;
Folgende Fragen / Probleme:
1. In der IDE-GUI kann ich für einen Treenode keinen Text länger als 255 Zeichen eingeben.
2. Ich setze die MaxWidth des Toolwindow des Hints auf 700 trotzdem ist das nur ca 200 Pixel breit
3. Das Setzen der HintHidePause und des HintColors hat keinen Effekt

Was möchte ich erreichen?
1. Toolwindow soll so breit sein wie der halbe Bildschirm
2. Solange der Benutzer die Maus nicht vom Knoten bewegt soll der Hint 30 Sekunden angezeigt werden.
3. Meinen Hint-Text will ich manuell umbrechen.

Stefan

swestner 27. Jan 2021 11:53

AW: Hintgröße und Anzeigedauer beim TTreeview anpassen
 
Das hat sich alles erledigt. Ich würde den Betriag gerne löschen, weiß aber nicht wie das geht...

Andreas13 27. Jan 2021 12:00

AW: Hintgröße und Anzeigedauer beim TTreeview anpassen
 
Hallo Stefan,
wie hast Du es geschafft? Wie lautet Deine Lösung?
In unserem Forum lernen wir gegenseitig voneinander, indem wir einander helfen. Daher ist ein Löschen der Beiträge nicht vorgesehen, denn irgendjemand wird schon Dein Problem als seines identifizieren und Deine Lösung als eine wertvolle Hilfestellung empfinden.
Gruß, Andreas

swestner 27. Jan 2021 12:18

AW: Hintgröße und Anzeigedauer beim TTreeview anpassen
 
Geschafft habe ich gar nichts. :-)

Ich war völlig auf dem falschen Dampfer.

Die Kundenanfrage bezog sich auf ein cxGrid von DevExpress.

Der Baum hat damit gar nichts zu tun gehabt.

ich habe versucht, ein problem zu lösen, das es gar nicht gab...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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