Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Key abfrage (https://www.delphipraxis.net/121872-key-abfrage.html)

EWeiss 6. Okt 2008 12:27

Re: Key abfrage
 
Zitat:

Mein Code bestand genau aus der hier geposteten Zeile, die Funktion habe ich ansonsten bisher noch nicht benötigt.
Und da war es auch korrekt
Da ich nicht abfragen will ob der status schon mal gedrückt war sondern nur welcher aktuell ist.
Aber trotz alledem funktioniert es nicht.

Unter Basic hab ich kein problem mit dem oben geposteten code schnipsel

gruss Emil

Roachford 6. Okt 2008 15:04

Re: Key abfrage
 
Zitat:

Zitat von EWeiss
Unter Basic hab ich kein problem mit dem oben geposteten code schnipsel

Der Code entspricht dem folgenden:

Delphi-Quellcode:
if GetAsyncKeyState(33) and 128 = 128 then
Alternativ:

Delphi-Quellcode:
if GetAsyncKeyState(33) < 0 then

EWeiss 6. Okt 2008 15:45

Re: Key abfrage
 
Zitat:

Zitat von Roachford
Zitat:

Zitat von EWeiss
Unter Basic hab ich kein problem mit dem oben geposteten code schnipsel

Der Code entspricht dem folgenden:

Delphi-Quellcode:
if GetAsyncKeyState(33) and 128 = 128 then
Alternativ:

Delphi-Quellcode:
if GetAsyncKeyState(33) < 0 then

Ich habe aber ein Problem damit gut ist ein Sample von dir. ;)
Warum muss ich hier eine IF abfrage stellen ich übergebe doch den wert

Delphi-Quellcode:
function IsKeyDown(CheckKey: Integer): SmallInt;
begin
    result := (GetAsyncKeyState(CheckKey) and 15);

end;

function IsLButtonDown: Integer;
begin
    Result := IsKeyDown(1);

end;
IsLButtonDown übergibt den wert 1 und ich erwarte von meiner Funktion die rückgabe wie der status ist
also in dem Fall

Delphi-Quellcode:
result := (GetAsyncKeyState(1) and 15);
Wie sollte es deiner meinung nach funktionieren ?
Delphi-Quellcode:
result := (GetAsyncKeyState(1) and 128); ?
Ich brauche doch die IF abfrage nicht..
Oder wir reden aneinander vorbei ;)
Danke für deine Hilfe .. habs vergessen

gruss Emil

Roachford 6. Okt 2008 18:09

Re: Key abfrage
 
Du hast alle deine Funktionen mit einem SmallInt bzw. Integer versehen.

Delphi-Quellcode:
function IsLButtonDown: Integer;
begin
  Result := IsKeyDown(1);
end;
Solche Funktionen sind überhaupt nicht aussagekräftig und macht es einem um so schwerer dir zu helfen. Mit was wird denn das Result nach dem Aufruf verglichen? Mit 14? 55? 42? oder gleich mit Random(MaxInt)?

Was willst du denn nun eigentlich haben? Doch eigentlich ein boolsches Ergebnis, oder nicht? Wenn ja, dann einfach die IF Abfrage komplett auf eine einzeilige Evaluierung umstellen, da die IF Abfrage einen boolschen Ausdruck braucht, ist das einfach gemacht:

Delphi-Quellcode:
function IsLButtonDown: boolean;
begin
  result := ( GetAsyncKeyState(VK_LBUTTON) and 128 ) <> 0;
end;
Alternativen:
Delphi-Quellcode:
function IsLButtonDown: boolean;
begin
  result := ( GetAsyncKeyState(VK_LBUTTON) and 128 ) = 128;
end;
Delphi-Quellcode:
function IsLButtonDown: boolean;
begin
  result := GetAsyncKeyState(VK_LBUTTON) < 0;
end;

Hawkeye219 6. Okt 2008 18:34

Re: Key abfrage
 
Hallo,

