Seite 1 von 1

Gadget

Verfasst: 05.03.2006 19:51
von Toshy
Hallo.
ich habe noch nie mit Gadgets gearbeitet, weil ich noch relativ wenig mit PB gearbeitet habe und ich eher die "Hintergrundprogrammierung" mache, also nicht die Oberfläche.
Mit
Procedure Open_Window_ShowNetInfos()
Window_ShowNetInfos = OpenWindow(#PB_Any, 301, 0, 500, 500, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Window 0")
If Window_ShowNetInfos
If CreateGadgetList(WindowID(Window_ShowNetInfos))
PanelGadget(#Panel_ShowNetInfos, 0, 0, 500, 500)
AddGadgetItem(#Panel_ShowNetInfos, 1, "Tab 1")
ListViewGadget(#Listview_ShowNetInfos1, 0, 2, 496, 470)
AddGadgetItem(#Panel_ShowNetInfos, 2, "Tab 2")
ListViewGadget(#Listview_ShowNetInfos2, 0, 2, 496, 470)
CloseGadgetList()
EndIf
EndIf
EndProcedure
Erstelle ich ein Fenster, mit Panel, 2 Tabs und ner Liste drauf.
Soweit so gut, allerdings wird nur das Fenster angezeigt, die Tabs nicht (mit Liste) es sei denn, ich rufe im Hauptprogramm (oder nehm Thread) "WaitWindowEvent()" auf. Muß das so sein?
Ich hatte sonst eigendlich nicht vor Events selbst zu verarbeiten, da dies nur eine ARt Debugroutine in eine DLL sein sollte. Also nur ne Liste mit ein paar Zeilen Text die sich selbständig ändern.

Ist das verwenden von WaitWindowEvent() eine Voraussetzung das Panels angezeigt werden (und andere Gadgets) oder mache ich was falsch oder läuft in der Beta noch was nicht richtig?

Gruß
Toshy

Verfasst: 05.03.2006 20:03
von Macros
Ja, ist es (Windowevent geht auch)
dieser Befehl zeichnet nähmlich auch das Fenster neu.
(Schrittweise)

Verfasst: 05.03.2006 21:02
von ts-soft
WaitWindowEvents() sorgt erst dafür, das Ereignisse abgearbeitet werden.
Ohne diesen oder ä. Befehl funzt weder die GUI, noch Callbacks usw.

Verfasst: 05.03.2006 21:17
von Toshy
Danke.
Jetzt weiß ich Bescheid.

Etwas dumm ist das aber schon.
Da ich eine DLL erstelle du unter anderem ein Debugfenster erstellen kann, aber auch so einige Gadgets die selbständig (durch Threads) aktualisiert werden sollen (nur Tabs und Listviews). Das würde dann ja leider nicht gehen. Wäre schon sehr dumm. Ich kann ja auch nicht einfach "waitevent" im Thread einsetzen (oder?) weil ich dann ja wohl auch die events des Hauptprogramms (das die DLL aufruft, nicht in PB erstellt) abfangen würde bzw. es vielleicht nicht funktioniert.

Gibt es da noch eine Möglichkeit?

Gruß
Toshy

Verfasst: 05.03.2006 21:24
von ts-soft
WaitWindowEvents() muß immer in dem Thread stehen, in dem das Fenster
erzeugt wird. Eventbearbeitung über mehrere Thread ist mit normalen Mitteln
nicht möglich. Per API kann man aber entsprechende Rechte vergeben, aber
das mußte Dir selber suchen, hab da keine weiteren Infos.

Verfasst: 05.03.2006 21:31
von Toshy
Ups. Das wußte ich nicht.
Das ist ja richtig gut, dann brauche ich mir ja gar keine Sorgen zu machen. Einfach Thread erstellen, Window erstellen mit Gadgets und in Schleife Event abfragen.

Mir ist das aus zwei Gründen nicht aufgefallen. Erstens weil ich WindowsEvent nur nutze damit die Gadget überhaupt aufgebaut werden, ich werte den Inhalt also nicht aus und zweitens, weil auch wenn ich Windowsevent aus einem anderen Thread (Hauptthread) aufrufe werden die Gadgets aus dem "Gadgetthread" trotzem richtig aufgebaut. Das ist für mich jetzt ein wenig verwunderlich, aber ok.

Verfasst: 05.03.2006 21:46
von ts-soft
Ich beziehe mich aber immer auf Windows ab w2k!
Über DOS-Windows informiere ich mich nicht mehr :wink: