AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi VirtualTreeView - Erkennen ob Text gekürzt wurde
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView - Erkennen ob Text gekürzt wurde

Ein Thema von Aviator · begonnen am 8. Aug 2014 · letzter Beitrag vom 10. Aug 2014
Antwort Antwort
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

VirtualTreeView - Erkennen ob Text gekürzt wurde

  Alt 8. Aug 2014, 19:28
Hallo zusammen,
ich bin gerade dabei, einen Hint in meinem VirtualStringTree (VST) anzuzeigen. Alles kein Problem, habe ich schon tausend mal gemacht. Allerdings habe ich immer eine kleine Unschönheit bei der Sache.

Und zwar hätte ich gerne, dass nur dann ein Hint angezeigt wird, wenn der Text vom VST gekürzt wurde und mit "..." erweitert wird. Bei vollständig lesbaren Texten ist es ja nicht gerade sinnvoll, einen Hint anzuzeigen. Mein Problem ist jetzt, dass ich keine Funktion/Property kenne, die mir ausgibt, ob der Text in einer Column bei einer bestimmten Node gekürzt wurde. Ein Blick in die Sourcen des VST brachte mich auch nicht wirklich weiter, außer dass ich mit meinen Suchbegriffen dort nichts fand.

Es gibt ein Event "OnShortenString", allerdings kann ich da nur nochmal selbst eingreifen und sagen, wie groß das Rect ist, in das der Text eingepasst werden soll. Nur bringt mir das im OnGetHint Event des Trees nicht mehr besonders viel.

Meine Frage jetzt: Kennt jemand eine Möglichkeit um zu erkennen, ob ein Text in einer Spalte gekürzt wurde? Oder muss man das was ich vorhabe komplett selbst programmieren und dann mit TextWidth/TextExtend errechnen, ob der Text breiter als die ColumnWidth ist und dann ggf. den Hint anzeigen oder nicht?

Geändert von Aviator ( 8. Aug 2014 um 19:30 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: VirtualTreeView - Erkennen ob Text gekürzt wurde

  Alt 8. Aug 2014, 19:41
Kleines Update: Ich habe mal das Event OnMeasureTextWidth mit einbezogen. Hierin setze ich jetzt eine Property auf True, wenn die Breite der Column die übergeben wurde kleiner ist, als der Wert der im Parameter Extend steht. Nur wenn die Variable true ist, wird der Hint angezeigt. Das wäre in meinen Augen eine praktikable Lösung, aber vielleicht kennt ja noch jemand einen besseren Weg.

Edit: Gerade noch weiter getestet. Funktioniert nur, wenn die Breite um einen etwas größeren Wert kleiner ist, als der Extend Wert des Parameters. Wenn es nur ein paar Pixel sind, dann wird anscheinend falsch berechnet bzw. die Breite des Textes ist nicht größer als die der Column, aber durch die Margins wird schon etwas verdeckt.

Geändert von Aviator ( 8. Aug 2014 um 19:44 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: VirtualTreeView - Erkennen ob Text gekürzt wurde

  Alt 10. Aug 2014, 13:34
Mal ein freundliches Push and dieser Stelle.

Es würde mir schon genügen, wenn mir jemand, der sich damit wirklich auskennt, sagen könnte, ob die Vorgehensweise so oder anders ablaufen sollte.

Hier mal das, wie ich es zur Zeit gelöst habe. Falls es richtig sein sollte, können ja auch andere davon profitieren.

Hier der OnMeasureTextWidth EventHandler:
Delphi-Quellcode:
procedure TfrmMain.vstBugsMeasureTextWidth(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  Column: TColumnIndex; const Text: string; var Extent: Integer);
begin
  ShowNodeHint := (vstBugs.Header.Columns[Column].Width < (Extent + 3.25 * vstBugs.TextMargin));
end;

Und hier der OnGetHint EventHandler:
Delphi-Quellcode:
procedure TfrmMain.vstBugsGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
  var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string);
begin
  if ((Column in [1, 2]) and ShowNodeHint) then begin
    HintText := vstBugs.Text[Node, Column];
    ShowNodeHint := False;
  end;
end;
Hier werte ich im Prinzip nur die im OnMeasureTextWidth Event gesetzte Variable aus und zeige dann den Hint an oder aber auch nicht. Wie die 3.25 zustande kommt, kann ich nicht sagen. Normalerweise sollte hier 2 stehen, da der linke und rechte Rand (Property TextMargin) der Zelle zur Breite des Textes addiert wird. Warum das nicht ausreicht weiß ich nicht.

Vielleicht hat darauf ja noch jemand eine plausible Antwort.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:14 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