nur am Rande bemerkt: 1 shl 15 <> 128

Gruß Hawkeye

EWeiss 6. Okt 2008 18:49

Re: Key abfrage
 
@Roachford
Zitat:

Solche Funktionen sind überhaupt nicht aussagekräftig und macht es einem um so schwerer dir zu helfen. Mit was wird denn das Result nach dem Aufruf verglichen? Mit 14? 55? 42? oder gleich mit Random(MaxInt)?
Was ist da nicht aussagekräftig ?
Delphi-Quellcode:
function IsKeyDown(CheckKey: Integer): SmallInt;
begin
    result := (GetAsyncKeyState(CheckKey) and 15);

end;

function IsLButtonDown: Integer;
begin
    Result := IsKeyDown(1);
    // 1 <<<<<<< selbe wie VK_LBUTTON davon der aktuelle status zurück geliefert
    // was ist da nicht verständlich.. hmm
end;
Solche veralteten Methoden(variablen) wie Boolean wirst du in PowerBasic nicht mehr finden.
Aber egal trotzdem danke für deine Hilfe.

gruss Emil

Roachford 6. Okt 2008 19:50

Re: Key abfrage
 
Zitat:

Zitat von Hawkeye219
nur am Rande bemerkt: 1 shl 15 <> 128

Shit, da habe ich ja vollkommen falsch gerechnet. Vielen Dank, Hawkeye219!

Zitat:

Zitat von EWeiss
Was ist da nicht aussagekräftig ?
Delphi-Quellcode:
function IsKeyDown(CheckKey: Integer): SmallInt;
begin
    result := (GetAsyncKeyState(CheckKey) and 15);

end;

function IsLButtonDown: Integer;
begin
    Result := IsKeyDown(1);
    // 1 <&lt;&lt;&lt;&lt;&lt;&lt; selbe wie VK_LBUTTON davon der aktuelle status zurück geliefert
    // was ist da nicht verständlich.. hmm
end;

Daran ist vor allem nicht aussagekräftig, dass IsKeyDown() einen SmallInt und IsLButtonDown einen Integer zurückliefert. Also wird eine Zahl zurück geliefert - und mit was wird der Rückgabewert verglichen? Von mir aus beachten wir nur die Funktion IsLButtonDown(), da die andere darin aufgerufen wird. Und für die Funktion (IsLButtonDown()) hast du niemals in diesem Thread einen Aufruf gepostet. Mit anderen Worten, ich weiss nicht, mit was du den Rückgabewert der Funktion vergleichst (siehe Beitrag zuvor: 42?, Random(MaxInt)?). Somit ist es undurchsichtig, unverständlich[b] und machen es einfach schwer, dir direkt zu helfen.

Zitat:

Zitat von EWeiss
Solche veralteten Methoden(variablen) wie Boolean wirst du in PowerBasic nicht mehr finden.

Ich habe selber jahrelang auch PowerBasic programmiert und ich weiss dies, aber was (zum Teufel) hat nun auf einmal PowerBasic mit dem ganzen Thread zu tun? Ich denk du willst das ganze in Delphi machen und nicht in PowerBasic. Was denn nun? Bist du dir überhaupt einig was du machen willst? PowerBasic oder Delphi? Willst du den Code richtig machen (Boolean) oder einfach nur rumfrickeln (SmallInt auf Integer erweitern lassen und dann mit dem Wert x vergleichen)?

Und um nochmal auf den richtigen Einwand von Hawkeye219 einzugehen, ersetze in den Codes von mir bitte die 128 mit 32768. Danke!

EWeiss 6. Okt 2008 20:07

Re: Key abfrage
 
Zitat:

ersetze in den Codes von mir bitte die 128 mit 32768. Danke!
Das benötige ich nicht.
Mich interessiert letztendlich nur der positive oder negative wert.
da reicht ein vergleich auf < 0 .. völlig aus

Einen schönen Abend noch und Danke für die Hilfe.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz