| Autor |
Beitrag |
motion
      
Beiträge: 295
XP, Linux
D7 Prof
|
Verfasst: Di 16.12.08 22:46
Ich einer eigenen Ableitung der TEDIT Kompontente möchte ich Ctrl+Tasten-Funktionen nachbilden.
Standardmäßig arbeiten diese Ctrl-Funktionen immer wortweise.
Ctrl+Cursor left/right funktioniert ja schon direkt mit TEDIT.
Aber Ctrl+Backspace und Ctrl+Delete haut nicht hin.
Ctrl+BackSpace soll das Wort links des Cursors löschen. Tatsächlich wird nur ein senkrechter Strich in den Text eingefügt (Code:127). Das kriege ich auch nicht unterdrückt, selbst wenn ich im Keydown und Keypressed dieses filtere.
Ctrl+Delete soll das Wort recht des Cursors löschen. Tatsächlich wird aber der ganze Rest des Textes gelöscht.
Hat jemand ein funktionierendes Code-Fragment, welches die gewünschten Funktionen realisiert?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 16.12.08 23:02
Beispiel: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TfrmMain.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var tmp: String; begin if (Key = VK_DELETE) and (ssCtrl in Shift) then begin tmp := Edit1.Text; if PosEx(' ', Edit1.Text, Edit1.SelStart + 1) > 0 then Delete(tmp, Edit1.SelStart + 1, PosEx(' ', Edit1.Text, Edit1.SelStart + 1) - Edit1.SelStart) else tmp := Copy(tmp, 1, Edit1.SelStart); Edit1.Text := tmp; Key := 0; end; end; | Das müsste halt noch etwas verfeinert werden, es funktioniert schon mal denke ich, akzeptiert aber nur mit Leerzeichen als Trennzeichen.
|
|
motion 
      
Beiträge: 295
XP, Linux
D7 Prof
|
Verfasst: Di 16.12.08 23:36
Schon sehr gut!
Einige Kleinigkeiten habe ich noch nachgebessert (Cursor-Position erhalten und das inherited bei nicht betroffenen Tastencodes).
Hier mein aktuelles Code-Snippet basierend auf Deinem, ERWEITERT um die Ctrl-Backspace Funktion. Abgesehen davon, das die Löschfunktion momentan noch die selbe vom Ctrl-Del ist (das muss ich noch ändern), sieht man hier das Problem mit dem eingefügten Sonderzeichen.
Eine Idee wie das man unterdrücken kann?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TTest5.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var tmp:string; var save_SelStart:Word; begin if (Key = VK_DELETE) and (ssCtrl in Shift) then begin save_SelStart:=edit1.SelStart; edit1.SelLength:=0; tmp := Edit1.Text; if PosEx(' ', Edit1.Text, Edit1.SelStart + 1) > 0 then Delete(tmp, Edit1.SelStart + 1, PosEx(' ', Edit1.Text, Edit1.SelStart + 1) - Edit1.SelStart) else tmp := Copy(tmp, 1, Edit1.SelStart); Edit1.Text := tmp; Key := 0; edit1.Selstart:=save_Selstart; end else if (Key = VK_back) and (ssCtrl in Shift) then begin save_SelStart:=edit1.SelStart; edit1.SelLength:=0; tmp := Edit1.Text; if PosEx(' ', Edit1.Text, Edit1.SelStart + 1) > 0 then Delete(tmp, Edit1.SelStart + 1, PosEx(' ', Edit1.Text, Edit1.SelStart + 1) - Edit1.SelStart) else tmp := Copy(tmp, 1, Edit1.SelStart); Edit1.Text := tmp; Key := 0; edit1.Selstart:=save_Selstart; end else inherited; end; |
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 16.12.08 23:48
|
|
motion 
      
Beiträge: 295
XP, Linux
D7 Prof
|
Verfasst: Di 16.12.08 23:51
Genau! Die einfachste Lösung ist die Beste!
Ich habe immer auf #8 gefiltert und das klappte natürlich nicht.
Okay .. dann habe ich jetzt alles und kann die Komponenten anpassen.
Danke für die schnelle und kompetente Hilfe.
|
|
|