Seite 1 von 2

Fenster Schütteln

Verfasst: 02.11.2004 17:27
von Andreas21
Hei,

Ist es möglich ein Fenster schüteln zu lassen?
Ich meine sowas wie z.b das in Yahoo möglich ist. :wink:

Verfasst: 02.11.2004 18:30
von Lukaso
Also, wenn ich das richtig verstanden habe, haste hier nen beispiel...:

Code: Alles auswählen

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")

SetTimer_(WindowID(0), 1, 50, 0) 
 
Repeat
  EventID.l = WaitWindowEvent()
  
  
  If EventID = #PB_Event_CloseWindow
    Quit = 1
    
  ElseIf EventID = #WM_TIMER
    MoveWindow(WindowX()+2, WindowY()+2)
    Delay(25)
    MoveWindow(WindowX()-2, WindowY()-2)
  EndIf
  
Until Quit = 1
  
EndIf

End 

Verfasst: 17.11.2004 01:22
von Andreas21
Jo genau so was meinte ich :-)

Aber darauf hette ich auch kommen können :oops:
Na ja das einfachste übersieht man meistens :allright:

Danke für den Tip <)

Verfasst: 17.11.2004 01:42
von Ynnus
Und wenn es sich völlig frei umherbewegen soll (zufällig versteht sich):

Code: Alles auswählen

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")

SetTimer_(WindowID(0), 1, 50, 0)
 
Repeat
  EventID.l = WaitWindowEvent()
 
 
  If EventID = #PB_Event_CloseWindow
    quit = 1
   
  ElseIf EventID = #WM_TIMER
    If Random(1) = 1
      MoveWindow(WindowX()+2, WindowY())
    Else
      MoveWindow(WindowX()-2, WindowY())
    EndIf
    
    If Random(1) = 1
      MoveWindow(WindowX(), WindowY()+2)
    Else
      MoveWindow(WindowX(), WindowY()-2)
    EndIf
    
    Delay(25)
  EndIf
 
Until quit = 1
 
EndIf

End
Wenn man es jetzt lange genug laufen lässt, könnte es sein dass es aus dem Sichtbereich rauswandert.^^


EDIT:

Wie wäre es mit einem Minispielchen? Wie lange benötigt man bis man das Fenster geschlossen hat? (Leider kann man hier leicht cheaten wenn man einfach den Tastmanager nimmt oder einfach unten in der Taskleiste auf Schließen klickt. Aber ohne muss man erstmal schön dem roten Knöpfchen hinterher rennen.^^)
Mein Rekord liegt bei ~ 2100 Milisekunden.^^

Code: Alles auswählen

If OpenWindow(0, Random(500), Random(500), 195, 260, #PB_Window_SystemMenu, "PureBasic Window")

SetTimer_(WindowID(0), 1, 50, 0)
 
time =ElapsedMilliseconds() 

Repeat
  EventID.l = WaitWindowEvent()
 
 
  If EventID = #PB_Event_CloseWindow
    quit = 1
   
  ElseIf EventID = #WM_TIMER
    If Random(1) = 1
      MoveWindow(WindowX()+25, WindowY())
    Else
      MoveWindow(WindowX()-25, WindowY())
    EndIf
    
    If Random(1) = 1
      MoveWindow(WindowX(), WindowY()+25)
    Else
      MoveWindow(WindowX(), WindowY()-25)
    EndIf
    
    Delay(25)
  EndIf
 
Until quit = 1
 
EndIf

MessageRequester("time", "Du hast " + Str(ElapsedMilliseconds() - time)  + " Millisekunden benötigt zum Schließen des Fensters." )

End

Verfasst: 17.11.2004 02:24
von Kaeru Gaman
:lol: klasse idee.... catch that window...

Verfasst: 17.11.2004 02:55
von Ynnus
MoveWindow_() funktioniert auch mit Gadgets (wie sehr viele andere WinAPI Befehle wo man eine FensterID angeben kann, kann man auch GadgetIDs angeben und es gilt auch für diese).

Wer schafft es, denn Button zu drücken?

Ach ja, per "Tab" den Focus auf den Button legen geht nicht, da hab ich vorgesorgt und den Focus immer auf das Fenster gelegt.
Wir wollen ja nicht schummeln :mrgreen:

Code: Alles auswählen

If OpenWindow(0, Random(500), Random(500), 450, 100, #PB_Window_SystemMenu, "PureBasic Window")
  CreateGadgetList(WindowID(0))
  ButtonGadget(0, 225 - 30, 40, 60, 60, "Button")

SetTimer_(WindowID(0), 1, 50, 0)
 
Repeat

  SetFocus_(WindowID(0))
  If WindowMouseX() >= GadgetX(0) - 2 And WindowMouseX() <= GadgetX(0) + GadgetWidth(0) - 2 And WindowMouseY() >= GadgetY(0) - 2 And WindowMouseY() <= GadgetY(0) + GadgetHeight(0) + 2
    If WindowMouseX() <= GadgetX(0) + (GadgetWidth(0) / 2)
      MoveWindow_(GadgetID(0), WindowMouseX() + 2, 40, 60, 60, #True)
    Else
      MoveWindow_(GadgetID(0), WindowMouseX() - GadgetWidth(0) - 2, 40, 60, 60, #True)
    EndIf
    
    If GadgetX(0) >= 390 Or GadgetX(0) <= 0
      MoveWindow_(GadgetID(0), 225 - (GadgetWidth(0) / 2), 40, 60, 60, #True)
    EndIf
  EndIf

  EventID.l = WaitWindowEvent()
 
  If EventID = #PB_Event_CloseWindow
    quit = 1
  EndIf
 
until quit = 1
endIf
End

Verfasst: 17.11.2004 03:10
von Kaeru Gaman
....da hast du aber jetzt "geschummelt" :wink:

ist doch unmöglich, den button zu drücken.... du setzt ihn ja immer neben den mauszeiger... :cry:

Verfasst: 17.11.2004 18:07
von Lars
@Sunny
Dir ist aber klar, dass das Verschieben von Gadgets auch via
ResizeGadget() geht?

Verfasst: 17.11.2004 18:10
von wichtel
das erinnert mich an dieses hier:

mms://streamingmedia.cyso.nl/cyso.nl/Voting_Machine.wmv

Vor ein paar Tagen, in den USA....

Verfasst: 17.11.2004 18:23
von Ynnus
Lars hat geschrieben:@Sunny
Dir ist aber klar, dass das Verschieben von Gadgets auch via
ResizeGadget() geht?
*Hust*,öhm, ich wollts per API machen, um zu demonstrieren, dass viele Fenster-Befehle auch auf Gadgets anwendbar sind... *hust*
Naja, ich hab resizegadget() bisher kaum verwendet, da ist es mir wohl entfallen, dass das so auch geht. Macht aber nix, in meinem Beispiel passt es ja so zu dem genutzten API-Befehl MoveWindow_()