Seite 1 von 2

[API] Mausposition ermitteln, Problem

Verfasst: 17.02.2009 19:11
von php-freak
Hallo,

sorry das ich einen zweiten Thread aufmache aber dieses Problem ist viel Allgemeiner!

hab folgeden Code aus der API Lib von RSBasic!

Code: Alles auswählen

Procedure Thread()
  Repeat
    GetCursorPos_(Coords.POINT)
    SetGadgetText(1,"Mausposition: x="+Str(Coords\x)+" y="+Str(Coords\y))
    Delay(10)
  ForEver
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    TextGadget(1,10,10,200,20,"",0)
  EndIf
  CreateThread(@Thread(),0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
^^Funktioniert so auch gut!

Aber man krieg das ganze nicht aus der Procedure raus!

Weder mit ProcedureReturn noch mit Global die Variable auch außerhalb verfügbar machen! Dann kommt ein Error das Coords\x oder Coords\y keine Structure hat!

Und wenn man dafür nen Structure macht fuktioniert es immernochnicht :-(

Klar man kann es eventuell in den Speicher schreiben allerdings ist dies ja umständlicher als normal!

Gruß

JENS

Verfasst: 17.02.2009 19:18
von STARGÅTE
warum API ?

Es gibt doch in PB:
DesktopMouseX und DesktopMouseY

Verfasst: 17.02.2009 19:30
von php-freak
Keine Ahnung! API MAG ICH! Naja! Dann mach ichs halt so!

Verfasst: 17.02.2009 19:31
von Andesdaf
aber wenns in PB einfacher geht... :roll:

Verfasst: 17.02.2009 22:46
von X0r
>Weder mit ProcedureReturn noch mit Global die Variable auch außerhalb verfügbar machen! Dann kommt ein Error das Coords\x oder Coords\y keine Structure hat!

Was genau aus der Prozedur? Das Objekt? Natürlich geht das:

Code: Alles auswählen

Procedure GetPoint()
;...
*Coords.Point
*Coords=HeapAlloc_(GetProcessHeap_(),$00000008 ,SizeOf(Point))
ProcedureReturn *Coords
EndProcedure
;...
*abc.Point
*abc=GetPoint()
Ist aber sicherlich zu hoch für dich, nimm die PB Lib-Funktionen.

Verfasst: 17.02.2009 22:50
von Kaeru Gaman
das Hauptproblem ist, dass du eine fertige Procedur nimmst die als Thread laufen soll,
anstatt zu verstehen was die API-Funktion dir zurückliefert und das in deiner eigenen Schleife zu verwenden.

Verfasst: 17.02.2009 23:03
von Kaeru Gaman
la le lu.. gedaddelt in den schuh...

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Define Coords.POINT
  Repeat
    Event = WaitWindowEvent(100)
    GetCursorPos_(Coords)
    OutText1$ = "x="+Str(Coords\x)+" y="+Str(Coords\y)
    MapWindowPoints_( 0, WindowID(0), Coords, 1 ) 
    StartDrawing( WindowOutput( 0 ) )
      Box( 0,0, 500, 250 )
      DrawText(0,0,OutText1$,$CC9933,0)
      LineXY(   0,   0, Coords\x,Coords\y, $00FFFF )
      LineXY( 500,   0, Coords\x,Coords\y, $00FFFF )
      LineXY(   0, 250, Coords\x,Coords\y, $00FFFF )
      LineXY( 500, 250, Coords\x,Coords\y, $00FFFF )
    StopDrawing()
  Until Event = #PB_Event_CloseWindow
EndIf

Verfasst: 17.02.2009 23:04
von X0r
Da oben hab ich ihm ne fertige Prozedur gegeben. Eine winzige Sache fehlt da noch. Bin mal gespannt, ob ers hinbekommt. bin überhaupt mal gespannt, ob er merkt, ob die Funktion überhaupt Sinn macht. :mrgreen:

Verfasst: 17.02.2009 23:04
von edel
Das wirkliche Problem ist der fehlende Parameter bei der Threadfunktion.
Sollte RSBasic auch schnellstens aendern.

Verfasst: 17.02.2009 23:40
von RSBasic
@edel
Wird am WE gemacht.

\\Edit:
Ne ich machs jetzt schnell^^