MouseWheel will nicht

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

MouseWheel will nicht

Beitrag von irobot »

Tach allerseits,

mal wieder komme ich nicht weiter und hoffe, ihr könnt mir helfen.

Der untenstehende Code zeigt das Wesentliche. Will in meinem
Programm (ähnlich wie bei AutoCad) den Zoom mittels MouseWheel
verstellen.

Jedoch, entweder es ändert sich nichts am Parameter "mausrad" oder
ich krieg den Mauszeiger nicht wieder zurück. Hier also der Code:

Code: Alles auswählen

   InitSprite()
   InitMouse()

   OpenWindow(1, 0, 0, 640, 480, #PB_Window_SystemMenu |#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget | #PB_Window_SizeGadget| #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "...")

   OpenWindowedScreen(WindowID(1), 20, 20, 600, 400, 0, 0, 1)

   Repeat
      EVENT = WaitWindowEvent()
      If EVENT = #PB_EventGadget                            
         ;auf Taste gedrückt... 
      EndIf
      If EVENT = 1057                                       
         ;Fenster verändert...
      EndIf
      If EVENT = 522               ;wenn Mausrad betätigt...
         mausrad = 100
         Repeat
            ExamineMouse()
            Delay(10)
            mausrad = mausrad + MouseWheel()
            Debug mausrad
            EVENT = WindowEvent()
         Until EVENT = 512
         ReleaseMouse(1)
      EndIf
   Until EVENT = #PB_Event_CloseWindow
   
   End
Warum ändert sich "mausrad" nicht ? Ich begreif' das nicht.

Dummerweise ist der "EVENT" immer 522, egal ob man
das Mausrad vor- oder zurückdreht

Vielen Dank im voraus für eure Hilfe

Grüsse
irobot
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Hast du dir schon das hier angesehen?
http://msdn.microsoft.com/library/en-us ... ouse_Wheel
Bild
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Beitrag von irobot »

das hilft mir nicht. Zu kompliziert.
Krieg ich nicht in PureBasic rein.

Ich bin kein Profiprogrammierer

Will lediglich www.der-prozess.de
in PureBasic komplett neu schreiben.

Grüsse
irobot
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Habe dir mal eben ein kleines beispiel gebastelt was mit API arbeitet.
Hoffe das hilft dir.

Code: Alles auswählen

Global mausrad
#WM_MOUSEWHEEL = $20A 
InitSprite()
InitMouse()

OpenWindow(1, 0, 0, 640, 480, #PB_Window_SystemMenu |#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget | #PB_Window_SizeGadget| #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "...")

OpenWindowedScreen(WindowID(1), 20, 20, 600, 400, 0, 0, 1)
mausrad = 100

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_EventGadget                           
    ;auf Taste gedrückt...
  EndIf
  If Event = 1057                                       
    ;Fenster verändert...
  EndIf
  If #WM_MOUSEWHEEL 
    wheel.w = ((EventwParam()>>16)&$FFFF)
    wheel = wheel/120
    mausrad +wheel
    Debug mausrad
  EndIf
Until Event = #PB_Event_CloseWindow
   
End 
Gruß,
Nico
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Beitrag von irobot »

Hallo Nico,

cool, danke, funktioniert ! :-)

Wo kriegt man bloss solche spezial-infos her ?

Läuft das Programm später auch unter Linux ?

Vielen Dank nochmal

Grüsse
irobot
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Also mit dem Beispiel von mir wird das nicht unter Linux laufen da ich ja Windows API verwendet habe.

Die infos für solche sachen findest du im PSDK oder MSDN von Microsoft.
Das PSDK kannst du kostenlos downloaden und reicht eigentlich voll aus.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

irobot hat geschrieben:Will lediglich www.der-prozess.de
in PureBasic komplett neu schreiben.
Ist nicht ganz einfach. Ich hab auch schon nen Teil davon gemacht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
irobot
Beiträge: 162
Registriert: 16.10.2005 09:22
Kontaktdaten:

Beitrag von irobot »

Nico,

zwar freue ich mich natürlich riesig, dass das
ganze mit dem #WM_MOUSEWHEEL und dem
wheel.w = ((EventwParam()>>16)&$FFFF) so klappt,
jedoch frage ich mich, geht das nicht auch mit den
"normalen" PureBasic-Mitteln ?

Habe immer etwas sorge, wenn im Programmcode
Dinge drin sind, wo ich wirklich NICHTS von verstehe.

BTW: Was sind die PSDK oder MSDN von Microsoft ?

Noch 'ne Frage an DarkDragon: Du hast schon einen
Teil wovon gemacht ? Von DER_PROZESS ?

Grüsse
irobot
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@irobot

dein erstes beispiel wird aber auch nicht unter linux laufen,
da du absolute zahlen statt konstanten für die events verwendest...

afaik sind die werte in linux völlig anders...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

irobot hat geschrieben:Noch 'ne Frage an DarkDragon: Du hast schon einen
Teil wovon gemacht ? Von DER_PROZESS ?
Wenn ich mir DER_PROZESS anschaue ist es doch etwas womit man Platinen etc. Zeichnet, eventuell sogar mit Simulation obs Funktioniert oder? Wenn ja: hab ich schon gemacht, aber halt nur für Platinen und nur als Schaltplan, dessen Leitungen blau eingefärbt werden wenns funktioniert. Weiß aber nicht ob ich es noch hab.

http://www.bradan.net/downloads/Schaltplan_Manager.zip

kannst ja mal anschauen, im Life Mode(einer der Buttons rechts unten, nicht der Menüpunkt) kannst du die Schaltung dann testen. Wenn du auf nen Schalter klickst geht er sogar zu.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten