Problem m. neuem CHILD Fenster in verchachtelten GadgetLists

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Problem m. neuem CHILD Fenster in verchachtelten GadgetLists

Beitrag von CNESM »

Schönen Sonntag Morgen,

folgendes Problem ist bei mir gestern aufgetreten. Kennt jemand ne Möglichkeit, den Fehler zu beheben? Scheinbar kommt durch ein neue erstelltes Fenster innerhalb von Containergadgets die Listenverwaltung etwas durcheinander oder mir fehlt die richtige Ablauf von Open/Close/UseGadgetList. Vielleicht liegts auch an der Window Parent Zuordnung ... Keeeene Ahnung ...

Code: Alles auswählen

OpenWindow(0,10,10,400,300,"Test",#PB_Window_SystemMenu)
SetWindowColor(0,RGB(2,150,86))

ContainerGadget(1,10,10,380,280)
  SetGadgetColor(1,#PB_Gadget_BackColor,RGB(27,227,247))
  
  ContainerGadget(2,20,20,340,240)
    SetGadgetColor(2,#PB_Gadget_BackColor,RGB(0,227,47))
      
    OpenWindow(3,20,20,300,200,"",#WS_CHILD,WindowID(0)) 
    
  CloseGadgetList()
  
CloseGadgetList()

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Code: Alles auswählen

OpenWindow(0,10,10,400,300,"Test",#PB_Window_SystemMenu)
SetWindowColor(0,RGB(2,150,86))

ContainerGadget(1,10,10,380,280)
  SetGadgetColor(1,#PB_Gadget_BackColor,RGB(27,227,247))
 
  ContainerGadget(2,20,20,340,240)
    SetGadgetColor(2,#PB_Gadget_BackColor,RGB(0,227,47))
  CloseGadgetList()
 
CloseGadgetList()

OpenWindow(3,20,20,300,200,"",#WS_CHILD,WindowID(0))

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
:?:

... du kannst die beiden Close-Befehle allerdings auch einfach weglassen,
denn das Erstellen des neuen Fensters schließt alle zuvor geöffneten GadgetLists.

++

- Gadgets und Windows haben unterschiedliche Nummerlisten:

Code: Alles auswählen

OpenWindow(0,10,10,400,300,"Test",#PB_Window_SystemMenu)
  ContainerGadget(0,10,10,380,280)
    ContainerGadget(1,20,20,340,240)
OpenWindow(1,20,20,300,200,"",#WS_CHILD,WindowID(0))
- was genau willst du eigentlich erreichen, vielleicht gehts auch anders besser.


++

wenn das zusätzliche Fenster ein Child vom Container werden soll, musst du auch den Container als Parent angeben.

Code: Alles auswählen

OpenWindow(0,10,10,400,300,"Test",#PB_Window_SystemMenu)
SetWindowColor(0,RGB(2,150,86))

ContainerGadget(0,10,10,380,280)
  SetGadgetColor(0,#PB_Gadget_BackColor,RGB(27,227,247))
 
  ContainerGadget(1,20,20,340,240)
    SetGadgetColor(1,#PB_Gadget_BackColor,RGB(0,227,47))

OpenWindow(1,20,20,300,200,"",#WS_CHILD,GadgetID(1))

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
auch hier interessiert mich allerdings, wieso...
wo soll der sinn sein, ein komplettes fenster in ein container-gadget einzuzementieren?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Hi Kaeru Gaman,

der Sinn ist schon ein ganz spezieller: Ich brauche ein setzbares Gadget, das auf Windows-Events reagiert, aber in einem ContainerGadget enthalten ist, da meine HTML-Engine für Web 2.1 nur auf Gadgets und nicht auf WindowGadgets ausgerichtet ist und ich dort auf verschiedene Events reagieren muss. Ist ein wenig komplizierter als man das vielleicht erklären kann.

Das letzte Beispiel passt perfekt:

Code: Alles auswählen

OpenWindow(0,10,10,400,300,"Test",#PB_Window_SystemMenu)
SetWindowColor(0,RGB(2,150,86))

ContainerGadget(1,10,10,380,280)
  SetGadgetColor(1,#PB_Gadget_BackColor,RGB(27,227,247))
 
  ContainerGadget(2,20,20,340,240)
    SetGadgetColor(2,#PB_Gadget_BackColor,RGB(0,227,47))
  CloseGadgetList()
 
CloseGadgetList()

OpenWindow(3,20,20,300,200,"",#WS_CHILD,WindowID(0))

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Ich hatte gedacht das man mit UsegadgetList dem vorzeitigen Schließen entgegenwirken lässt, aber irgendwie schmiert der Code dann doch immer mal wieder ab. Deine o.g. Lösung passt. Danke auch für folgenden Hinweiss:
denn das Erstellen des neuen Fensters schließt alle zuvor geöffneten GadgetLists.
War mir bis dato nicht bekannt! Dachte das PB das als einz händelt, aber wenn man überlegt, kann man auch selbst darauf kommen.

:allright:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ich brauche ein setzbares Gadget, das auf Windows-Events reagiert, aber in einem ContainerGadget enthalten ist

hm... ein Gadget kann in einem ContainerGadget enthalten sein, und reicht dann auch ganz korrekt seine Events weiter.

> da meine HTML-Engine für Web 2.1 nur auf Gadgets und nicht auf WindowGadgets ausgerichtet ist und ich dort auf verschiedene Events reagieren muss.

öh... bahnhof?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

CNESM hat geschrieben: da meine HTML-Engine für Web 2.1 nur auf Gadgets und nicht auf WindowGadgets ausgerichtet ist und ich dort auf verschiedene Events reagieren muss.
Mal abgesehen davon das Web 2.x nur ein Modewort ist, könnte es sein das du versuchst Steuerelemente in einem Webgadget per Window-Events abzufragen? z.B. einen Button im Webgadget?

Gruß, Alex
Zuletzt geändert von cxAlex am 05.07.2009 18:26, insgesamt 1-mal geändert.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

>> ... Web 2.x [ist] nur ein Modewort ...

BINGO! :mrgreen:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Web 2.x ist nichts anderes als ein Modewort, da gebe ich euch recht, aber bei uns steht Web 2.1 für Applikationen, die online installiert sind, aber lokale ausgelagerte Module beinhaltet. Der Unterschied zu Web 2.0 ist, das rechnerintensive Arbeiten nicht nur lokal im Arbeitspeicher ausgeführt werden, sondern auch vom Server übernommen werden.
Mal abgesehen davon das Web 2.x nur ein Modewort ist, könnte es sein das du versuchst Steuerelemente in einem Webgadget per Window-Events abzufragen? z.B. einen Button im Webgadget?
Das u.a. auch, aber hierbei geht es eher um integrierte Online-Tools im Programm, die sich nur auf fensterähnlichen Objekten darstellen lassen. Ansonsten gehen viele Events der Tools verloren bzw. einige Tools lassen das Plazieren auf normalen Gadgets garnicht zu ("Inakzeptables Eltern-Objekt"). Mit einem Child-Fenster funktionierts. Somit habe auch die HTML-Engine auf Windows-Objekte ausgerichtet. Die HMTL-Engine verleiht den normalen PB-Gadgets die bekannten HTML Eigenschaften, ohne dies stets händig anpassen zu müssen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

>> einige Tools lassen das Plazieren auf normalen Gadgets garnicht zu ("Inakzeptables Eltern-Objekt"). Mit einem Child-Fenster funktionierts.

sicher?

also wirklich das korrekte Handle angegeben GadgetID(#Gadget)?
weil das eigentlich genauso ein Windowhandle ist wie WindowID(#Window).

wenn es mit einem Fenster funktioniert, sollte es eigentlich mit einem Container- oder Panel-Gadget auch funktionieren...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Vielleicht würde es gehen (obwohl manche Hersteller auch dort sagen, das das Einbindung immer auf dem Hauptfenster oder einem Fenster ähnlichen Darstellungsobjekt durchgeführt werden sollte, da manche Events ansonsten nicht korrekt verarbeiten werden können)

Ein, zwei Tools geben aber bereits beim Initialisieren die genannte Fehlermeldung aus ("Incorrect Parent-Object"). Daher hab ich keine Möglichkeit das über nen Container etc. zu machen. Bestimmt kann man das auch übergehen, aber wenn es ja mit einem Child-Fenster funzt, passt das ja :-)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

achso... interessant...

ich kenn was ähnliches von nem Hintergrundbild...
also wenn man ein ImageGadget als Parent verwendet, um weitere Gadgets draufzupacken,
werden die Events auch nicht korrekt an das äußere Fenster weitergeleitet.
das kann ja ein ähnlich gelagertes Problem sein.

nunja, wenn das so funktioniert, mit den Fenster als Child von nem Gadget, dann is ja gut.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten