Autor Beitrag
theevilworm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: So 24.01.10 21:59 
Hallo,

ich habe mir jetzt zu ein paar Themen, die mich interessiert haben, ziemlich viel durchgelesen, hier in der Suche und auch im Delphitreff.
Hauptsächlich habe ich mir Sachen, die mit dem Cursor zu tun haben, und etwas zu Hotkeys durchgelesen. Leider bin ich da auf zwei Sachen gestoßen, die ich nicht ganz verstehe. Ich hab mir zwar herleiten können, wie man die Funktionen benutzt, doch nicht ganz, was sie eigentlich machen:

Es geht mir um GetASyncKeystate und Clipcursor(@Rechteck).

Zum ersten: Überall, wo dieser Befehl verwendet wurde, wurde abgefragt, ob er etwas kleiner als 0 zurückliefert.
ausblenden Delphi-Quelltext
1:
If getasynckeystate (VK_SPACE) < 0 Then showmessage ('Leertaste');					


Was genau bewirkt GetASyncKeystate (Ich weiß, was man damit anstellt, aber was genau macht die Funktion)? Warum kommt eine Zahl raus? Was fragt das ab?

Zum zweiten:
Da habe ich mir etwas zum Einfangen des Cursor in einem Rechteckt durchgelesen, und bin auf eine Beispiel mit Clipcursor gestoßen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var Rechteck:TRect;
begin
Rechteck:=Rect(0,0,200,200);
Clipcursor(@Rechteck);
end;


Warum muss ich da erst eine Variable des Typs / der Klasse (das hab ich auch nicht ganz kapiert) TRect erstellen, da mittels einer Funktion meine Werte reinpumpen, und diese dann in Clipcursor() verwenden, und auch noch mit @ davor? Was bringt das @, und warum kann ich nicht einfach schreiben:
ausblenden Delphi-Quelltext
1:
clipcursor(0,0,200,200);					


Wäre superklasse, wenn mir jemand das noobfreundlich erklären könnte! Und entschuldigt die zwei Fragen pro Thread, käme mir dämlich, in zwei Threads um Erkörung einer Funktion zu bitten.
Achja: Ich habe natürlich die Suche und auch die Delphihilfe konsultiert, nirgendwo eine Erklärung gefunden!


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 24.01.2010 um 22:35
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: So 24.01.10 22:21 
Aaaalso.
Hier steht folgendes:
Zitat:

If the most significant bit is set, the key is down.


Das most significant Bit (MSB) ist also praktisch das Bit ganz links (zumindest meistens).
Beim Datentyp integer (und anderen Vorzeichenbehafteten Datentypen, also alles was negative Werte darstellen kann) ist dieses bit für das Vorzeichen zuständig.
Das heist, wenn das bit gesetzt ist, ist die Zahl negativ.
unabhängig vom Rest der Zahl.

@Clipcursor:

Clipcursor erwartet die Daten gebündelt in einem Record.
Die 4 Zahlen gehören ja schliesslich zusammen, warum also einzeln übergeben?
der Record ist in etwa so definiert:
ausblenden Delphi-Quelltext
1:
2:
3:
type TRect = record
  top, left, bottom, right: integer
end;

(Ich weiss grade nicht, ob es wirklich integer ist, und im Original gibs da auch noch was mit Varianten Records und Topleft und Bottomright)

Das
ausblenden Delphi-Quelltext
1:
Rect(...)					

ist lediglig eine explizite Typumwandlung. Du könntest auch die Werte für Top, left usw. einzeln zuweisen.
Warum brauchst du überhaupt ne Variable?
Weil clipcursor (vermutlich wegen kompatibilität zu C/C++) nicht den Record, sondern einen Pointer auf den Record erwartet.
Darum auch das @: Damit wird die Adresse übergeben. Du könntest statt dem @ auch
ausblenden Delphi-Quelltext
1:
Clipcursor(addr(Rechteck));					

schreiben.
mfg Boldar

PS: an die anderen hier: wenn ich groben Unfug geschrieben habe, seht es mir bitte nach und korrigiert mich.
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: So 24.01.10 22:23 
Schau mal hier, dort kannst du schon vieles nachschlagen.
www.delphibasics.co.uk/index.html
Edit: falschen Link gepostet sorry
theevilworm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: So 24.01.10 22:38 
Danke euch für die Beiträge!
Die Erklärung war gut, das mit Clipcursor habe ich jetzt verstanden!

Was mir noch probleme macht, ist getasynckeystate: Woher weiß ich, welche Taste welchen Code hat? Bisher kannte ich nur aus dem Beispiel VK_SPACE. Ich habe mal in die Delphihilfe unter Delphi 7 geschaut, und einen Artikel namens "Tastencodes" gefunden. Hier ist eine ellenlange Liste mit fast allen Tasten aufgelistet, nur das Komische: Kein beginnt mit VK_, sondern alle mit Key_ !

Was ist das der Unterschied? Ich kriege gar nichts zum laufen:

ausblenden Delphi-Quelltext
1:
2:
If getasynckeystate(VK_R) then Showmessage ('Succes!');
// Unbekannter Bezeichner VK_R



ausblenden Delphi-Quelltext
1:
2:
If getasynckeystate(Key_R) then Showmessage ('Succes!');
// Unbekannter Bezeichner Key_R



Was verstehe ich da falsch? Key_ ist doch sogar in der Delphihilfe, warum kennt er das nicht? Und wo kriege ich eine Liste mit den ganzen VK_ Codes?
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 24.01.10 22:45 
Hi, VK_Space oder getasynckeystate in DH eingeben und schon sind alle da!(Virtuelle Tastencodes)

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
theevilworm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: So 24.01.10 22:54 
Wow, vielen Dank!
Habe bisher nur unter "Index" gesucht, gar nicht unter "Suchen"! Da kann ich mich ja lange bemühen.

Dennoch ein paar Fragen dazu:

1. Was bringt dann die Liste in der DH mit den ganzen Key_ Tasten?
2. Wie frage ich einen einfachen Buchstaben mit GetASyncKeystate ab? VK_A oder so gibts ja nicht!
3. Was ist der Unterschied zwischen GetASynchKeystate und GetKeyState (GetKeyState hab ich in besagter Liste gelesen!)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 24.01.10 23:37 
Moin!

user profile icontheevilworm hat folgendes geschrieben Zum zitierten Posting springen:
Und entschuldigt die zwei Fragen pro Thread, käme mir dämlich, in zwei Threads um Erkörung einer Funktion zu bitten.
Das solltest du das nächste mal aber tun. Hätte ich den Thread eher gesehen, wäre er schon längst geschlossen. :|

Hier geht es bitte nur mit Bezug auf GetAsyncKeyState weiter! :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 25.01.10 00:18 
zu GetKeyState sagt DH
Zitat:

Beschreibung

GetKeyState ist die als protected deklarierte Lesemethode der Eigenschaft KeyState. Sie gibt den aktuellen Status der Tasten Umschalt, Strg und Alt zurück.


Zu GetAsyncKeyState im Prinzip das gleiche, nur das die Anwendung weiter ausgeführt wird!
Du kannst also keine Buchstaben oder Zahlen damit abfragen.

Lies bitte auch noch mal die DH mit den Tastencodes (key_) durch und vergleiche mit Virtuelle Tastencodes.
dann siehst du den Unterschied.

Ansonsten schau Dir bitte mal onKeyPress und onKeyDown an.
Dort kannst du dann alles was die Tastatur hergibt abfragen. :wink:

allerdings hatt @Boldar Dir den perfekten Link gegeben für GetAsyncKeyState

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!