![]() |
Strg+Backspace
Hallo,
wie kann ich mit Strg und Backspace den Teilinhalt eines Edits löschen? Also es geht darum, dass fast jeder gute Editor mit Strg+Backspace und Strg+Delete den Inhalt des Edits bis zum nächsten "Stopzeichen" (i.d.R. Leertaste... Unter Delphi auch Klammern u.ä.) löscht. Nun für Strg+Del gehtdas schon mal. Aber für Strg+BS bräuchte ich noch eine Lösung. Es handelt sich um ein Passwortfeld, also wird alles gelöscht:
Delphi-Quellcode:
Also an sich funktioniert das schon. Das Problem jetzt ist nur, dass danach noch ein Kästchen in der Selektion eingefügt wird.
procedure TFPasswort.EPasswordKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var Pass : string; begin // [Ctrl] + [Backspace] = Alles löschen if ([ssCtrl] = Shift) and (Key = VK_BACK) then begin Pass := EPassword.Text; Delete(Pass, 1, EPassword.SelStart); EPassword.Text := Pass; Key := 0; end; end; So sieht es vorher aus (| = Cursor): Zitat:
Zitat:
xZise |
Re: Strg+Backspace
Zitat:
|
Re: Strg+Backspace
Ein nicht darstellbares Zeichen, im Zeichensatz als Rechteck hinterlegt.
Ich denke (er hat ja D2009), das hier Delete ein Zeichen im UnicodeString Pass "halbiert", weshalb dann so ein Zeichen übrig bleibt. |
Re: Strg+Backspace
Hallo,
das ist das Zeichen 127 = DEL. Das hat auch nichts mit Unicode zu tun, es wird auch bei älteren Delphi-Versionen eingefügt. = > Zeichen im Edit selektieren und durch SelText := '' löschen, Key = 0; hilft da nicht, denn zu dem Zeitpunkt ist das Zeichen schon im Edit eingetragen. Nimm das Ereignis OnKeyUp, in OnKeyDown funktioniert das nicht:
Delphi-Quellcode:
procedure TFPasswort.EPasswordKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState); var Pass : string; begin if ([ssCtrl] = Shift) and (Key = VK_BACK) then begin EPassword.SelLength := -1; //Zeichen vor SelStart markieren EPassword.SelText := ''; //DEL löschen Pass := EPassword.Text; Delete(Pass, 1, EPassword.SelStart); EPassword.Text := Pass; //Key := 0; kannst Du Dir sparen end; end; |
Re: Strg+Backspace
Nun habe ich da eine Frage: OnKeyDown dient doch gerade dazu "Fehleingaben" abzufangen?
MfG xZise |
Re: Strg+Backspace
Hallo,
ist ja keine "Fehleingabe" :wink: und dazu noch eine Tastenkombination. Die Tastenkombination erzeugt das Zeichen DEL. Derweil ich das schreibe ... da müsste doch ... :gruebel: In OnKeyPress geht es noch einfacher, dort kann man DEL direkt abfangen:
Delphi-Quellcode:
if Key = #127 then
begin Key := #0; Edit.Text := Copy(Edit.Text,Edit.SelStart+1,MAXINT); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz