Seite 8 von 43

Verfasst: 25.01.2009 18:01
von ts-soft
RSBasic hat geschrieben: Sonstige:
• Anderes Icon im MessageRequester
Kommt mir bekannt vor :mrgreen:

Verfasst: 25.01.2009 18:06
von RSBasic
ts-soft hat geschrieben:
RSBasic hat geschrieben: Sonstige:
• Anderes Icon im MessageRequester
Kommt mir bekannt vor :mrgreen:
Japp, dank dir :)

Verfasst: 26.01.2009 17:17
von Bisonte
Hallo. Erstmal : :allright: für mich API-"Noob" eine wahre Fundgrube.

Da hab ich versucht dein Programmbeispiel Gadgets->Mouseover auszuprobieren, aber es funktioniert nicht !
Fehlermeldung : PtInRect() : Falsche Anzahl an Parametern !
Laut MSDN sind es nur 2 Parameter, die diese Funktion erwartet, aber ich kriegs ums umfallen nicht hin.

Dein Schnipsel ist

Code: Alles auswählen

Procedure Thread()
  Repeat
    GetWindowRect_(GadgetID(1),re.RECT)
    GetCursorPos_(pt.POINT)
    If PtInRect_(re,pt\x,pt\y)=1           ; <----- Hier die falsche Anzahl an Parametern
      SetGadgetText(2,"MouseOver: Ja")
    Else
      SetGadgetText(2,"MouseOver: Nein")
    EndIf
    Delay(100)
  ForEver
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,10,10,100,20,"Test-Button",0)
    TextGadget(2,10,40,100,20,"",0)
  EndIf
  CreateThread(@Thread(),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Verfasst: 26.01.2009 17:31
von ts-soft
Der Code enthält 2 Fehler. Zu PtInRect_() siehe:
http://www.purebasic.fr/english/viewtop ... 893#274893

Threadprocedure hat immer einen parameter

Code: Alles auswählen

Procedure Thread(dummy)
  Repeat
    GetWindowRect_(GadgetID(1),re.RECT)
    GetCursorPos_(pt.POINT)
    If PtInRect_(re, pt\y << 32 + pt\x) = 1
      SetGadgetText(2,"MouseOver: Ja")
    Else
      SetGadgetText(2,"MouseOver: Nein")
    EndIf
    Delay(100)
  ForEver
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,10,10,100,20,"Test-Button",0)
    TextGadget(2,10,40,100,20,"",0)
  EndIf
  CreateThread(@Thread(),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Verfasst: 26.01.2009 18:24
von RSBasic
@Bisonte
Danke fürs Melden,
in PB 4.20 hat es damals noch funktioniert und auch wegen dem Parameter des Threads, da brauchte man nicht unbedingt einen Parameter.
Aber das hat sich anscheinend geändert^^

@ts-soft
Danke fürs Verbessern, werd ich beim nächsten Update den Code aktualisieren :)

Verfasst: 26.01.2009 18:27
von edel
RSBasic hat geschrieben:@Bisonte
Danke fürs Melden,
in PB 4.20 hat es damals noch funktioniert und auch wegen dem Parameter des Threads, da brauchte man nicht unbedingt einen Parameter.
Aber das hat sich anscheinend geändert^^
Da hat sich ueberhaupt nichts geaendert.

Verfasst: 26.01.2009 18:29
von RSBasic
Dann hat PB damals bei mir nie gemeckert, erst bei PB 4.30.
War wohl mein Fehler :wink:

Verfasst: 26.01.2009 18:32
von ts-soft
edel hat geschrieben:
RSBasic hat geschrieben:@Bisonte
Danke fürs Melden,
in PB 4.20 hat es damals noch funktioniert und auch wegen dem Parameter des Threads, da brauchte man nicht unbedingt einen Parameter.
Aber das hat sich anscheinend geändert^^
Da hat sich ueberhaupt nichts geaendert.
Oh, doch, PtInRect_() wurde in PB4.30 geändert und der fehlende Parameter
einer Threadprocedure wird jetzt auch vom Compiler angemeckert, war aber
schon immer erforderlich (fehlen führte zu merkwürdigen fehlern)

Verfasst: 26.01.2009 18:36
von edel
Ich meinte den fehlenden Parameter, dieser war, wie du ja selbst
schreibst, immer erforderlich. Dabei spielt es keine Rolle ob da jetzt
der Kompiler meckert oder nicht.

Verfasst: 27.01.2009 12:56
von Bisonte
thx. Das mit der Parameterübergabe für Threads hatte ich auch schon gemerkt, aber
PtInRect_(re, pt\y << 32 + pt\x)
war der schlüssel ;)

Achja und natürlich CreateGadgetList() entfernen ;)