Entwickler-Ecke

Windows API - simulierte tastatureingabe in memofeld


rhodan - Sa 26.06.10 15:48
Titel: simulierte tastatureingabe in memofeld
hey!

ich habe in meinem fenster ein memofeld, einen timer und einen button. auf knopfdruck wird der timer gestartet und liest den text aus dem memofeld aus der eingetragen wurde und schreibt ihn per simulierter tastatureingabe neu:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: integer;
    c: Char;
begin
if length(memo1.Text)> 0 then
  begin
    for i:= 0 to length(memo1.Text) do
    begin
    c:= memo1.text[i];
      Case c of
        '1'..'9' :
          begin
          keybd_event(ord(c),0,0,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        'A'..'Z':
          begin
          keybd_event(vk_Shift,0,0,0);
          keybd_event(ord(c),0,0,0);
          keybd_event(vk_Shift,0,keyeventf_keyup,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        'a'..'z':
          begin
          c:= upcase(c);
          keybd_event(ord(c),0,0,0);
          keybd_event(ord(c),0,keyeventf_keyup,0);
          end;
        else
        begin
        keybd_event(ord(c),0,0,0);
        keybd_event(ord(c),0,keyeventf_keyup,0);

        timer1.Enabled:=false;
        end;
      end;
            end;
                  end;
end;

end.

das funktioniert auch sehr gut, doch er erkennst keine sonderzeichen wie ? . ! ,
punkte und kommas und fragezeichen werden einfach übergangen bzw auch Ä wird zu 00...wie muss ich den code erweitern damit er punkt und komma bzw ö und ä richtig aus dem memofeld liest?

vielen dank!

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 27.06.2010 um 00:06


jaenicke - So 27.06.10 09:03

Du vergisst die Zeichen mit VkKeyScan [http://msdn.microsoft.com/en-us/library/ms646329.aspx] in den entsprechenden virtuellen Tastencode zu übersetzen. ;-)

Abgesehen davon wäre es sinnvoller den Status der Shift-Taste aus dem Tastencode zu ermitteln statt eine manuelle Unterscheidung zu machen.

// EDIT:
Hier ein fertiger Code dazu:
http://www.delphipraxis.net/71318-keybd_event-und-sonderzeichen.html