Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Tastaturabfrage in Timer1?


jackie05 - Mo 14.06.10 12:36
Titel: Tastaturabfrage in Timer1?
Hallo,
wie kann ich in Timer1 die Tastatur abfragen?

Ich habe das so versucht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Key: Word;
begin
  if (Key = VK_RETURN) then
  begin
    ShowMessage('Enter wurde gedrückt!');
  end;
end;


so funktioniert das irgendwie nicht.

Kann mir Vielleicht jemand helfen wie ich das Problem lösen kann?

Ich bedanke mich schonmal im Voraus.

MfG


Critter - Mo 14.06.10 12:40

Hi,

das Konzept mutet mir doch ein wenig merkwürdig an, was genau möchtest du damit erreichen?

critter


jackie05 - Mo 14.06.10 12:47

Ich möchte das bei jedem Tastendruck die Shifttaste aktiviert bzw. deaktiviert wird.

Ich möchte einfach ein Programm schreiben, mit dem ich einen Text mit Gross und Kleinbuchstaben schreiben kann.

z.B. DiEs IsT eIn TeSt!

Das Programm soll halt automatisch die Shifttaste bei jedem Tastatur eingabe aktivieren bzw. deaktivieren.

Tastatur Hook wäre mir für dieses kleine beispiel viel zu aufwändig.
Kann man das nicht irgendwie per Timer lösen?

Danke schonmal.

MfG


Tropby - Mo 14.06.10 12:51

Nimm doch einfach den OnKeyPress von einem Edit Feld oder nem Memo Feld. Da kannst du doch dann einfach das letzte Zeichen welches in dem Feld steht lower- bzw. uppercase machen und schon hast du einen Text mit klein und groß Buchstaben.


Tilo - Mo 14.06.10 12:55

Wollte das gleiche wie Tropby vorschlagen.

Aber eine Anmekerung habe ich noch dazu:
user profile iconjackie05 hat folgendes geschrieben Zum zitierten Posting springen:
Ich möchte einfach ein Programm schreiben, mit dem ich einen Text mit Gross und Kleinbuchstaben schreiben kann.

z.B. DiEs IsT eIn TeSt!

Das Programm soll halt automatisch die Shifttaste bei jedem Tastatur eingabe aktivieren bzw. deaktivieren.


Wäre die Ausgabe nicht eher "DiEs iSt eIn tEsT1"
Das Leerzeichen ist auch eine Tastatureingabe und aus "!" wird zumindest auf deutschen Tatsturlayouts "1".


jackie05 - Mo 14.06.10 12:56

Danke Dir.
Das Problem ist, das ich nicht direkt in meinem Programm Texte schreiben möchte, sondern auch außerhalb von meinem Delphi-Programm auf Fremde-Anwendungen.

Kann man das irgendwie per Timer lösen?

Edit: @Tilo die Leertaste würde ich dann ambesten ignorieren, ich möchte das dann nur von Aa-Zz machen. ;-)

Danke schonmal.

MfG


Hidden - Mo 14.06.10 12:58

Hi :)

Key kennst du vermutlich aus einer Methode wie OnKeyPress? Da ist es ja ein Parameter, und wird der Funktion so übergeben. Bei dir ist es einfach ein Variable. Und die muss ja zuerst mal initialisiert werden, sonst steht nichts drin. ;)

Was genau hast du vor, warum kannst du nicht die OnKeyPress-/OnKeyDown-Methode verwenden? Da bekommst du nämlich alles von Windows per Message mitgeliefert.

Ansonsten: GetAsciKeyState().

E: Mit einem Timer kannst du aber nur erreichen, dass alle n Millisekunden die Shift-Taste gedrückt wird - und du hast ja jetzt erstmal gefragt, wie du einen Tastendruck abfragen kannst.
Es ist zwar auch möglich, Tastendrücke zu simulieren(->Suche), ich würde aber lieber folgendes empfehlen: Lass den Nutzer seinen Text in ein Memo oder RichEdit schreiben, und bearbeite ihn auf Knopfdruck. Dadurch machst du keine Probleme, wenn die Anwendung minimiert ist.

lg,