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 :cry: 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. Bild

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 :mrgreen:
Es wird im Endeffekt alles in Intervallen bearbeitet, so funktioniert MultiTasking :wink:

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 :mrgreen:
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 :allright:

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.