AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TreeView-->OnEditing/OnEdited die Enter-Taste abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

TreeView-->OnEditing/OnEdited die Enter-Taste abfangen

Ein Thema von RWarnecke · begonnen am 12. Feb 2009 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
Seite 2 von 3     12 3      
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#11

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

  Alt 13. Feb 2009, 00:45
Werde später, wenn ich wieder im Büro bin, mal in das Projekt reinschauen und dir ggf. noch mehr Code senden. Die Lösung sollte doch eigentlich deine übrigen Komponenten und deren Key-Events gar nicht so sehr betreffen.

Es hilft halt nichts, du musst dem beschriebenen Verhalten der VCL zuvor kommen und die Tasten vorher so auswerten, wie du es benötigst.

Lass uns erst mal drüber schlafen...
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#12

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

  Alt 13. Feb 2009, 00:56
Zitat von HHennig:
Werde später, wenn ich wieder im Büro bin, mal in das Projekt reinschauen und dir ggf. noch mehr Code senden. Die Lösung sollte doch eigentlich deine übrigen Komponenten und deren Key-Events gar nicht so sehr betreffen.

Es hilft halt nichts, du musst dem beschriebenen Verhalten der VCL zuvor kommen und die Tasten vorher so auswerten, wie du es benötigst.

Lass uns erst mal drüber schlafen...
Da hast Du recht, lass uns mal drüber schlafen. Die Tests aus meinem Beitrag #8 werde ich auch erst machen, wenn ich geschlafen habe. So richtig weiter komme ich nämlich zur Zeit auch nicht.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#13

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

  Alt 13. Feb 2009, 08:54
Hallo Hartmut,

ich habe jetzt mal ein bischen mit dem Code aus Deinem verlinkten Beitrag getestet und folgendes ist dabei rausgekommen :
Delphi-Quellcode:
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := False;
  if Msg.message = WM_KEYDOWN then
  begin
    if (Msg.wParam = VK_RETURN) and (tv1.IsEditing) then
    begin
      if (tv1.Selected.Text = 'Neue Kategorie') then
      begin
        ShowMessage('Bitte einen neuen Namen eingeben !!' + #13#10 + tv1.Selected.Text);
        tv1.Selected.EditText;
      end;
      Handled := True;
    end;
  end;
end;
Das einzigste Problem, was im Moment noch besteht, wie komme ich an den aktuellen Text, der im Editiermodus im TreeView eingegeben ist Denn so wie ich es jetzt gemacht habe, hat er in der ShowMessage immer noch "Neue Kategorie".
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#14

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

  Alt 13. Feb 2009, 11:36
Hallo Rolf,

habe erst jetzt mal eine ruhige Minute gefunden, um nach deinem Problem zu sehen.

ich würde deine Code ein wenig umbauen, etwa so:

Delphi-Quellcode:
type
  TForm16 = class...
    ...
   public // oder wo es passender ist
    EditedTxt : string;
   ...
  end;

procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := False;
  if Msg.message = WM_KEYDOWN then
  begin
    if (tv1.IsEditing) then
    begin
      if (Msg.wParam in [VK_A..VK_Z]) then // -> nimm hier alle deine gültigen Zeichen
        EditedTxt := EditedTxt + chr(Msg.wParam)
      else
        if (Msg.wParam = VK_RETURN) then
        begin
          tv1.Selected.EditText := EditedTxt;
          EditedTxt := '';
        end;
      Handled := True;
    end;
  end;
end;
So ungefähr, ich hab's nicht getestet, sondern nur mal schnell runtergetippt.
Denn auch der eingegebene Text geht ja Zeichen für Zeichen durch dieses globale Key-Event.
Versuche einfach mal auf dieser Basis weiterzuforschen.
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#15

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

  Alt 13. Feb 2009, 11:45
Hallo Hartmut,

Dein Sourcecode wird nicht funktionieren. Denn die Zeile 21 wird nicht funktionieren, da EditText eine Funktion ist und mir nur Boolean zurückgibt.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#16

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

  Alt 13. Feb 2009, 12:38
Hallo Rolf,

du hast recht, ich meinte eigentlich das Property 'Text' des neuen Treenode; das wolltest du ja editieren und dahin schreibst du nun den per OnAppMsg 'gesamelten' Text.
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#17

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

  Alt 13. Feb 2009, 13:31
Dieser Code funktioniert insoweit, dass das Eingebene erst nach dem betätigen der Enter-Taste sichtbar wird.
Delphi-Quellcode:
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := False;
  if Msg.message = WM_KEYDOWN then
  begin
    if tv1.IsEditing then
    begin
      if (Msg.wParam > 64) and (Msg.wParam < 91) then // oder irgendeine andere Taste deiner Wahl
        EditedTxt := EditedTxt + chr(Msg.wParam)
      else
        if (Msg.wParam = VK_RETURN) then
        begin
          tv1.Selected.Text := EditedTxt;
          EditedTxt := '';
        end;
      Handled := True;
    end;
  end;
end;
Es muss ja irgendeine Message ausgelöst werden, wenn ich eine Node in den Editiermodus setze mit tv1.selected.edittext . Genau diese Message möchte ich trotzdem senden, auch wenn ich nur die Enter-Taste betätigt habe und keine andere Taste gedrückt habe. Dabei soll dann der Text überprüft werden und dementsprechend reagiert werden.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#18

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

  Alt 13. Feb 2009, 21:17
Genau dafür ist der Parameter Handled zuständig; wenn du eine Message komplett selbst behandeln willst, setze Handled := True, dann wird die Message von Windows nicht weiter behandelt. Sonst setze Handled := False nachdem du mit deiner Vorbehandlung fertig bist, damit wird die Message einfach an die Standardbehandlung weitergereicht.

Welche Messages aber im Einzelnen von Treeview wann generiert werden, weiss ich nicht; da wirst du am Besten mal so was wie WinSight o. ä. starten und nachsehen, welche Message du abfangen/modifizieren musst.
Hartmut
*
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#19

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

  Alt 14. Feb 2009, 16:28
Ich habe nochmals rum und num probiert, komme aber auf keinen grünen Zweig. So sieht jetzt meine Procedure aus :
Delphi-Quellcode:
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := False;
  if Msg.message = WM_KEYDOWN then
  begin
    if TV_1.IsEditing then
    begin
      if (Msg.wParam > 47) and (Msg.wParam < 91) then // oder irgendeine andere Taste deiner Wahl
      begin
        Handled := True;
        EditedTxt := EditedTxt + chr(Msg.wParam);
      end
      else
      begin
        Handled := False;
        if (Msg.wParam = VK_RETURN) then
          if EditedTxt <> TV_1.Selected.Text then
          begin
            tmpNode.Text := EditedTxt;
            EditedTxt := '';
          end
          else
            tmpNode.EditText;
      end;
      Handled := False;
    end;
  end;
end;
Wenn ich jetzt nichts ändere nach dem Erstellen und dann auf Enter drücke, legt er mir eine leere Node an. Wie kann ich das Programm dazu bringen, dass die Node im Editiermodus bleibt, trotz das ich die Enter-Taste betätigt habe ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#20

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

  Alt 18. Mär 2009, 22:02
Hallo zusammen,

ich habe es mittlerweile hinbekommen. Mein Sourcecode sieht jetzt so aus :
Delphi-Quellcode:
procedure TForm16.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  Handled := False;
  if Msg.message = WM_KEYDOWN then
  begin
    if (TV_1.IsEditing) and (TV_1.Tag = 0) then
    begin
      case Msg.wParam of
        VK_BACK, VK_SHIFT, VK_INSERT, VK_DELETE, 47..91, 96..109 :
        begin
          Handled := True;
          EditedTxt := EditedTxt + chr(Msg.wParam);
          NodeEdit := True;
        end;
      else
        if (Msg.wParam = VK_RETURN) and (Msg.lParam <> TVN_ITEMCHANGED) and (not NodeEdit) then
        begin
          ShowMessage('Bitte vergeben Sie einen Namen');
          NodeEdit := False;
          tmpNode.EditText;
        end;
      end;
      Handled := False;
    end;
  end;
end;
Jetzt habe ich dabei das Problem, dass ich mir mit dieser Funktion die Shortcuts für Copy&Paste abgeklemmt habe. Wie kann ich diese Shortcuts wieder aktivieren ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17:36 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