AGB  ·  Datenschutz  ·  Impressum  







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

[VTV] Virtual Treeview und horizontal scrollbar

Ein Thema von ConnorMcLeod · begonnen am 10. Jun 2012 · letzter Beitrag vom 12. Jun 2012
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

[VTV] Virtual Treeview und horizontal scrollbar

  Alt 10. Jun 2012, 13:09
Hallo Gemeinde,
gegeben ist diese Konfiguration:
Delphi-Quellcode:
  ScrollBarOptions.AlwaysVisible := False;
  ScrollBarOptions.ScrollBars := ssBoth;
*) es gibt zuwenig Nodes, um einen vertikalen Scrollbar anzuzeigen
*) es gibt Nodes mit Text, der zu breit ist, um komplett angezeigt zu werden => wird mit [...] angezeigt.

Problem: der horizontale ScrollBar wird nicht angezeigt

Eine Teillösung habe ich mittels Prüfung im Initialisieren des Nodes: wenn der Text zu lang ist, dann setze ich   ScrollBarOptions.AlwaysVisible := True; , aber das kanns ja nicht sein.

Ideen anybody?
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: [VTV] Virtual Treeview und horizontal scrollbar

  Alt 10. Jun 2012, 15:36
Problem: der horizontale ScrollBar wird nicht angezeigt
Nachdem ich deinen Beitrag gelesen hatte, mußte ich feststellen, daß ich in meinem aktuellen Projekt dasselbe Problem habe:

Ein VirtualStringTree (VST) liegt auf einem Panel, alle vier Anchors des VST sind TRUE, das Panel kann via TSplitter in der Breite verändert werden. Wenn ich nun das Panel so schmal mache, daß die Einträge im VST nicht mehr vollständig sichtbar sind, erscheint keine horizontale Scrollbar. Auch nicht, wenn ich Knoten mit langen Untereinträgen aufklappe, so daß die Untereinträge nicht vollständig sichtbar sind.

Meine ScrollBarOptions:

AlwaysVisible := FALSE;
HorizontalIncrement := 20;
ScrollBars := SSBoth;
ScrollBarStyle := sbmRegular;
VerticalIncrement := 20;

Habe dann erstmal alle möglichen Optionen des VST verändert, jedoch ohne dabei auf eine Lösung zu treffen. Die einzige Möglichkeit, die mir bleibt, die horizontale Scrollbar anzuzeigen, scheint AlwaysVisible auf TRUE zu setzen. Wenn's jemand besser weiß, wäre auch ich sehr dankbar ...

Nachtrag: Habe eben festgestellt, daß in meinem Fall ein AlwaysVisible := TRUE nicht weiterhilft: Die horizontale Scrollbar erscheint zwar, enthält aber keinen Scrollbalken. Das liegt wohl daran, daß ich in meinem VST zwei Spalten habe, wobei in der ersten Spalte die Einträge stehen und diese Spaltenbreite sich nicht ändert. Der horizontale Scrollbalken erscheint aber erst, wenn es was zum Scrollen gibt, sprich: wenn eine Spalte die Breite des VST überschreiten würde. Das mußte ich jedoch verhindern, weil ich wollte, daß die zweite Spalte immmer sichbar bleibt. Entsprechend wird die erste Spalte bei Breitenänderungen des VST (onResize) angepaßt.

Geändert von Perlsau (10. Jun 2012 um 15:42 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: [VTV] Virtual Treeview und horizontal scrollbar

  Alt 10. Jun 2012, 16:11
Juchu, ich bin nicht der Einzige

Mein Workaround ist so:

von Stackoverflow:
Delphi-Quellcode:
function TMyVirtualTree.IsTextClipped(Node: PVirtualNode; Column: TColumnIndex): Boolean;
var
  FullRect, ClippedRect: TRect;
begin
  FullRect := GetDisplayRect(Node, Column, True, True);
  ClippedRect := GetDisplayRect(Node, Column, True, False);
  Result := (ClippedRect.Right - ClippedRect.Left) < (FullRect.Right - FullRect.Left);
end;
im Event OnAfterPaintItem des Trees:
Delphi-Quellcode:
procedure TMyVirtualTree.DoAfterItemPaint(
    Sender: TBaseVirtualTree
  ; TargetCanvas: TCanvas
  ; Node: PVirtualNode
  ; ItemRect: TRect
  );
begin
  if (0 < Header.Columns.Count) and IsTextClipped(Node, 0) then
  begin
    ScrollBarOptions.AlwaysVisible := True;
  end;
end;
Wenn Du IsTextClipped auf Deine Spalten anpasst, dann könnte es gehen.
Edit: nach näherer Betrachtung, glaube ich das nicht mehr. Naja.

Leider kann man auf diese Art die Scrollbars nicht mehr ausblenden, wenn sie mal eingeblendet sind.
HTH
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod (10. Jun 2012 um 16:14 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: [VTV] Virtual Treeview und horizontal scrollbar

  Alt 10. Jun 2012, 16:17
Juchu, ich bin nicht der Einzige
Ist doch immer wieder schön, auf Leidensgenossen zu treffen

Wie bereits geschrieben, ich hab ja den TSplitter, um die vollständige Anzeige zu gewährleisten. Und ob der Anwender nun an der Scrollbar rumfummelt oder am Splitter, kommt fast aufs Gleiche raus, mit dem einzigen Unterschied: Via Scrollbar bekäme er u.U. auch nicht den Eintrag in seiner vollen Länge zu Gesicht, via Splitter aber schon, weil da einfach die Breite des VST so lange gezogen wird, bis alles reinpaßt. Ich laß das also mal so, wie ich es jetz habe.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: [VTV] Virtual Treeview und horizontal scrollbar

  Alt 10. Jun 2012, 16:38
Stimmt schon; ich kann das leider nicht so lösen, weil der Tree immer gleich breit bleiben soll. Glück Auf!

Edit: die momentan beste Lösung:
Delphi-Quellcode:
procedure TMyVirtualTree.DoAfterItemPaint(
    Sender: TBaseVirtualTree
  ; TargetCanvas: TCanvas
  ; Node: PVirtualNode
  ; ItemRect: TRect
  );
begin
  if (0 < Header.Columns.Count) and IsTextClipped(Node, 0) then
  begin
    Header.AutoFitColumns(False, smaAllColumns, 0, 0);
  end;
end;
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod (10. Jun 2012 um 17:48 Uhr) Grund: Lösung dazu
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.009 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: [VTV] Virtual Treeview und horizontal scrollbar

  Alt 10. Jun 2012, 23:19
Reicht es nicht, das AutoFitColumns einmalig (bzw bei Veränderung der Einträge im Tree) aufzurufen? Das sollte dazu führen, dass die Breite der Spalte(n) auf das breiteste Element eingestellt wird, was ggf. zur Anzeige der horizontalen Scrollbar führt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: [VTV] Virtual Treeview und horizontal scrollbar

  Alt 12. Jun 2012, 13:39
Leider nein. Immer, wenn der Anwender einen Knoten aufmacht, dann kann ein KindKnoten zu breit werden und das Problem ist wieder da.
Nr.1 Delphi-Tool: [F7]
  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 00:13 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