AGB  ·  Datenschutz  ·  Impressum  







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

[strg] + [backspace] (TEdit)

Ein Thema von thepaine91 · begonnen am 8. Dez 2009 · letzter Beitrag vom 8. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
thepaine91

Registriert seit: 29. Okt 2009
Ort: Neckarsulm
36 Beiträge
 
Delphi 6 Enterprise
 
#1

[strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 08:35
HI und Guten Morgen.

(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:
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;
Und letzendlich meine Frage:

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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 09:45
Abgesehen davon, daß Du das ziemlich sicher und einfach im Delphi-Referenz durchsuchenOnKeyDown des TEdits machen kannst, was stört Dich an Deiner irgendwie verwirrend komplexen Lösung?

Sherlock
Oliver
  Mit Zitat antworten Zitat
thepaine91

Registriert seit: 29. Okt 2009
Ort: Neckarsulm
36 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 09:52
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"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 10:14
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
thepaine91

Registriert seit: 29. Okt 2009
Ort: Neckarsulm
36 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 10:43

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 ) ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 10:49
Zitat von thepaine91:
( Wie kamst du auf die 127 ) ?
Nachdem ich bei STRG-BACKSPACE nie beim Breakpoint (if Key = #8) ankam, hab ich mir mal den Keywert in einem Label ausgeben lassen

[edit] Neue Idee:
Delphi-Quellcode:
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;
[/edit]

[edit2] OK, vergessen wir die Idee, da wird zuviel gelöscht [/edit2]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 10:57
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:
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

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
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 12:04
Ich hab noch einmal nachgesehen, wie sich ein RichEdit verhält und bin nun hier angekommen:
Delphi-Quellcode:
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;
Damit bleibt der Text hinter dem Cursor erhalten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
thepaine91

Registriert seit: 29. Okt 2009
Ort: Neckarsulm
36 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 13:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: [strg] + [backspace] (TEdit)

  Alt 8. Dez 2009, 14:29
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
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:03 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