![]() |
Mausrad simulieren
nach oben klappt so wie es soll aber nach unten versuche ich mit
Delphi-Quellcode:
was aber zu
mouse_event(MOUSEEVENTF_WHEEL,0,0,-120,0);
Zitat:
|
Re: Mausrad simulieren
Mahlzeit,
schau Dir im ![]() Laut der Beschreibung sind dort negaive Werte erlaubt. Aber ob -120 erlaubt ist? Grüße Klaus |
Re: Mausrad simulieren
auch -1 führt zum selben ergebnis
|
Re: Mausrad simulieren
Moin, Moin,
hatte das bei MSDn auch gelesen. Seltsam ist aber, dass dwData als DWord deklariert ist - das passt nun eigentlich gar nicht zu der Aussage, dass man hier auch negative Werte eingeben kann. Kann man vielleicht mit DWord(-129) arbeiten?? Gruß Ralph // jooo, das wird übersetzt - funktioniert es dann auch??????????? |
Re: Mausrad simulieren
So geht das Danke
Delphi-Quellcode:
mouse_event(MOUSEEVENTF_WHEEL,0,0,DWord(-120),0);
|
Re: Mausrad simulieren
Prima!!!
|
Re: Mausrad simulieren
Da wär ich ehrlich gesagt nie drauf gekommen (ist aber auch ausgesprochen dämlich implementiert).
|
Re: Mausrad simulieren
Zitat:
Aber wenn's so funktioniert... :? |
Re: Mausrad simulieren
Moin Dunkel,
das ist eine berechtigte Frage die ich mir auch schon gestellt habe: Wandle mal -120 in eine DWord-Variable und zeige das Ergebnis an. Bei mir bleibt es bei -120 !!??. Bestimmt gibt es hier im Forum einen Wissenden, der das erklären kann - das würde mich auch mal interessieren!! Gruß Ralph |
Re: Mausrad simulieren
Bei mir bleibt das keineswegs auf -120, sondern wird durch Überlauf (eigentlich ja eher "Unterlauf") zu 4294967176.
Kleiner Test:
Delphi-Quellcode:
ShowMessage(inttostr(DWord(-120)) + #13#10 + inttostr(MAXDWORD - 119));
|
Re: Mausrad simulieren
Nun, wenn ich das so wandele:
Delphi-Quellcode:
kommt kein -120 heraus.
edit1.Text:= IntToStr(dword(-120));
Heißt das Minus denn nicht, daß das highbit auf 1 ist. Wenn man dann einen signed Wert hat wird das highbit als Minus interpretiert und man hat eine negative Zahl. Grüße Klaus |
Re: Mausrad simulieren
Ja eben, binär sind beide vollkommen gleich, erst durch das Casten in signed/unsigned ändern sie ggf. ihren Wert.
|
Re: Mausrad simulieren
Ja richtig!
Genau das hätte ich auch erwartet: Aber mit folgenden Code bleibt es bei -120 ...
Delphi-Quellcode:
Hihihihi - die Information, dass es sich um eine negative Zahl handelt, bleibt also erhalten (muss ja auch, sonst würd's mit dem Mausrad ja nicht funktionieren
procedure TfoTest9.buWhatsThisClick(Sender:TObject);
var t : Dword; begin t:=dword(-120); showmessage(inttostr(integer(t))); end; |
Re: Mausrad simulieren
Zitat:
|
Re: Mausrad simulieren
Aha. Also gibt es so gesehen (im Speicher) keinen Unterschied zwischen (ganzzahligen) signed/unsigned Datentypen, bis auf dass bei signed-Datentypen das High-Bit interpretiert wird, bei unsigned-Datentypen dieses ignoriert wird? Interessant.
|
Re: Mausrad simulieren
Zitat:
negative Zahlen werden also als $FFFFFFFF-abs(wert+1) dargestellt folglich ist nicht 1 bit für die Kennzeichnung negativer Werte zuständig. Es wären eher die ersten 16 bit (bei 32bit-Integer-Werten), sind alle 0 ist die Zahl positiv. //edit kleines Codebeispiel zum Testen:
Delphi-Quellcode:
Gruß Frank
for i:=-10 to 10 do
begin memo1.lines.Add(format('%.2d: %.8x',[i,i])); end; |
Re: Mausrad simulieren
Wenn bei 32-Bit-Werten die ersten 16 nur für das Vorzeichen verwendet würden, wäre das aber extrem ineffektiv.
|
Re: Mausrad simulieren
Zitat:
Wobei es durchaus sein kann dass man das höchstwertige bit als indikator auslesen kann, da ab diesen Wert die Negativen werte losgehen müssten. ich hab das jetzt nicht bis zuende getestet ;) jedefalls ists nicht so, dass man nur das höchstwertige bit setzen muss, um aus einer positiven Zahl eine negative machen kann. ich vermute mal das die zahlen in der reihenfolge so im speicher liegen: 0,1..2147483647,-2147483648..-1 ($0-$FFFFFFFF) da fällt mir grade ein Fehler in meiner Delphi-hilfe (3) auf. Integer -2147483648..2147483647 32 Bit einschließlich Vorzeichen Cardinal 0..2147483647 32 Bit, besitzt kein Vorzeichen eigentlich müsste der Wertebereich von cardinal doppelt so groß sein...ist ja bei 16bit auch so: Smallint -32768..32767 16 Bit einschließlich Vorzeichen Word 0..65535 16 Bit, besitzt kein Vorzeichen Gruß Frank |
Re: Mausrad simulieren
Du brauchst nur das erste Bit zur Vorzeichenbestimmung. $80000000 ist negativ, $7FFFFFFF positiv, das ist die Grenze der Vorzeichen und da änderst sich auch der Wert des höchstwertigen Bits.
Diese Darstellung hat übrigens zur Folge, dass die Addition von signed und unsigned Werten genau gleich verläuft. Nur die Interpretation ist anders. |
Re: Mausrad simulieren
Versuch mal Folgendes:
Delphi-Quellcode:
var Zahl: integer;
begin Zahl := MAXINT; //011111111 11111111 11111111 11111111 ShowMessage(inttostr(Zahl)); Zahl := Zahl xor (1 shl 31); //11111111 11111111 11111111 11111111 ShowMessage(inttostr(Zahl)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz