AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi VirtualStringTree wie in Excel navigieren + sofort editieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree wie in Excel navigieren + sofort editieren

Ein Thema von menschjens · begonnen am 26. Mär 2011 · letzter Beitrag vom 6. Apr 2011
Antwort Antwort
menschjens

Registriert seit: 21. Jun 2004
21 Beiträge
 
Delphi XE Professional
 
#1

VirtualStringTree wie in Excel navigieren + sofort editieren

  Alt 26. Mär 2011, 15:51
Hallo,
ich arbeite nun seit etwa 3 Wochen mit der VirtualStringTree-Komponente und bin begeistert über die Möglichkeiten.
Nun habe ich einen VirtualStringTree mit mehreren Columns, in dem ich gerne genau wie in Excel mit den Cursortasten von Zelle zu Zelle navigieren und gleich editieren möchte. Ich möchte also nicht erst Enter oder F2 drücken oder gar mit der Maus in das Feld klicken müssen, um das Editieren zu beginnen.
Mein Problem: Ich kann zwar über das KeyDown des Trees die Cursortasten abfangen, die richtige Zelle focussieren und das Editieren starten, aber danach erhält ja offenbar dieses Editfeld den Focus und weitere Cursorbewegungen tippeln dann in diesem Editfeld herum, anstatt das Editfeld zu verlassen und zur nächsten Zelle zu springen.
Ich suche und probieren nun schon tagelang - hat einer eine Idee?
Miniaturansicht angehängter Grafiken
virtualstringtree.jpg  
Jens-Uwe Horn

Geändert von menschjens (26. Mär 2011 um 17:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: VirtualStringTree wie in Excel navigieren + sofort editieren

  Alt 26. Mär 2011, 18:34
Du musst eben das Navigieren mit den Pfeiltasten innerhalb der Edits abfangen und entsprechend umleiten. Das hier klappt ganz wunderbar:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_DOWN) then
    Edit2.SetFocus();
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
menschjens

Registriert seit: 21. Jun 2004
21 Beiträge
 
Delphi XE Professional
 
#3

AW: VirtualStringTree wie in Excel navigieren + sofort editieren

  Alt 26. Mär 2011, 19:20
Dieses Edit wird doch aber nur während der Laufzeit vom VirtualStringTree erzeugt! Wie komme ich an dessen KeyDown-Ereignis?
Jens-Uwe Horn
  Mit Zitat antworten Zitat
menschjens

Registriert seit: 21. Jun 2004
21 Beiträge
 
Delphi XE Professional
 
#4

AW: VirtualStringTree wie in Excel navigieren + sofort editieren

  Alt 5. Apr 2011, 20:00
Hab's mittlerweile selbst gelöst. Wenn einer Tipps möchte, kann er fragen.
Jens-Uwe Horn
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: VirtualStringTree wie in Excel navigieren + sofort editieren

  Alt 5. Apr 2011, 20:58
Hab's mittlerweile selbst gelöst. Wenn einer Tipps möchte, kann er fragen.
Ich denke mal, es wäre ganz gut, wenn Du zumindest ein paar Stichworte zur Lösung hier präsentieren würdest.
Dann würde der Nächste, der nach der Lösung dieses Problems sucht, nicht von Vorne beginnen müssen.
Danke.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
menschjens

Registriert seit: 21. Jun 2004
21 Beiträge
 
Delphi XE Professional
 
#6

AW: VirtualStringTree wie in Excel navigieren + sofort editieren

  Alt 6. Apr 2011, 20:13
Da hast du recht. Ich versuch's mal:

Ich hab es mit einem eigenen EditLink gemacht. Das Advanced Demo (Editor.pas und GridDemo.pas) zeigt prinzipiell, wie es geht. Für meine Problemstellung war natürlich unwichtig, andere Komponenten als Editoren zu nutzen. Für mich war der Zugriff auf das im EditLink hinterlegte Edit-Feld (bei mir dann vom Typ TEdit) völlig ausreichend. Insbesondere habe ich also in meinem eigenen TPropertyEditLink die Prozedur EditKeyDown deklariert, um in dieser dann auf die Cursortasten reagieren zu können. In der Funktion PrepareEdit meines TPropertyEditLink's habe ich dann dem OnKeyDown den neuen KeyDown-Handler zugewiesen und das war's schon fast.

Damit kann man also nun im KeyPress des VirtualStringTree's (heißt bei mir VST1) auf jede Taste so reagieren, dass man sich den Tastencode (z.B in einer globalen Variablen PressedKey: Char) merkt und dann über VST1.EditNode(...) den neuen Editor generieren lässt. Im PrepareEdit weist man dann den gemerkten TastenCode dem TPropertyEdit.FEdit.Text zu - man will ja schließlich, dass das im VST1 gemerkte erste Zeichen nicht nur den Editor startet, sondern dort gleich als erstes Zeichen übernommen wird.
Von nun an befindet man sich also dann im TEdit (erstes Zeichen steht also schon drin) und kann nach den weiteren eingegebenen 'normalen Zeichen' über die oben beschriebene TPropertyEditLink.EditKeyDown bei Betätigung der Cursortasten gleich aus dem Editor aussteigen (FTree.EndEditNode). Vor dem Ausstieg aber FEdit.Modified auf true setzen, damit die Änderung auch für voll genommen wird und über PostMessage(FTree.Handle, WM_KEYDOWN, Key, 0) die Message absetzen, dass die Ausstiegs-Cursortaste auch nebenbei noch im Tree wie eine Cursortaste wirkt.

Ich hoffe mit den beiliegenden Code-Schnipseln kann man verstehen, wie es funktioniert.

Gruß
menschjens
Angehängte Dateien
Dateityp: pas Snap1.pas (2,0 KB, 52x aufgerufen)
Jens-Uwe Horn
  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 22:27 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