FreeGadget() findet Gadget nicht [X]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

FreeGadget() findet Gadget nicht [X]

Beitrag 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.
Zuletzt geändert von RSBasic am 28.11.2007 19:40, insgesamt 1-mal geändert.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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 
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

OK danke, ich habe das Problem anders gelöst.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten