Aktualisierung eines ListIconGadgets trotz offenem Menü?

Für allgemeine Fragen zur Programmierung mit PureBasic.
alDo
Beiträge: 41
Registriert: 28.01.2010 16:50
Wohnort: Hannover

Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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
OS: Windows XP
PB: 4.40 (x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
alDo
Beiträge: 41
Registriert: 28.01.2010 16:50
Wohnort: Hannover

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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.
OS: Windows XP
PB: 4.40 (x86)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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:
alDo
Beiträge: 41
Registriert: 28.01.2010 16:50
Wohnort: Hannover

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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:
OS: Windows XP
PB: 4.40 (x86)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Aktualisierung eines ListIconGadgets trotz offenem Menü?

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten