Seite 1 von 1

FreeGadget() findet Gadget nicht [X]

Verfasst: 28.11.2007 08:23
von RSBasic
Hallo,
ich habe zurzeit ein Problem, was sehr seltsam ist.
Der Befehl "FreeGadget()" klappt in Proceduren und in Threads.
Aber wenn ich ne Procedure und darauf einen Thread erstelle und diesen Befehl verwenden möchte, dann:
1. Hat FreeGadget() keine Funktion mehr
2. PB sagt keine Fehlermeldung

Das find ich sehr seltsam.
Hier der Beispielcode:

Code: Alles auswählen

Procedure Test2()
  FreeGadget(1);<<<<<Wieso wird der Gadget nicht freigegeben?
  Debug "Fertig"
EndProcedure

Procedure Test1()
  CreateThread(@Test2(),154)
EndProcedure

If OpenWindow(0,0,0,500,500,"Windows-Vorlage",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,100,100,100,100,"Welcome",0)
  EndIf
  Test1()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
@M/A
Wenn das ein Bug ist, dann verschiebe ich diesen Thread.

Verfasst: 28.11.2007 09:47
von mk-soft
Falsche Instance. Ein Thread hat eine eigene Instance und somit ein eigenes Eventhandling.

Lösung...

Code: Alles auswählen

#FreeButton = #WM_USER + 1

Procedure Test2()
  SendMessage_(WindowID(0), #FreeButton, 0, 0)
EndProcedure

Procedure Test1()
  CreateThread(@Test2(),154)
EndProcedure

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
    
  Select uMsg
    Case #FreeButton
      FreeGadget(1)
    Default
  EndSelect 

  ProcedureReturn #PB_ProcessPureBasicEvents 
  
 EndProcedure 
 

If OpenWindow(0,0,0,500,500,"Windows-Vorlage",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1,100,100,100,100,"Welcome",0)
  EndIf
  
  SetWindowCallback(@WinCallback(), 0)
  
  Test1()
  
  Repeat
    event = WaitWindowEvent()
    
  Until event = #PB_Event_CloseWindow
EndIf 

Verfasst: 28.11.2007 12:38
von edel

Verfasst: 28.11.2007 19:41
von RSBasic
OK danke, ich habe das Problem anders gelöst.