Entwickler-Ecke

Internet / Netzwerk - Tastedruck übers Netzwerk verschicken


arcitC|Crash - Sa 06.08.05 23:09
Titel: Tastedruck übers Netzwerk verschicken
Also ich hab beim Client das Ereignis TForm.OnKeyPress
Der Code sieht so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  Client.Socket.SendText(key);
  Label1.caption := key;
end;


Beim Server soll dann der Tastendruck simuliert werden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var rec : string;
begin
  rec := Socket.ReceiveText;
  keybd_event(ord(STRtoINT(rec)),ord(STRtoINT(rec)),0,0);
  keybd_event(ord(STRtoINT(rec)),ord(STRtoINT(rec)),KEYEVENTF_KEYUP,0);
end;


So, beim Compilen gibt es auch keine Probleme, aber wenn ich dann beim Client eine Taste drück, bekomme ich einen Fehler, dass die jeweilige Taste kein gültiger Integerwert ist...
Wo ist der Fehler?

Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt.


DarkHunter - Sa 06.08.05 23:29
Titel: Re: Tastedruck übers Netzwerk verschicken
user profile iconarcitC|Crash hat folgendes geschrieben:

Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  Client.Socket.SendText(key);
  Label1.caption := key;
end;



schau mal genau hin: key:char --> Das kann gar kein Integerwert sein
musst du wahrscheinlich umwandeln


arcitC|Crash - Sa 06.08.05 23:34

Ja aber wie wandel ich das um?
Beim Server hab ich ja doch STRtoINT benutzt.


Harry M. - So 07.08.05 05:30

Mit Ord bzw Chr


ScorpionKing - So 07.08.05 08:45

Bei chr wird als Parameter eine Zahl angegeben, die dann in einen ASCII-Letter vertauscht wird, bei Ord ein Buchstabe!


arcitC|Crash - So 07.08.05 12:39

Ich weiß ehrlich gesagt auch gar nicht, was ich umwandeln soll. Dieser Befehl keybd_event, was für einen Wert will er denn haben? Word? Char? String? Integer?

Delphi-Quelltext
1:
2:
3:
4:
var rec : string;
begin
  rec := Socket.ReceiveText;
  keybd_event(ord(rec),ord(rec),0,0);


In Word umwandeln geht nicht, da kommt immer "[Fehler] Unit2.pas(32): Inkompatible Typen"


Delphi-Quelltext
1:
2:
3:
4:
5:
var rec : string;
begin
  rec := Socket.ReceiveText;
  keybd_event(STRtoINT((rec)),STRtoINT((rec)),0,0);
  keybd_event(ord(STRtoINT(rec)),ord(STRtoINT(rec)),KEYEVENTF_KEYUP,0);


So geht es zwar, aber wenn ich dann eine Taste drücke, sagt er mir, das das kein gültiger Integerwert war.

Also ich gehe mal davon aus, das ich den erhaltenen String entweder in Word (ord) oder in Char (chr) umwandeln muss. Stimmt, klingt fast logisch^^
Aber mit welchem Befehl? StrtoCHR gibt es nicht und STRtoORD auch nicht...

Edit: Ach nee, Ord geht ja auch nicht, das hatte ich ja oben schon mit (ord(rec))...
Also muss ich das in Char umwandeln...aber wie?

Moderiert von user profile iconmatze: Code- durch Delphi-Tags ersetzt.


tigger - So 14.08.05 15:30


Delphi-Quelltext
1:
2:
3:
4:
var rec : string;
begin
  rec := Socket.ReceiveText;
  keybd_event(ord(rec),ord(rec),0,0);


es müsste gehen, wenn du rec den typ char gibst

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


arcitC|Crash - So 14.08.05 16:05

nee hier steht nichts------------


tigger - Di 16.08.05 10:36

ups, das war falsch, du musst ord ein char übergeben, nicht einen string