AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Ich habe einige fragen zu VirtualStringTree
Thema durchsuchen
Ansicht
Themen-Optionen

Ich habe einige fragen zu VirtualStringTree

Ein Thema von Wishmaster · begonnen am 19. Okt 2014 · letzter Beitrag vom 20. Okt 2014
Antwort Antwort
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

Ich habe einige fragen zu VirtualStringTree

  Alt 19. Okt 2014, 03:50
Hi.

Ich male die icons und den text selbst. und jetzt zum problem.

1# wie kann ich die Edit Box selbst zeichnen / verschieben?
2# gibt es eine möglichkeit die selection selbst zu zeichnen?
wenn ich nicht "toUseBlendedSelection" benutze ist das icon nicht sichtbar.

siehe die Screenshots.



thx.
Miniaturansicht angehängter Grafiken
main.jpg   main1.jpg  
  Mit Zitat antworten Zitat
Aviator

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

AW: Ich habe einige fragen zu VirtualStringTree

  Alt 19. Okt 2014, 14:18
Hi Wishmaster,

1# wie kann ich die Edit Box selbst zeichnen / verschieben?
die EditBox (TEdit) sollte bei dir per CreateEditor Event erstellt werden. Die Positionierung des Editfeldes wird dann in deiner EditorsClass (oder wie auch immer du sie genannt hast), welche das Interface IVTEditLink implementiert, vorgenommen. Und zwar in der Procedure SetBounds(). Dort kannst du dann die Position Rect.Left verändern.

Falls du hiermit Probleme haben solltest, kann ich dir auch mal ein einfaches Beispiel schicken.

Ich male die icons und den text selbst.
Aus welchem Grund? Der Tree malt doch schon alles für dich und achtet auch auf Icons und sonstigen Kram. Wenn du unterschiedliche Fonts in einer Zelle haben willst, musst den Text natürlich selbst zeichnen, die Icons können weiterhin vom Tree gemalt werden. Am Besten machst du das dann per DrawText Event. Wenn es nur eine Zelle betrifft, dann reicht das PaintText Event.

2# gibt es eine möglichkeit die selection selbst zu zeichnen?
wenn ich nicht "toUseBlendedSelection" benutze ist das icon nicht sichtbar.
Die Frage ist zwar warum du es nicht benutzt, aber das ist ja dir überlassen. Zeichnen kannst du die Selektion natürlich auch selbst. Schalte hierfür am Besten die Option toAlwaysHideSelection in den TreeOptions --> PaintOptions ein, damit die eigene Selektion vom Tree schonmal nicht gemalt wird. Ab dann kannst du diese selbst zeichnen. Am Besten im OnBeforeCellPaint Event, da dieses das Event ist, dass vor allen anderen "wichtigen" Zeichnungs Events ausgelöst wird.
So sollte es z.B. funktionieren:
Delphi-Quellcode:
procedure TfrmMain.vst1BeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
  TargetCanvas.Brush.Color := vst1.Colors.FocusedSelectionColor;
  TargetCanvas.FillRect(CellRect);
end;
Dann musst du natürlich noch abfragen, ob diese Node die gerade gezeichnet wird auch die FocusedNode ist bzw. ob diese "selected" ist. Oder du merkst dir die zu malende Node in einer Variablen.

Wenn du weitere Fragen hast, dann nur her damit.

PS.: Schau dir mal in der Hilfe zum Tree (die PDF Datei nicht die CHM Datei) Seite 36ff an. Dort findest du eine Übersicht über den Ablauf aller PaintEvents.

Hier mal die Kurzübersicht:
Zitat von VST Hilfe:
Usually the following paint stages are executed during a paint cycle:
• before paint (OnBeforePaint)
• before item paint (OnBeforeItemPaint)
• before item erase (OnBeforeItemErase)
• after item erase (OnAfterItemErase)
• before cell draw (OnBeforeCellPaint)
• on paint text (string trees only, OnPaintText)
• after cell draw (OnAfterCellPaint)
• after item paint (OnAfterItemPaint)
• after paint (OnAfterPaint)
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#3

AW: Ich habe einige fragen zu VirtualStringTree

  Alt 20. Okt 2014, 04:42
Hi. danke für die antwort.

ich meinte eigentlich, gibt es eine möglichkeit das vorhandene edit feld zu manipulieren.
wenn du eine TImageList verwendest wird das ja alles berücksichtigt.
wenn ich alles selbst zeichne, weiß die VirtualStringTree ja nicht dass den text um ~20 pixel nach rechts verschiebe. so deswegen muss ich die Edit box auch ~20 Pixel nach rechts verschieben.

wegen den icons, das haben wir in einem anderen topic ausführlich durchgekaut
VirtualTreeView und icons

BeforeCellPaint ist nicht ganz was ich brauche. wenn du dir die Screenshots anschaust.
wirst du sehen dass ich die funktion schon nutze. aber vielleicht kann sie mir doch von nutzen sein.
  Mit Zitat antworten Zitat
Aviator

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

AW: Ich habe einige fragen zu VirtualStringTree

  Alt 20. Okt 2014, 12:45
ich meinte eigentlich, gibt es eine möglichkeit das vorhandene edit feld zu manipulieren.
Das Editfeld, das durch den Tree selbst erstellt wird kannst du soweit ich weiß nicht manipulieren. Deshalb gibt es das Event CreateEditor, das ausgelöst wird wenn du den Befehl EditNode() aufrufst. Dort kannst du dir dann deinen eigenen Editor erstellen und diesen dann so abändern wie du es gerne hättest. Z.B. auch die maximale Länge im Editfeld, die Schriftgröße usw.
Schau dir mal in der AdvancedDemo das Beispiel "Property Tree" (oder so ähnlich) und den zugehörigen Quellcode an. Das ist das was ich in meinem ersten Beitrag meinte. Mit diesen eigenen Editoren kannst du alles komplett selbst bestimmen und bist nicht auf das eigene Editfeld vom VST angewiesen. Dort gibt es dann auch die von mir erwähnte SetBounds() Procedure, mit der du die Left Position deines Rects, in das das Editfeld gezeichnet werden soll, anpassen kannst.


Edit (noch was vergessen):
BeforeCellPaint ist nicht ganz was ich brauche. wenn du dir die Screenshots anschaust.
wirst du sehen dass ich die funktion schon nutze. aber vielleicht kann sie mir doch von nutzen sein.
Das BeforeCellPaint Event bringt dir schon etwas. In diesem Event kannst du nämlich deine Selektion selbst malen was du eigentlich auch vor hattest. Mit dem Editproblem hat diese aber nicht zu tun.

Geändert von Aviator (20. Okt 2014 um 12:49 Uhr)
  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 03:21 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