Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Stringvariable als Byte benutzen...


lukas.mika - Fr 27.05.05 19:13
Titel: Stringvariable als Byte benutzen...
Moin Leute...

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


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 - Fr 27.05.05 20:03
Titel: Re: Stringvariable als Byte benutzen...
das sollte so gehen:

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


lukas.mika - 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 - 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 - 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:


lukas.mika - 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 - 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.


alzaimar - 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 - 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 - So 29.05.05 21:53

Und Kleinbuchstaben? Wie hast Du das hinbekommen?


Malo05 - 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 - So 29.05.05 22:11

gibts nicht. für nähere infos in windows.pas nachlesen.


Malo05 - 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 - 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: