Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Hint in Treeview nur einzeilig möglich?
JoelH - Di 24.10.23 10:25
Titel: Hint in Treeview nur einzeilig möglich?
Folgenden Code nutze ich um in einer TreeView dynamische Hints für einzelne Nodes zu erzeugen.
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?
Sinspin - 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.
JoelH - Mi 25.10.23 07:08
Sinspin hat folgendes geschrieben : |
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.
Gausi - 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.
JoelH - Mi 25.10.23 13:49
Gausi hat folgendes geschrieben : |
Spricht etwas gegen den Einsatz vom VirtualStringTree |
Nur "Bordmittel" erlaubt. Dann muss ich mir was anderes überlegen, passt schon.
Holgerx - Mi 25.10.23 16:47
Hmm..
JoelH hat folgendes geschrieben : |
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:
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; |
JoelH - Do 26.10.23 10:03
Holgerx hat folgendes geschrieben : |
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:
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.
Holgerx - Fr 27.10.23 10:03
Hmm..
Hier dann eine Alternative mit OnHint (mit XE4, gibt es beim TV in Delphi 6 noch nicht):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.TreeView1Hint(Sender: TObject; const Node: TTreeNode; var Hint: string); begin Hint := ''; self.Hint := Node.Text+'-'+Node.Text + #13 + Node.Text; Application.ActivateHint(Mouse.CursorPos); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!