AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Strg+Backspace

Ein Thema von xZise · begonnen am 6. Jul 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Strg+Backspace

  Alt 6. Jul 2009, 21:09
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Strg+Backspace

  Alt 7. Jul 2009, 05:42
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"?
Thomas
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Strg+Backspace

  Alt 7. Jul 2009, 07:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: Strg+Backspace

  Alt 7. Jul 2009, 09:41
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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Strg+Backspace

  Alt 7. Jul 2009, 13:35
Nun habe ich da eine Frage: OnKeyDown dient doch gerade dazu "Fehleingaben" abzufangen?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Strg+Backspace

  Alt 7. Jul 2009, 15:13
Hallo,

ist ja keine "Fehleingabe" und dazu noch eine Tastenkombination.

Die Tastenkombination erzeugt das Zeichen DEL.

Derweil ich das schreibe ... da müsste doch ...


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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort


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