amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > MUI Frames statt Fenster [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

24.07.2006, 18:11 Uhr

DieterG
Posts: 164
Nutzer
MUI ist für mich immer so eine Sache, verstehen tue ich da nicht immer alles.
Gut, aktuell habe ich folgendes Szenario:
Wird in einem listview(+list) ein eintrag ausgewählt, wird ein 2. Listview(mit list) entspechend geöffnet bzw. geändert.
Wird dann in diesem 2. Listview ein Eintrag gewählt, wird ein Fenster geöffnet, das sehr unterschiedlich gestaltet sein kann, also keine liste mehr ist.

Nun will ic aber kein Extra Fenster öffnen, sondern innerhalb meines Fensters ähnlich dem Fenster die inhalte darstellen.
Da es keine reine liste mehr ist, sondern z.B. Gadgets verschiedenster Formen und Anzahl enthält,
komme ich mit einem weitern Listview bzw. mit einer weiteren List nicht weiter.

Wahrscheinlich ginge es, jeweils neue Childs zu einer sonst fast leeren Gruppe hinzuzufügen und wieder zu entfernen,
aber das ist doch recht umständlich.
Gibt es keine bessere Möglichkeit, eventuell ein Frame, das sich wie ein Fenster verhält, aber eben kein eigenes benötigt ?
Also ic habe nichts dergleichen gefunden, event. eine VirtGroup oder eine Area,
doch das scheint recht umständlich zu sein, und lohnt den Aufwand dann wieder nicht.

[ - Antworten - Zitieren - Direktlink - ]

24.07.2006, 23:42 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Ich denke mal du meinst soetwas wie auch der MUI Einsteller macht oder YAM oder?

Du kannst eine PageGroup nehmen,

code:
pagegroup = PageGroup,
 Child, VGroup,
  Elemente für erste Gruppe
 End,
 Child, VGroup,
  Elemente für zweite Gruppe
 End,
 Child, VGroup,
  Elemente für dritte Gruppe
 End,
 ...
 ...
 Child, VGroup,
  Elemente für letzte Gruppe
 End,
End,


Mit dem Attribut MUIA_ActivePage kannst du dann die jeweilige Gruppe anzeigen lassen, oder automatisch

code:
DoMethod(listview,MUIM_Notify,MUIA_NList_Active,MUIV_EveryTime,pagegroup,3,MUIM_Set,MUIA_Group_ActivePage,MUIV_TriggerValue);


Ich hoffe das ist etwas was dir weiterhilft.

[ - Antworten - Zitieren - Direktlink - ]

22.08.2006, 22:39 Uhr

DieterG
Posts: 164
Nutzer
Zitat:
Original von DariusBrewka:

Mit dem Attribut MUIA_ActivePage kannst du dann die jeweilige Gruppe anzeigen lassen, oder automatisch

code:
DoMethod(listview,MUIM_Notify,MUIA_NList_Active,MUIV_EveryTime,pagegroup,3,MUIM_Set,MUIA_Group_ActivePage,MUIV_TriggerValue);


Ich hoffe das ist etwas was dir weiterhilft.


Danke erstmal, hat mir sehr geholfen, war genau das was ich meinte.

Allerdings habe ich etwas probleme mit dem Notify. Mein Hook soll ausgeführt werden, sobald eine Seite gewechselt wird, bzw, winw Seite verlassen wird.

MUIM_Notify,MUIA_Group_ActivePage,-4 eventuell
oder auch statt der -4 (advanced) MUIV_EveryTime.

aber ich habe schon so einiges durchprobiert, eine ideale lösung ist mir noch nicht eingefallen, hat jemand eine Idee ?



[ - Antworten - Zitieren - Direktlink - ]

22.08.2006, 23:13 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von DieterG:
aber ich habe schon so einiges durchprobiert, eine ideale lösung ist mir noch nicht eingefallen, hat jemand eine Idee ?


wenn Ich verstehen würde was die Frage ist vieleicht, sorry nicht Böse gemeint. BZW. du hast einen Hook und du möchtest dass dieser Aufgerufen wird wenn du die ActivePage änderst?

Wenn dem so ist, dann müßte dein Konstrukt in dieser Form sein:

code:
DoMethod(pagegroup, MUIM_Notify, MUIA_Group_ActivePage, MUIV_EveryTime, pagegroup, 2+x,MUIM_CallHook, &PageHook, parameter1, parameter2,...);


wobei x die Anzahl der zusätzlichen Parameter angibt.

[ - Antworten - Zitieren - Direktlink - ]

23.08.2006, 17:54 Uhr

DieterG
Posts: 164
Nutzer
Zitat:
Original von DariusBrewka:
Zitat:
Original von DieterG:
aber ich habe schon so einiges durchprobiert, eine ideale lösung ist mir noch nicht eingefallen, hat jemand eine Idee ?


wenn Ich verstehen würde was die Frage ist vieleicht, sorry nicht Böse gemeint. BZW. du hast einen Hook und du möchtest dass dieser Aufgerufen wird wenn du die ActivePage änderst?

Wenn dem so ist, dann müßte dein Konstrukt in dieser Form sein:

code:
DoMethod(pagegroup, MUIM_Notify, MUIA_Group_ActivePage, MUIV_EveryTime, pagegroup, 2+x,MUIM_CallHook, &PageHook, parameter1, parameter2,...);


wobei x die Anzahl der zusätzlichen Parameter angibt.


Genau das meine ich, hast mich also richtig verstanden.

Allerdings scheint das ncith so ganz das zu sein, was ich haben will.
Soweit ich das nun verfolgen konnte, wird mein hook dann immer aufgerufen, wenn etwas auf der
aktuellen Page gedrückt wird, jedoch nicht, wenn das wieder losgelassen wird.
Ich habe versucht mittels MUIV_TriggerValue auf FALSE oder TRUE auszuwerten, aber es scheint wirklich so zu sein, das so nur das anzeigen der Page, aber nicht das verlassen der Page gemeldet wird.
Die Auswirkungen sind dadurch so, das ich z.B. beim wechseln der Page mit den neuen werten statt mit den gerade verlassnene arbeite, und diese damit verloren sind.

Noch jemand ne idee ?

[ - Antworten - Zitieren - Direktlink - ]

23.08.2006, 18:41 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von DieterG:
Die Auswirkungen sind dadurch so, das ich z.B. beim wechseln der Page mit den neuen werten statt mit den gerade verlassnene arbeite, und diese damit verloren sind.

Noch jemand ne idee ?


Du meinst z.B. wenn du einen String auf Page1 hast und einen auf Seite2, daß wenn du von 1 auf 2 schaltest dass der String in 1 weg ist?

Das ist er gewiss nicht, das Object auf Seite 1 existiert immer noch und darauf kann auch zugegriffen werden bzw. Ich vermute das mal, wenn nicht
sollte man für jedes Element ein Notify setzen und die Einstellung direkt abspeichern und nicht erst nachträglich.

Du bekommst keine Message bevor du die Seite verläßt um zuvor Einstellungen zu sichern, du bekommst nur bescheid dass die Seite gewechselt wurde, das dürfte aber i.A. nicht die Schwierigkeit darstellen.

Jedes Object was erzeugt wird ist auch vorhanden, auch wenn es nicht dargestellt wird.

[ Dieser Beitrag wurde von DariusBrewka am 23.08.2006 um 18:43 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

01.09.2006, 12:51 Uhr

DieterG
Posts: 164
Nutzer
@DariusBrewka:
Grundsätzlich hast Du recht, aber ich wechsle eben nicht nur die Page, sonder abhänging von einer anderen selection auch den inhalt.
Also man kann sich das vorstellen wie 10 Masken, die abhänging von einer Auswahl beim Umschalten mittles meines Hook mit dem entsprechenden inhalten gefllte wird. Beim verlassen muss ich also die änderungen alle vorher übernehmen, und seperat speichern, da beim nächsten öffnen ganz andere werte eingestellt werden müssen. Allerdings wenn diese Seite (Maske) nicht mehr geöffnet wird, würde ich den jetzigen inhalt nicht mehr der dabei eingetsllten anderen selction zuordnen können.

Es schein also so, das mit den pages mein Problem nur mittels eines "übernehmen"-Buttons aus der welt zuu schaffen ist. Oder gibt es nicht irgendeinen Trick, um das verlassen der seite zu bemerken, ohne jedes einzelne Gadget mittels hook abzufragen ?
Beziehungsweise eine ander Lösung für mein Problem ?

[ - Antworten - Zitieren - Direktlink - ]

02.09.2006, 00:14 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
So Ganz steige Ich da nicht durch, denn du weißt ja welche Seite geöffnet ist, dann kanst du die Werte zuerst mittels get() auslesen und auf die Neue Seite schalten, die Pagegroup kannst du ja nicht einfach per Mausklick umschalten, daß dir die Änderungen verloren gehen.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 09:40 Uhr

DieterG
Posts: 164
Nutzer
@DariusBrewka:
Die Page kann aber auf vielerlei Arten verlassen werden, bzw. deren Inhalt überscirben werden.
Z.B. durch Änderung der Seite über die eigentliche Pageliste, (wobei einige auch keine eigene Page haben, sondern eine generelle nutzen), oder durch Ausswahl einer andere einstellunen derselben Page (wie gesagt, s ähnlich wie Masken, die dan mit dem korrekte inhalt gefüllt wird),
oder beim ändern der Hauptpage, oder beim schliessen des programms oder bei was weiß ich noch alles....

Also muss ich vor öffnen einer Page den inhalt reinschreiben, auch beim ändern der Selection für die inhalte is das kein problem, den ich mach die seite aktiv auf, und das fange ich ab.

Aber beim verlassen gibt es einfach zu viele möglichkeiten. Vorher war das schliessen def fensters ein event, das ich abfange konnte, und den inhalt noc schnell zu übernehmen, aber jetzt habe ic nur ein event beim anzeigen, nicht mehr beim verlassen dieser Seite.
Das einzige was mir dazu jetzt einfällt, ist ein extra gadget für manuelles "übernehmen", was de Schliessknopf des Fensters gleichkommen würde.

Oder gibt es ein andere möglichkeit, z.b. eventuell die Page als Gadget zu definieren, dann müsste doch nach jeder änderung irgendeines inhalts der seite ein event kommen, hiergegen spricht nur, das normalerwese nur das obere Gadget aktiviert, bzw. deaktiviert wird und nicht ein darunterliegendes grösseres.
Aber könnte dieses prinzip, eventuell die Pages in eine List oder sonstwas zu stecken, helfen mein Ziel zu erreichen ?

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 12:00 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Ich glaube Ich verstehe immer noch nicht so Richtig wo das Problem ist. Soweit ich das Überblicke hast du ein Problem, dass du nur mitgeteilt bekommst das Die Page gewechselt wurde, aber nicht bevor diese geändert wird oder?, d.h. du willst Einstellungen der Aktiven Page zwischenspeichern bevor eine Neue angezeigt wird? Wie Ich oben schon erwähnte hat eine Pagegroup kein selector, d.h. diese kann nicht durch den User umgeschaltet werden ohne dass das Programm dazwischenfunkt, z.B. indem der Programmierer eine Liste zum umschalten anbietet.

Damit hast du doch eine Möglichkeit herauszufinden ob die Page gewechselt werden soll, d.h. du bekommst genau dann ein Event bevor du mittels set() MUIA_Group_ActivePage änderst.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 12:09 Uhr

DieterG
Posts: 164
Nutzer
Zitat:
Original von DariusBrewka:
Ich glaube Ich verstehe immer noch nicht so Richtig wo das Problem ist. Soweit ich das Überblicke hast du ein Problem, dass du nur mitgeteilt bekommst das Die Page gewechselt wurde, aber nicht bevor diese geändert wird oder?, d.h. du willst Einstellungen der Aktiven Page zwischenspeichern bevor eine Neue angezeigt wird? Wie Ich oben schon erwähnte hat eine Pagegroup kein selector, d.h. diese kann nicht durch den User umgeschaltet werden ohne dass das Programm dazwischenfunkt, z.B. indem der Programmierer eine Liste zum umschalten anbietet.

Damit hast du doch eine Möglichkeit herauszufinden ob die Page gewechselt werden soll, d.h. du bekommst genau dann ein Event bevor du mittels set() MUIA_Group_ActivePage änderst.


Genau, wenn die Page gewchselt wird, dann habeich ein event.
Aber wenn der andere selector nur den inhalt der seite ändert, ohne die eigentliche pageumzuschalten, oder der user das programm verlässt, oder der Hauptreiter auf eine ganz andere Seite wechselt, oder oder oder...

Du verstehst ?
Es geht nicht darum, das ich irgendwie events bekomme, sondern das ich jede menge möglicher events berücksichtigen müsste, die eventuell was mit verlassen oder inhaltänderung der Page zu tuen haben könnte.
Was das ganze einfach zu kompliziert und unübersichtlich macht.

Ein einfaches Event, die Seite soll aus IRGENDEINEM Grund verlassen werden,
hiesse, ich müsste nur noch den einen Selector, der den Seiten-INHALT ändert, berücksichtigen.

Wie gesagt, vorher war da ein eigenes Fenster, das hat praktisc das hauptfenste geblockt, damit musste erst das fenster geschlossen werden (event) und alles war klar.
Vieleict sind wir einfach mit den Pagegruppen den falschen weg gegangen, eine Gruppe, die wie ein fenster behandelt wird, aber als Frame im Hauptfenster angezeigt wird, wäre das idealste.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 12:28 Uhr

Kronos
Posts: 1168
Nutzer
Ich weiss zwar (immer noch) nicht was du eigentlich willst, aber du hast mich schon ganz wuschig gemacht ......

Also wenn du Objekte (wie ein ListView) hinzufügen/entfernen willst kannst du das mit OM_ADDMEMBER/OM_REMEMBEDR die allerdings von einem Paar MUIM_Group_InitChange/MUIM_Group_ExitChange eingefasst werden müssen.

Wobei die Objekte auch gerne selber Gruppen sein dürfen.

Wenn du schon verher weisst welche Art von Objekten du hinzufügen willst, kannst du auch einfach ALLE in die Gruppe packen, und dann mit MUIA_ShowMe steuern welche sichtbar sind (was ich stark empfehlen würde).

Bei beiden Methoden bleiben alle Objekte erhalten und sind auch immer voll ansprechbar (sprich ein String der vor dem Verstecken "beiss mich" hiess tut es auch wenn er nicht sichtbar ist, ja du kannst ihn sogar ändern.

Was du jetzt vor hast klingt für mich wie eine Art MUI-Builder, und dann solltest du für das Fenster Methode 1 wählen, wobei ich bei beiden Methoden immer Probleme hatte HSpace/VSpace hinzuzufügen.

MfG
Kronos
--
Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

06.09.2006, 20:44 Uhr

DieterG
Posts: 164
Nutzer
Also ich weiss wirklich nicht wie ich es noch besser beschreiben könnte.

Einfach gesagt, ich habe vielerlei Pages, auf einer dieser page gibt es eine list, wo man etwas auswählen kann, dann erscheint eine weitere liste, die eine beliebige anzahl von einstellungen für eine andere, dazu passende page verwalten kann.


Problem: ich habe zig möglichkeiten ein event zu bekommen, jedoch keines beim verlassen der letzten page.

Lösungsmöglichkeit: auf jegliches event, was eine seiten-, einstellungs- oder einfach nur verlassen der Page zur folge haben könnte abzufangen und darauf zu reagieren.
Oder dann einfacher, jedes auf jeder Seite enthaltene Element mittels eins eigenne Hoks abzufangen, das sind zwar nur etwa 100 Stück, aber da lassen sich betimmt gleiche hooks mehrfach verwenden.

Vieleicht hilft auch ein Schema weiter, das probelm zu verstehen:

PAGE1
PAGE2---Selection1
PAGE3 +-Selection2----SubPage3---Speicher1
PAGE4 +-Selection3 +-Speicher2
PAGE5 +-Selection4 +-Speicher3
PAGE6

Nur s als Beispiel wie ich die verzweigung meine.
Da letzlich der speicher den inhalt der Subpage bestimmt, muss dieser auch immer geändert werden, also beo auswahl des speichers muss die
Subpage den richtigen inhalt in die gleiche Subpage3 bekommen, das geht auch, aber beim verlassen
muss ich den inhalt vorher wieder im richtigen speicher ablegen.
Wüde als jemand die PAGE, die Selection, oder den Speicher vechseln, oder enfach nur das Programm beenden, oder
was weiss ich tuen muss der Inahlt vorher in den noch selectierten Speicher geschrieben werden.
Würde im monet jemand die PAGE wechseln, würde ich darüber nur über umwege ein event erhalten, und
könnte auf keinen fall mehr die änderungen auf der Subpage einem speicher zuordnen können.

[ - Antworten - Zitieren - Direktlink - ]

06.09.2006, 21:59 Uhr

Kronos
Posts: 1168
Nutzer
Mann ich werd immer noch wuschiger......


Also MUIA_ActivePage liefert hier pro Page-Wechsel einen Event, und da in dem Moment alle Objekte noch ihre alten Werte haben wär es früh genug zum auslesen und sichern, bevor du dann die Pages änderst. Eventuell musst du halt auf jeden Page-Wechsel reagieren und dann mittels einer extra Variablen überprüfen ob grad die eine bestimmte Page verlassen wurde.

Auch schreibst du viel über Hooks, ohne das ich sehe wofür du die wirklich brauchst. Für sowas mache ich immer eine Costum-Klasse auf Basis von MUI-Notify. Einfach ein paar MUIM_###### definieren und passene Funktionen aufrufen (in in dem Objekt dazu kann man auch gleich Variablen wie die von weiter oben mit reinstecken).

Mann kanns auch brutal machen, für ganze Gruppen nur jeweils eine MUIM und in der Funktion einfach noch mal alle Werte aus den Objekten auslesen :glow:

Wie gesagt, so richtig klar ist das immer noch nicht was du willst, der einzige Vergleich der mir jetzt einfällt ist mein ObjectWindow, bei dem man auf einer Page eine ListView mit den ganzen Objekten (Rechtecke,Kreise etc, also keine MUI-Objecte) hat und dann je nach dem welches Objekt angewählt wurde der Rest der Pages angepasst wird.


MfG
Kronos
--
Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

07.09.2006, 00:37 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Ich verstehe das Problem leider immer noch nicht, denn für mich ist es klar dass du zum Verändern der Seite

code:
set(obj, MUIA_PageGroup_Activepage, xxx);


aufrufen mußt, damit wird die Page erst verlassen wenn du dieses ausführst, kannst also vorher die Werte Speichern.

d.h.

code:
//code bevor die seite verlassen wird == alte page
//hier die werte der alten Page sichern
...
...
//seite wechseln
set(obj, MUIA_PageGroup_Activepage, xxx);
// ab hier ist die Page gewechselt


das ist doch genau das was du suchst, es funktioniert halt nur nicht, wenn du zwischen z.B einem Listview und der Pagegroup einen Automatischen Pagewechsel machst mittels z.B.

code:
DoMethod(listview,MUIM_Notify,MUIA_NList_Active,MUIV_EveryTime,pagegroup,3,MUIM_Set,MUIA_Group_ActivePage,MUIV_TriggerValue);


aber du kannst halt den Listview ein Hook zuweisen, der auf selektionsänderungen reagiert und dieser Hook ändert die Page, kann aber zuvor deine Werte sichern.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > MUI Frames statt Fenster [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.