Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
Delphi XE2 Professional
|
AW: VirtualTreeView Editfelder, ComboBox und andere
11. Apr 2016, 20:56
Zitat von Jaenicke:
Hast du denn einmal in die Doku geschaut? Da ist das eigentlich sehr gut beschrieben:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Wenn du die Tab Taste selber behandeln willst, musst du in dem Control, das die entsprechenden Messages bekommt, WM_GETDLGCODE entsprechend des bereits geposteten Codes implementieren. Damit sagst du Windows, dass es die Standardbehandlung für Tab (zum nächsten Steuerelement springen) nicht ausführen und stattdessen die Messages zur Behandlung des Tastendrucks schicken soll.
Schaue ich mir jetzt gleich mal an.
Im weiteren habe ich noch ein Problem gefunden. Die Tasten VK_UP, und VK_DOWN gehen. Allerdings, denke ich, das die Funktion ja folgendes machen soll... (siehe Kommentare
Delphi-Quellcode:
VK_UP,
VK_DOWN,
VK_LEFT,
VK_RIGHT:
begin
CanEndEdit := Shift = []; //CanEndEdit wird gesetzt, wenn keine Shift Taste gedrückt ist
if FEdit is TComboBox then //Hier wird geprüft, ob FEdit vom Typ ComboBox ist
CanEndEdit := CanEndEdit and not TComboBox(FEdit).DroppedDown;
{CanEndEdit wird gesetzt, wenn vorab CanEndEdit gesetzt und TComboBox kein
geöffnetes DroppedDown Menü hat. Wäre das DroppedDown Menü geöffnet, soll
der nächste Eintrag im Menü gewählt werden. Das funktioniert so nicht. Der
nächste Eintrag wird zwar gewählt, aber dann sofort das DroppedDown Menü geschlossen}
if CanEndEdit then
{Ist kein DroppedDown Menü geöffnet oder kein TComboBox oder kein Shift, müsste
dann müsste hier CanEndEdit noch true sein}
begin
PostMessage(FTree.Handle, WM_KEYDOWN, Key, 0);
{Versteh ich wieder nicht so richtig. Ich denke hier wird geprüft, welcher
Key und diese Message wird dann verarbeitet. Soll heißen, dass Bewegen mit den
Taste Links, Rechts, Auf und Ab. Hier funktioniert die Navigation auch tadellos,
allerdings, wird nur beim VK_UP und VK_DOWN die Funktion "SaveChanges" aufgerufen.
Dies liegt ja vermutlich daran, das der Node nicht verlassen wird, sondern nur das
Column gewechselt. Aber eine Idee zur Lösung fehlt mir trotzdem aktuell}
Key := 0;
{ Abschließen wird der Key auf 0 gesetzt damit keine weitere Bearbeitung
entsprechend der normalen Windows Funktionen erfolgt }
end;
end;
Ich hoffe, dass ist so und jemand kann mir mal erklären, woran das Problem liegt und wie ich das abstellen kann.
Danke nochmal und Gruß Jens
Jens Hartmann Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
|
|
Zitat
|