Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Strg+Backspace (https://www.delphipraxis.net/136717-strg-backspace.html)

xZise 6. Jul 2009 20:09


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:
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;
Also an sich funktioniert das schon. Das Problem jetzt ist nur, dass danach noch ein Kästchen in der Selektion eingefügt wird.
So sieht es vorher aus (| = Cursor):
Zitat:

Ein |Passwort
Dann einmal Ctrl+BS:
Zitat:

|Passwort
MfG
xZise

toms 7. Jul 2009 04:42

Re: Strg+Backspace
 
Zitat:

Zitat von xZise
Das Problem jetzt ist nur, dass danach noch ein Kästchen in der Selektion eingefügt wird.

Was meinst du mit "Kästchen"?

Satty67 7. Jul 2009 06:48

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.

Lannes 7. Jul 2009 08:41

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;

xZise 7. Jul 2009 12:35

Re: Strg+Backspace
 
Nun habe ich da eine Frage: OnKeyDown dient doch gerade dazu "Fehleingaben" abzufangen?

MfG
xZise

Lannes 7. Jul 2009 14:13

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 21:21 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