Seite 1 von 1
Windowed Screen-im zweit. Fenster wird Liste nicht angezeigt
Verfasst: 08.10.2011 12:48
von Makke
Hallo zusammen,
ich habe folgendes Problem:
ich erstelle ein Fenster mit einem Listicongadget, danach erstelle ich ein fenster auf dem ich einen Screen öffne. Das ListIconGadget wird aber auf dem ersten Fenster nicht angezeigt. Siehe:
Der Befehl zum Neuzeichnen des Fensters
bringt leider auch nichts. Weiterhin habe ich schon versucht das Fenster mit der Liste als Child des Screenwindows zu erzeugen, aber nichts funktioniert.
Noch merkwürdiger wird es, wenn ich das Fenster mit dem Gadget in einem Thread öffne, es öffnet sich kurz und ist anschließend weg, ohne das ich irgendwo CloseWIndow() bennutze.
Hat hier noch jemand einen Rat was ich tun kann ? Vielen Dank schonmal.
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 08.10.2011 13:42
von PMV
WindowEvent()?
Ansonsten:
Wie wärs mit lauffähigem Code, um das nach vollziehen zu können?
MFG PMV
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 08.10.2011 20:37
von Makke
Ok, hier mal das Grundgerüst:
Code: Alles auswählen
InitSprite() : InitMouse() : InitKeyboard()
If OpenWindow(0, 0, 0, 400, 300, "Fenster mit Gadgets", #PB_Window_SystemMenu|#PB_Window_Tool)
ListIconGadget(0, 5, 5, 390, 290, "Column 1", 100, #PB_ListIcon_GridLines)
EndIf
If OpenWindow(1, 450, 0, 800, 600, "Fenster mit Screen", #PB_Window_TitleBar)
If OpenWindowedScreen(WindowID(1), 0, 0, 800, 600, 0, 0, 0, #PB_Screen_WaitSynchronization)
SetFrameRate(60)
MouseLocate(800 / 2, 600 / 2)
EndIf
EndIf
Repeat
StartDrawing(ScreenOutput())
DrawText(350, 290, "Windowed Screen", $FFFFFF, $0)
StopDrawing()
ExamineMouse() : ExamineKeyboard()
If WindowEvent() = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
QUIT = #True
EndIf
FlipBuffers()
Delay(1)
Until QUIT = #True
In meinem Progrämmchen sind noch einige Prozeduraufrufe zwischen dem erstellen der Fenster und der Schleife, aber selbst in dem entschlackten Code ist das Problem das gleiche. Ich hoffe das hilft weiter.
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 08.10.2011 20:44
von STARGÅTE
Das Problem ist hier, das du immer nur einmal das WindowEvent ausführst pro Frame.
Überlicherweise gibt es aber viel mehr Ereignisse die du alle nicht abarbeitest.
Wie auch im PB-Beispiel zu OpenWindowedScreen zu sehen ist, muss man WindowEvent selbst in einer Schleife haben:
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenWindow(1, 450, 0, 800, 600, "Fenster mit Screen", #PB_Window_TitleBar)
OpenWindowedScreen(WindowID(1), 0, 0, 800, 600, 0, 0, 0, #PB_Screen_WaitSynchronization)
SetFrameRate(60)
OpenWindow(2, 0, 0, 400, 300, "Fenster mit Gadgets", #PB_Window_SystemMenu|#PB_Window_Tool, WindowID(1))
ListIconGadget(0, 5, 5, 390, 290, "Column 1", 100, #PB_ListIcon_GridLines)
Repeat
Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
Break 2
Case #Null
Delay(1)
Break
EndSelect
ForEver
ClearScreen(0)
If StartDrawing(ScreenOutput())
DrawText(350, 290, "Windowed Screen", $FFFFFF, $0)
StopDrawing()
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
Break
EndIf
FlipBuffers()
ForEver
Habe mal die Maus wieder freigegeben und das ToolWindow auch dem Hauptfenster untergeordnet.
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 08.10.2011 20:46
von PMV
Keine Ahnung, in wie weit man das als Bug bezeichnen kann ... aber
ExamineMouse() fängt die Maus komplett ein, weshalb der Benutzer
nicht mehr in der Lage ist, den Screen zu verlassen. Das in verbindung
mit weiteren Fenstern macht also wenig Sinn. Um dem Benutzer
weiter die Möglichkeit zu geben, die Maus frei zu bewegen, solltest
du WindowMouseX() usw. verwenden. Ich denke mal, dass hierdurch
das Eventhandling von Windows/ PureBasic durcheinander kommt
bzw. hängen bleibt. Vermeidung der DX-Eingabe-Funktionen sollte
das also beheben. (Aussage ohne es getest zu haben

)
So bald ich den WindowedScreen verlasse, wird das ListGadget
nämlich dargestellt.
MFG PMV
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 08.10.2011 21:45
von NicTheQuick
STARGÅTE hat geschrieben:...
Das 'Delay(1)' ist in dem Fall übrigens unnötig. Dazu gibt's 'FlipBuffers()'.

Natürlich wird es nicht viel ausmachen.
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 08.10.2011 22:18
von Nero
Makke hat geschrieben:Noch merkwürdiger wird es, wenn ich das Fenster mit dem Gadget in einem Thread öffne, es öffnet sich kurz und ist anschließend weg, ohne das ich irgendwo CloseWIndow() bennutze.
Bei mir gehts mit nem Thread.
Code: Alles auswählen
InitSprite() : InitMouse() : InitKeyboard()
If OpenWindow(0, 0, 0, 400, 300, "Fenster mit Gadgets", #PB_Window_SystemMenu|#PB_Window_Tool)
ListIconGadget(0, 5, 5, 390, 290, "Column 1", 100, #PB_ListIcon_GridLines)
EndIf
If OpenWindow(1, 450, 0, 800, 600, "Fenster mit Screen", #PB_Window_TitleBar)
If OpenWindowedScreen(WindowID(1), 0, 0, 800, 600, 0, 0, 0, #PB_Screen_WaitSynchronization)
SetFrameRate(60)
MouseLocate(800 / 2, 600 / 2)
EndIf
EndIf
Global QUIT
Procedure ScreenWindow(*dummy)
Repeat
ExamineKeyboard()
StartDrawing(ScreenOutput())
DrawText(350, 290, "Windowed Screen", $FFFFFF, $0)
StopDrawing()
If KeyboardPushed(#PB_Key_Escape)
QUIT = #True
EndIf
FlipBuffers()
Until QUIT = #True
EndProcedure
th1.l = CreateThread(@ScreenWindow(), 0)
Repeat
If WindowEvent() = #PB_Event_CloseWindow
QUIT = #True
EndIf
Delay(1)
Until QUIT = #True
WaitThread(th1)
Mfg Nero
Re: Windowed Screen-im zweit. Fenster wird Liste nicht angez
Verfasst: 09.10.2011 09:57
von Makke
Vielen Dank an Alle für Eure Hilfe.
@Stargate: ich hatte nicht bedacht das bei Erstellung eines Fensters bereits Windows-Ereignisse stattfinden. Ich benutze dieses Toolwindow nur zum Anzeigen diverser Informationen, es sollen dort keine Benutzereingaben erfolgen.
@Nero: den Thread habeich ohne Event-Schleife erstellt, ich dachte mir einfach nur das Fenster zu zeichnen.