Seite 1 von 3
Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 12:52
von alDo
Hallo ich bins mal wieder.
Hab da mal ne Frage zur Aktualisierung von z.B. ListIcongadgets. Habe ein Menü und ein ListIconGadget. In meinem Programm wird das Listicongadget ständig um einen Eintrag erweitert. Wenn ich nun das Menü öffne, stoppt das Hinzufügen eines neuen Eintrags, solange das Menü geöffnet bleibt

Liegt mit ziemlicher Sicherheit an meinem Timeout.
Meine Frage: Kennt jemand eine Möglichkeit, wie ich dies anders lösen könnte, sodass während das Menü geöffnet ist das ListIconGadget trotzdem erweitert wird?
Beispielcode:
Code: Alles auswählen
EnableExplicit
Enumeration
#WINDOW
#MENU
#LISTICON
#ITEM
EndEnumeration
Define windowID, event, eventgadget, line, EXIT
OpenWindow(#WINDOW,0,0,320,300,"Test")
windowID = WindowID(#WINDOW)
CreateMenu(#MENU,windowID)
MenuTitle("Menü")
MenuItem(#ITEM,"Menü-item")
ListIconGadget(#LISTICON,10,10,300,250,"regelmässig ankommende Daten",300,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
Repeat
event = WaitWindowEvent(100)
eventgadget = EventGadget()
Select event
Case #Null
AddGadgetItem(#LISTICON,line,"Dies ist Zeile "+Str(line+1))
line+1
Case #PB_Event_CloseWindow
EXIT = 1
EndSelect
Until EXIT
DisableExplicit
End
Grüsse alDo
Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 13:04
von ts-soft
Code: Alles auswählen
EnableExplicit
Enumeration
#WINDOW
#MENU
#LISTICON
#ITEM
EndEnumeration
Procedure TimerProc(hWnd, uMsg, idEvent, dwTime)
Static line
If idEvent = 1
If IsGadget(#LISTICON)
AddGadgetItem(#LISTICON, line, "Dies ist Zeile " + Str(line + 1))
line + 1
EndIf
EndIf
EndProcedure
Define windowID, event, eventgadget, EXIT
OpenWindow(#WINDOW, 0, 0, 320, 300, "Test")
windowID = WindowID(#WINDOW)
CreateMenu(#MENU, windowID)
MenuTitle("Menü")
MenuItem(#ITEM, "Menü-item")
ListIconGadget(#LISTICON, 10, 10, 300, 250, "regelmässig ankommende Daten", 300, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines)
SetTimer_(WindowID(#WINDOW), 1, 100, @TimerProc())
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
EXIT = 1
EndSelect
Until EXIT
Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 13:11
von Kaeru Gaman
@ts
ist die SetTimer API wirklich oberhalb vom PB-Event-Level?
das interne SetWindowTimer wird nämlich auch vom Menu geblockt.
... funktioniert das auch beim Verschieben eines Fensters?
ich sehe grad eine Möglichkeit am Horizont, einen GameScreen auch während Menu und Verschieben upzudaten...
Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 13:47
von ts-soft
Kaeru Gaman hat geschrieben:
... funktioniert das auch beim Verschieben eines Fensters?
hab ich bereits wiederholt in entsprechenden Threads angemerkt,
aber wird wohl ignoriert. Das TimerCallback wird direkt von Windows
angesprungen (fast ein Thread)
Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 14:04
von Kaeru Gaman
Menschliche Erinnerung funktioniert assoziativ.
d.h. ich kann mir das nur dann effektiv merken, wenn es mit einem bereits bestehenden Themenkomplex verknüpft wird.
ich kann mir von den vielen Informationen die hier täglich an mir vorbeirauschen am besten die merken, die ein *ping* oder *aha* erzeugen.
die Formulierung "wird direkt von Windows angesprungen (fast ein Thread)" ist mir zwar bekannt,
aber dass das
bedeutet, dass das das Problem eliminieren kann, dass ein Screen beim Verschieben einfriert,
die Verbindung muss erst bewußt hergestellt werden damit die Information auch in der richtigen Schublade landet.
also nimms nicht persönlich, dass ichs mir noch nicht gemerkt hatte.

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 14:08
von alDo
Der dritte Parameter steht doch bestimmt für das Intervall in dem die Procedure ausgeführt wird. Ich hab jetzt nur das Problem, dass ich in meinem eigentl. Programm kein festes Intervall festlegen kann, da ich nicht weiss in welchen Zeitabständen die Daten, welche ich anzeigen möchte, bei mir eintreffen.
Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 14:16
von Kaeru Gaman
du kannst immer nur feste Intervalle benutzen.
prüf halt zuerst, ob etwas angekommen ist, und wenn nicht verlasse die routine gleich wieder.
Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 14:31
von ts-soft
alDo hat geschrieben:Der dritte Parameter steht doch bestimmt für das Intervall in dem die Procedure ausgeführt wird. Ich hab jetzt nur das Problem, dass ich in meinem eigentl. Programm kein festes Intervall festlegen kann, da ich nicht weiss in welchen Zeitabständen die Daten, welche ich anzeigen möchte, bei mir eintreffen.
Bei Deinem WaitWindowEvent(100) haste denselben Intervall, bzw. ist der noch grösser
Es wird im Endeffekt alles in Intervallen bearbeitet, so funktioniert MultiTasking

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 14:43
von alDo
ts-soft hat geschrieben:Bei Deinem WaitWindowEvent(100) haste denselben Intervall, bzw. ist der noch grösser
War ja auch nur ein Beispielcode

Im Original weiss ich nämlich nicht wann die Daten einschlagen. Nochmal Danke für die Hilfe ts-soft & Kaeru

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?
Verfasst: 16.03.2010 14:47
von Kaeru Gaman
also wenn du keinen Callback oder Case auf das Event setzen kannst, das von den Daten selber erzeugt wird, dann bist du IMMER auf eine regelmäßige Prüfung angewiesen.
wenn du eigentlich die Reaktion auf deinen Datenempfang in einem Case hast, das direkt mit dem Empfang in Verbindung steht, dann setz halt deinen Callback auf dieses Event statt auf den Timer.
.... ob das Allerdings dann die selbe Priorität genießt weiß ich nicht.