![]() |
[strg] + [backspace] (TEdit)
HI und Guten Morgen. :P
(Delphi 6 Enterprise) Mein Problem: Wenn man in einem TEdit [strg] + [backspace] drückt kommt dort ja so ein nerviges Sonderzeichen anstelle der gewohnten Funktion. (Wie es z.B. auch in einem TRichedit gemacht wird.) Meine Lösung:
Delphi-Quellcode:
Und letzendlich meine Frage: :P
procedure TForm1.appmessage(var Msg: TMsg; var Handled: Boolean);
var i: integer; begin if msg.message = wm_keyup then if msg.wParam = 17 then strg_pressed := false; if msg.message = wm_KeyDown then begin if msg.wParam = 17 then strg_pressed := true; if (strg_pressed) and (msg.wparam = 8) then begin if Form1.Active then begin Input.Text := copy(Input.Text, 1, Backstepposition(Input.Text)); input.SelStart := length(input.Text); end else begin i := 0; while i < length(Whisperforms) do if Whisperforms[i].Formular.Active then begin Whisperforms[i].Formular.Inputw.Text := copy(Whisperforms[i].Formular.Inputw.Text, 1, Backstepposition(Whisperforms[i].Formular.Inputw.Text)); Whisperforms[i].Formular.Inputw.SelStart := length(Whisperforms[i].Formular.Inputw.Text); i := length(WhisperForms); end; end; Handled := true; end; end; end; function TForm1.BackstepPosition(StepText: string): integer; var i: integer; begin i := length(steptext) -1; result := 0; while i > -1 do begin if StepText[i] = ' ' then begin Result := i - 1; i := 0; end; dec(i); end; end; Da ich mit der Lösung nicht wirklich zu frieden bin, kennt ihr eine efektivere / bessere Variante? Voraussetzung ist es ein TEdit zu verwenden. mfg nic |
Re: [strg] + [backspace] (TEdit)
Abgesehen davon, daß Du das ziemlich sicher und einfach im
![]() Sherlock |
Re: [strg] + [backspace] (TEdit)
Wenn es so einfach im KeyDown gehen würde hätte ich es gemacht. ;)
Das dachte ich anfangs nämlich auch. Unterschätze mich bitte nicht. Aber vielleicht hast du ja wirklich eine Lösung die ich übersehen habe. Wenn ja gib mir doch Bitte mal ein Codebeispiel. Ich sag einfach mal das Stichwort: "OnKeyPress" |
Re: [strg] + [backspace] (TEdit)
Vielleicht hab ich zu simpel gedacht, aber wie wäre es so?
Delphi-Quellcode:
procedure TDeinForm.DeinEditKeyPress(Sender: TObject; var Key: Char);
begin if Key = #127 then Key := #8; end; |
Re: [strg] + [backspace] (TEdit)
:wall:
Ich glaub ich setze mich in die nächste Ecke und komm nie wieder da Raus.... Ich hatte für alle Keypress events die Werte in ein Richedit schreiben lassen auch für strg+backspace da kam aber nie die 127... weshalb weis ich atm auch noch nicht. trotz allem ist es ein wenig zu einfach gedacht. Ich will ja eben bei dieser Tastenkombination nicht ein Zeichen sondern ein Wort löschen dafür brauche ich dann doch noch das meiste meines aktuellen Quellcodes. Für aussenstehende wird er im Keypress allerdings einfacher zu verstehen sein. Davon gehe ich zumindest aus. Naja Danke auf jeden fall. ;) ( Wie kamst du auf die 127 ) ? |
Re: [strg] + [backspace] (TEdit)
Zitat:
[edit] Neue Idee:
Delphi-Quellcode:
[/edit]
procedure TDeinForm.DeinEditKeyPress(Sender: TObject; var Key: Char);
begin if Key = #127 then begin (Sender as TEdit).Perform(WM_KEYDOWN,VK_CONTROL,0); (Sender as TEdit).Perform(WM_KEYDOWN,VK_SHIFT,0); (Sender as TEdit).Perform(WM_KEYDOWN,VK_LEFT,0); (Sender as TEdit).Perform(WM_KEYDOWN,VK_DELETE,0); (Sender as TEdit).Perform(WM_KEYUP,VK_CONTROL,0); (Sender as TEdit).Perform(WM_KEYUP,VK_SHIFT,0); (Sender as TEdit).Perform(WM_KEYUP,VK_LEFT,0); (Sender as TEdit).Perform(WM_KEYUP,VK_DELETE,0); Key := #8; end; end; [edit2] OK, vergessen wir die Idee, da wird zuviel gelöscht [/edit2] |
Re: [strg] + [backspace] (TEdit)
Na also jetzt leg mal alles zusammen (also Deinen Code und Deddys, und meine Idee) Und korrigiere eine Kleinigkeit (in Deddys Code nicht mir #8 sondern mit #0 ersetzen). Und schon gibt es das gewünschte Ergebnis:
Delphi-Quellcode:
:D
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if (Key = VK_BACK) and (shift = [ssctrl] )then begin TEdit(Sender).Text := Copy(TEdit(Sender).Text, 1, BackstepPosition(TEdit(Sender).Text)); TEdit(Sender).SelStart := Length(TEdit(Sender).Text); end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #127 then Key := #0; end; Sieht einfach aus :cheers: Edit: alternativ kannst Du auch die Ersetzung durch #8 lassen, musst dann aber im KeyDown noch ein beliebiges Zeichen dem Edit-Text hinzufügen, das dann im KeyPress gelöscht wird ;) Sherlock |
Re: [strg] + [backspace] (TEdit)
Ich hab noch einmal nachgesehen, wie sich ein RichEdit verhält und bin nun hier angekommen:
Delphi-Quellcode:
Damit bleibt der Text hinter dem Cursor erhalten.
function TForm1.LastWordPos(const Src: string; Start: integer): integer;
var i: integer; begin Result := 0; if Length(Src) > 0 then begin if Start > Length(Src) then Start := Length(Src); i := Start; while (i > 0) and (Result < 1) do begin dec(i); if Src[i] = #32 then Result := i; end; end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var LastStart: integer; begin if Key = #127 then begin LastStart := (Sender as TEdit).SelStart; (Sender as TEdit).SelStart := LastWordPos((Sender as TEdit).Text,LastStart); (Sender as TEdit).SelLength := LastStart - (Sender as TEdit).SelStart; (Sender as TEdit).SelText := ''; Key := #0; end; end; |
Re: [strg] + [backspace] (TEdit)
Also eigentlich hat mir nur die #127 gefehlt. ^^
Das ist eh nur eine kleinigkeit gewesen. DeddyH wobei die Löschmethode von dir ein wenig besser ist, da das Ergebnis dann wie der gewohnte standart ist. ;) Diesen Weg wollte ich zuerst auch gehen aber... hatte eben die 127 nicht gefunden -.- Auf jeden fall Vielen Dank für die Hilfe. Denke hier ist alles geklärt. :P |
Re: [strg] + [backspace] (TEdit)
Nicht ganz alles geklärt...im Prinzip wäre es doch Schick das andere Verhalten mit der Strg-Taste noch einzubauen. Nämlich das Wortweise hinundherspringen per Strg+<-->. Aber wenn ich das richtig gelesen habe, dann lässt das TEdit die Pfeiltasten nicht zum OnKeyDown durch.
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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