Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeView-->OnEditing/OnEdited die Enter-Taste abfangen (https://www.delphipraxis.net/129084-treeview-onediting-onedited-die-enter-taste-abfangen.html)

RWarnecke 12. Feb 2009 13:00


TreeView-->OnEditing/OnEdited die Enter-Taste abfangen
 
Hallo zusammen,

ich habe da mal wieder ein Problem. Ich erstelle mit dem folgenden Code eine neue Node in einem TreeView und setze diese in den Editiermodus :
Delphi-Quellcode:
  tmpNode := TV_Category.Items.AddChild(TV_Category.Selected, 'Neue Kategorie');
  tmpNode.ImageIndex := 0;
  tmpNode.SelectedIndex := 0;
  TV_Category.Selected.Expand(False);
  tmpNode.Selected := True;
  TV_Category.Selected.EditText;
Funktioniert auch soweit ganz gut. Nun zu meinem Problem, wenn ich jetzt einfach die Enter-Taste drücke, wird die neue Node mit dem Namen "Neue Kategorie" eingefügt und das Ereignis OnEdited wird nicht ausgeführt. Das heißt, dass die Node nicht in meiner Datenbank abgeseichert wird.

Wie kann ich das ganze jetzt abfangen ? Denn ich möchte, dass der User einen neuen Namen für die Kategorie vergibt und nicht eher aus dem Editiermodus des TreeViews rauskommt bis mindestens ein Name vergeben ist. Über die OnKeyxxx-Ereignisse habe ich es auch schon probiert. Diese werden aber im Editiermodus nicht angesprochen.

HHennig 12. Feb 2009 20:01

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Hallo evtl. hilft dir meine damalige Antwort weiter. Nicht so fein formatiert (wie mir zu recht vorgeworfen wurde... :wink: ), aber funktioniert.

HHennig 12. Feb 2009 20:04

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Ehm, habe vergessen auf das hinzuweisen, was ich eigentlich sagen wollte: Versuche mal die Enter-Taste schon global auf Applikationsebene abzufangen, wie im Link des letzten Beitrags beschrieben.

RWarnecke 12. Feb 2009 20:36

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Zitat:

Zitat von HHennig
Hallo evtl. hilft dir meine damalige Antwort weiter. Nicht so fein formatiert (wie mir zu recht vorgeworfen wurde... :wink: ), aber funktioniert.

Zitat:

Zitat von HHennig
Ehm, habe vergessen auf das hinzuweisen, was ich eigentlich sagen wollte: Versuche mal die Enter-Taste schon global auf Applikationsebene abzufangen, wie im Link des letzten Beitrags beschrieben.

Dann müsste ich ja meine anderen KeyDown, KeyPress etc. alle umbauen. Das ist nicht was ich will, da ich in mehreren Komponenten auf Tasten reagiere.

HHennig 12. Feb 2009 22:30

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Zitat:

Dann müsste ich ja meine anderen KeyDown, KeyPress etc. alle umbauen
Nicht unbedingt, wenn in der globalen OnAppMsg gerade nicht die richtige Komponente den Tastaturfokus hat, kannst du das ja abfragen und mit Handled := False die Tastaturereignisse ganz normal an die nachfolgenden KeyDown, KeyPress, etc. weiterreichen.

RWarnecke 12. Feb 2009 22:44

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Ok, dabei stellt sich mir jetzt aber die Frage, welche wird als erstes Ausgeführt ? Das OnKeyDown, OnKeyPress Ereignis von der Komponente oder das globale ?

HHennig 12. Feb 2009 23:02

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Ich bin fast sicher, dass der globale Event zuerst kommt, sonst würde ja der Parameter Handled keinen Sinn machen.

Aber, am besten testen: je einen Breakpoint in das globale und in ein sonstiges Key-Event setzen und starten. Wer zuerst kommt mahlt auch zu erst... :wink:

RWarnecke 12. Feb 2009 23:13

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Ok, ich werde es mal testen. Aber ganz zufrieden bin ich damit nicht. Da das eine Menge Aufwand bedeutet.

HHennig 12. Feb 2009 23:21

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Sicher kann das ggf. aufwendig werden. Hast du aber überhaupt eine andere Wahl, wenn doch, wie du anfangs sagtest, die 'normalen' Events gar nicht greifen?

Ich wüsste jetzt gerade keine Alternative.

RWarnecke 12. Feb 2009 23:30

Re: TreeView-->OnEditing/OnEdited die Enter-Taste abfange
 
Zitat:

Zitat von HHennig
Sicher kann das ggf. aufwendig werden. Hast du aber überhaupt eine andere Wahl, wenn doch, wie du anfangs sagtest, die 'normalen' Events gar nicht greifen?

Das haben zumindest meine bisherigen Tests ergeben. Ich habe zu dem Editiermodus des TreeViews aber auch noch nichts weiteres gefunden. Mir wäre es am liebsten, ich kann das über das normale KeyDown vom TreeView abhandeln. So brauche ich die anderen Komponenten nicht anzufassen. Das blöde ist halt, wenn ich per Sourcecode einen Text für die Node vorgebe und dann nur Enter gedrückt wird, wird das OnEdited-Ereignis nicht ausgeführt. Gebe ich zum Beispiel nur eine 1 hinter dem vorgegebenen Namen ein, dann funktioniert es.

Eine andere Möglichkeit wäre noch eine Dialogbox zu machen, wo ich dann das entsprechende Edit-Feld auswerten kann. Was ich aber aus Designersicht wiederum nicht elegant gelöst finde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr.
Seite 1 von 3  1 23      

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