Autor Beitrag
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Di 24.10.23 10:25 
Folgenden Code nutze ich um in einer TreeView dynamische Hints für einzelne Nodes zu erzeugen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure Tfrm_uebersicht.tree_uebersichtHint(Sender: TObject;
  const Node: TTreeNode; var Hint: string);
var trid, i : Integer;
begin
  trid := TNodeData(Node.Data).RecordID;
  if  trid > -1 then
  begin
    Hint := 'Datum: '+Tree_records[trid].MeinDATUM;
    if length(Tree_records[trid].Notizen) > 0 then
    begin
      Hint := Hint +#10+'Dieser Eintrag hat folgende Notizen:'+#10;
      for i := 0 to length(Tree_records[trid].Notizen)-1 do
      begin
        Hint := Hint + #10+Tree_records[trid].Notizen[i].BESCHREIBUNG;
      end;
    end;
  end;
  inp_test.Hint := Hint;
end;

Das funktioniert insofern, dass der Hint angezeigt wird, allerdings im Treeview nur die erste Zeile des Hints, also das Datum. Zum Test habe ich ein Edit eingefügt auf der Form und den Hint dort angehängt. Dort werden alle Zeilen, also auch die Notizinfos, im Hint angezeigt.

Ist das ein normales Verhalten bei TreeViews oder stehe ich gerade irgendwie auf dem Schlauch und habe eine bestimmte Einstellung übersehen?

_________________
mfg. Joel
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1322
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 24.10.23 18:43 
Hey,

Ich denke es hängt vom Hint ab ob der mehrzeilig kann oder nicht. Wenn ich mich recht erinnere dann können die Delphi Hints nur einzeilig. Das ist ja eine Windows Function, das kann man auch selber aufrufen.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
JoelH Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 25.10.23 07:08 
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mich recht erinnere dann können die Delphi Hints nur einzeilig.

Nein, wie beschrieben, der Hint angehängt an die Edit-Komponente "inp_Text" gibt mir den gesamten, mehrzeiligen Text zurück. Deshalb vermute ich, es liegt an der TreeView-Komponente.

_________________
mfg. Joel
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 25.10.23 09:48 
Gefunden habe ich folgende englische Seite: Multiline tooltips in a treeview (XE2) (also ein eigenes von TTreeView abgeleitetes Control erzeugen und die Windows-Message TTN_NEEDTEXTW behandeln)

Für diesen Beitrag haben gedankt: JoelH
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 25.10.23 10:04 
Der eigentliche Hint im Treeview kann mehrzeilig sein, aber der knotenspezifische Hinweistext (der unabhängig von der Property "Hint" ist), unterstützt wohl nur einzeilige Strings.

Spricht etwas gegen den Einsatz vom VirtualStringTree, der zwar etwas Einarbeitung benötigt, aber solche Probleme nicht hat? Dort klappen mehrzeilige Hints ohne Probleme, die kollidieren nicht mit dem Standard-Hint (d.h. keine doppelte Anzeige). Und wenn man mag, kann man da das Hintfenster auch komplett selber malen und z.B. auch Bilder einfügen.

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: JoelH
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1322
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 25.10.23 10:26 
user profile iconJoelH hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mich recht erinnere dann können die Delphi Hints nur einzeilig.

Nein, wie beschrieben, der Hint angehängt an die Edit-Komponente "inp_Text" gibt mir den gesamten, mehrzeiligen Text zurück. Deshalb vermute ich, es liegt an der TreeView-Komponente.

Man kann auch das gleiche machen was ich gemacht habe ... wärend hier die ganzen anderen Antworten reingeflattert sind ... und sich durch den irren Wust an Quelltext wühlen der den Hint intern bearbeitet ... dabei feststellen dass dieser Hint windows magic ist ... und sich somit nix verändern lässt, es sei denn man macht es selber!

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?


Zuletzt bearbeitet von Sinspin am Mi 25.10.23 15:56, insgesamt 1-mal bearbeitet
JoelH Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 25.10.23 13:49 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Spricht etwas gegen den Einsatz vom VirtualStringTree


Nur "Bordmittel" erlaubt. Dann muss ich mir was anderes überlegen, passt schon.

_________________
mfg. Joel
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: Mi 25.10.23 16:47 
Hmm..

user profile iconJoelH hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure Tfrm_uebersicht.tree_uebersichtHint(Sender: TObject;
  const Node: TTreeNode; var Hint: string);
var trid, i : Integer;
begin
  trid := TNodeData(Node.Data).RecordID;
  if  trid > -1 then
  begin
    Hint := 'Datum: '+Tree_records[trid].MeinDATUM;
    if length(Tree_records[trid].Notizen) > 0 then
    begin
      Hint := Hint +#10+'Dieser Eintrag hat folgende Notizen:'+#10;
      for i := 0 to length(Tree_records[trid].Notizen)-1 do
      begin
        Hint := Hint + #10+Tree_records[trid].Notizen[i].BESCHREIBUNG;
      end;
    end;
  end;
  inp_test.Hint := Hint;
end;


Verwende mal statt #10 ein #13, ich glaube dass bei einem Hint #13 den Zeilenumbruch macht...

Habe das mal bei mit (Delphi6) so angetestet und bekomme einen zweizeiligen Hint:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  tmpSelected : TTreeNode;
begin
  tmpSelected := TreeView1.GetNodeAt(X,Y);
  if tmpSelected <> nil then begin
    self.Hint := tmpSelected.Text + #13 + tmpSelected.Text;
  end;
end;

Für diesen Beitrag haben gedankt: JoelH
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 25.10.23 17:55 
Holgerx: Es geht nicht um den Hint für das gesamte TTreeView, sondern für die einzelnen TTreeNode-Einträge (über das OnHint-Ereignis).
Aber dein Vorschlag mittels OnMouseMove (und GetNodeAt) ist auch eine gute Alternative.
JoelH Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Do 26.10.23 10:03 
user profile iconHolgerx hat folgendes geschrieben Zum zitierten Posting springen:
Hmm..


Verwende mal statt #10 ein #13, ich glaube dass bei einem Hint #13 den Zeilenumbruch macht...

Habe das mal bei mit (Delphi6) so angetestet und bekomme einen zweizeiligen Hint:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  tmpSelected : TTreeNode;
begin
  tmpSelected := TreeView1.GetNodeAt(X,Y);
  if tmpSelected <> nil then begin
    self.Hint := tmpSelected.Text + #13 + tmpSelected.Text;
  end;
end;

:zustimm: Das funktioniert. Danke. Ist zwar etwas träge, aber wenn man weiss wie es geht, dann tut es.

_________________
mfg. Joel
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: Fr 27.10.23 10:03 
Hmm..
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Holgerx: Es geht nicht um den Hint für das gesamte TTreeView, sondern für die einzelnen TTreeNode-Einträge (über das OnHint-Ereignis).
Aber dein Vorschlag mittels OnMouseMove (und GetNodeAt) ist auch eine gute Alternative.


Hier dann eine Alternative mit OnHint (mit XE4, gibt es beim TV in Delphi 6 noch nicht):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.TreeView1Hint(Sender: TObject; const Node: TTreeNode; var Hint: string);
begin
  // eigenen Hint des TreeView löschen
  Hint := '';
  // Hint der Form setzen
  self.Hint := Node.Text+'-'+Node.Text + #13 + Node.Text;
  // Manuell den Hint (der Form) anzeigen (keine Verzögerung)
  Application.ActivateHint(Mouse.CursorPos);
end;

Für diesen Beitrag haben gedankt: JoelH, Th69