Autor Beitrag
lukas.mika
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 27.05.05 19:13 
Moin Leute...

Ich beschäftige mich gerade mit einem Programm, welches verschiedene Tasteneingaben simuliert...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin
  taste:='VK_'+A[i];
  keybd_event(taste, 000);
  keybd_event(taste, 0, KEYEVENTF_KEYUP, 0,);
end;


Kann ja so nicht funktionieren, weil ich nen String vorliegen hab und Delphi was aus der Klasse Byte in Form von VK_A oder ähnlichem erwartet...

Jetzt hab ich nur das Problem: Wie mache ich Delphi klar, dass der String genau das gleiche darstellt? hab schon an so Sachen wie taste as byte und so gedacht... Funktioniert aber nicht. Gibt es nicht so nen Befehl wie StrToInt nur halt auf Bytes bezogen?

Wäre echt nett, wenn mir jemand helfen würde...

Soweit,

euer Lukas
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 27.05.05 20:03 
das sollte so gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin
  taste:=byte(A[i]);
  keybd_event(taste, 000);
  keybd_event(taste, 0, KEYEVENTF_KEYUP, 0,);
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
lukas.mika Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 27.05.05 20:45 
Titel: Ausprobiert, kein Ergebnis
Ähm, nein, da A[i] den Buchstaben der Taste darstellt. Der Byte-Befehl lautet aber "VK_B" oder ähnliches...

Das wäre ja also

taste:=byte('VK_'+A[i])

und da liefert mir Delphi die Fehlermeldung "Ungültige Typumwandlung"...

Funktioniert also immernoch nicht.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 27.05.05 20:48 
Is ja auch logisch, das das nicht geht... Denn VK_0 ist ein String. Die 'VK' stehen für Virtual Key und soweit ich mich erinnere (steht aber in der Hilfe) ist VK_x = ord (x)... Also VK_0 = Ord('0') = 48, VK_A = Ord('A') = 65 etc. Lies mal genau nach.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 27.05.05 20:51 
Titel: Re: Ausprobiert, kein Ergebnis
user profile iconlukas.mika hat folgendes geschrieben:
Ähm, nein, da A[i] den Buchstaben der Taste darstellt. Der Byte-Befehl lautet aber "VK_B" oder ähnliches...

Das wäre ja also

taste:=byte('VK_'+A[i])

und da liefert mir Delphi die Fehlermeldung "Ungültige Typumwandlung"...

Funktioniert also immernoch nicht.

probier den code (meinen) doch einfach aus, er funktioniert :roll:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
lukas.mika Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 27.05.05 20:54 
Titel: Erläuterung
genau da liegt ja mein Problem... das muss über VK_P laufen, da ich das anhand einer Schleife durchlaufen lasse. Ohne die Schleife funktioniert es, aber wer will schon für jedes neue Wort für jeden Buchstaben 2 neue Prozeduren schreiben? Erst recht, wenn es so ca. 20 sind?

user profile iconretnyg hat folgendes geschrieben:

probier den code (meinen) doch einfach aus, er funktioniert :roll:


Hab ich, funktioniert nicht mit der Typumwandlung...

Moderiert von user profile iconraziel: Beiträge zusammengefasst.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 27.05.05 21:02 
pass mal auf:
s:='aBc';
s[1] = 'a' oder 97 als byte, ist das selbe wie VK_A. VK_A ist nur ne konstante, die für 97 steht.
von s[1] auf eben diese 97 kommst du mit ord(s[1]) oder byte(s[1])

wenn taste also vom typ byte ist, funktioniert auch der code den ich vorher gepostet habe.
wenn du das aber als etwas anderes deklariert hast, ist der fehler vorprogrammiert.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 27.05.05 21:04 
Wenn a[i] = 'P' (also ein Character), dann ist Ord(a[i]) identisch mit dem Wert von VK_P. Schlage in der Hilfe nach 'Virtual Keys'. In der Hilfe zur Windows-SDK. Oder suche in Windows.pas nach VK_P oder probiere es einfach.

retnyg hat recht. Nur ist 'ord' die offizielle amtlich genehmigte Funktion, um Chars in Bytes umzuwandeln :roll:
lukas.mika Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 27.05.05 21:22 
Titel: Prog läuft
Das Problem lag jetzt daran, dass A[i] nen Array of string war. wollte nämlich, dass der Computer auch bei ; nen VK_RETURN schreibt und ähnliches.
Hab aber jetzt nen paar strukturelle Änderungen vorgenommen (A als array of Char) und jetzt läuft's...

Danke allen Beteiligten *fg*

Für alle, die das Ding auch noch ausprobieren wollen, weil sie z.B. gerade einen Chatbot programmieren:
im Befehl Ord(x) muss x immer ein upcase(Buchstabe) sein... Bei kleinen Buchstaben erhaltet ihr irgendwelchen Murks. Daran hab ich mir auch ne zeitlang echt die Zähne ausgebissen :wink:

Moderiert von user profile iconraziel: Beiträge zusammengefasst.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 29.05.05 21:53 
Und Kleinbuchstaben? Wie hast Du das hinbekommen?
Malo05
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 34

Windows XP Professional SP2
D5 Prof (SSL), D7 Pers, D2005 Pers
BeitragVerfasst: So 29.05.05 21:59 
user profile iconretnyg hat folgendes geschrieben:
pass mal auf:
s:='aBc';
s[1] = 'a' oder 97 als byte, ist das selbe wie VK_A. VK_A ist nur ne konstante, die für 97 steht.


Und welches VK_ ist 'A'?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 29.05.05 22:11 
gibts nicht. für nähere infos in windows.pas nachlesen.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Malo05
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 34

Windows XP Professional SP2
D5 Prof (SSL), D7 Pers, D2005 Pers
BeitragVerfasst: So 29.05.05 22:23 
user profile iconretnyg hat folgendes geschrieben:
gibts nicht. für nähere infos in windows.pas nachlesen.


Also wenn, dann ist es wohl anders herum. Laut Windows.pas:

Zitat:
{ VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) }


Also ist VK_A = 'A' und nicht 'a'.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 29.05.05 23:16 
ich weiss, es ging aber darum dem fragesteller das prinzip klarzumachen.
falls du klugscheissen willst, halte dich von mir fern :evil:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...