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

amiga-news.de Forum > Programmierung > MUI relative Größenangaben ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

27.03.2006, 20:33 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Kann ich MUI Groups (HGroup, VGroup) relative Größenangaben geben ?
Z.B wenn ich 2 HGroups habe, das dann einen 80% und die andere 20% des Fensters bekommt ?
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

27.03.2006, 21:05 Uhr

geit
Posts: 332
[Ex-Mitglied]
Die Tags MUIA_HorizWeight und MUIA_VertWeight müßten genau machen, was du suchst!

Damit stellst du die Gewichtung zwischen den einzelnen Elementen ein.

Weitere Infos findest du im MUI_Area.doc des MU SDKs!

Geit

[ Dieser Beitrag wurde von geit am 27.03.2006 um 21:11 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

27.03.2006, 23:34 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@geit:
Erst mal Danke für die schnelle Antwort.
Irgendwie habe ich ich noch ziemliche Probleme beim gestalten der GUI.
Größenangaben gleich welcher Art, ob für Gruppen oder das ganze Fenster werden einfach ignoriert.

Auch das Size Gadget zum einstellen der Fenstergröße funktioniert nur noch vertikal.

Siehe Screenshot:
http://amidevcpp.amiga-world.de/AfA_Screenshots/groups1.jpg

In den Autodocs habe ich auch irgendwo gelesen, das ein falsches Layout da Probleme verursachen kann. Leider stand da nicht bei, was denn nun ein falsches Layout ist.

Hier mal mein GUI code:
C++ code:
Object *wnd, *app, *but, *but2, *Edit1, *Edit2, *Edit3, *Edit4, *Edit5, *Edit6, *zielposition;
    CNC cnc1; 
    
         // GUI creation
    static char *Pages[]   = { "Nullpunkteinstellung","CNC Editor","Schrittbetrieb",NULL };

    app = ApplicationObject,
    SubWindow, wnd = WindowObject,MUIV_Window_Width_Visible(100),MUIV_Window_Height_Visible(100),
    MUIA_Window_Title, "AROS CNC Steuerungsprogramm",
    WindowContents, VGroup,
    Child, HGroup,
    
	End,
    Child, HGroup,Child, HSpace(0),
    //Tabs erzeugen. Namen aus Liste in Pages[]
    Child, RegisterGroup(Pages),
                    //Nullpunkteinstellung            
					MUIA_Register_Frame, TRUE,
					Child, but2 = SimpleButton("_Programm starten"),
					//CNC Editor
                    MUIA_Register_Frame, TRUE,
					Child, but = SimpleButton("_Ok"),
                    MUIA_Register_Frame, TRUE,
					Child, zielposition = StringObject,
	                End,
					End,
				
                   
    Child, VGroup,Child, VSpace(0),
	Child, Edit1 = StringObject,
	End,
    Child, Edit2 = StringObject,
    End, 
    Child, Edit3 = StringObject,
    End, 
    Child, Edit4 = StringObject,
    End, 
    Child, Edit5 = StringObject,
    End,
    Child, Edit6 = StringObject,
    End, 
    End,
    
    
    End,				
    End,
    End,
    End;

--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 10:49 Uhr

Kaesebroetchen
Posts: 643
Nutzer
Nachdem ich mit überlegen nicht weiterkam, habe ich ein bisschen mit den End, Tags herumgespielt und damit ein halbwegs brauchbares Layout hinbekommen das sich aber nur horizontal vergrößern lässt.
Und irgendwie kann ich die Logik in diesem Child,...,End, System noch nicht erkennen.
Laut dem MUIdev.guide sollte doch hinter jedem xyzObject, ein , End; kommen ?
Damit kompiliert der code aber nun gar nicht.

Kann mir das mit der Child,..,End, Geschichte vielleicht mal jemand erklären oder ein Beispiel posten ?
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 11:17 Uhr

geit
Posts: 332
[Ex-Mitglied]
Ja, eigentlich sollten diese Tags ja die Benutzung von MUI vereinfachen, aber das tun sie nur bedingt.

Schau einfach in include/libraries/mui.h und dir fällt ed wie schuppen von den Augen! :)

CHILD ist einfach nur ein "TAG", END ist "TAG_DONE)"

Die Gadgets sind einfache Funktionen z.b. VGROUP ist "MUI_NewObject(MUIC_Virtgroup"

Einige Compiler haben damit schon ihre Probleme, da ist es nur verständlich, wenn der Programmierer da auch ins straucheln kommt!

Eigentlich ist die ganze GUI nur eine Verschachtelung von Gadgets.
C++ code:
app = MUI_NewObject(MUIC_Application
 MUIA_Window_RootObject, Object1,
  MUIA_Group_Child, Object2,
  MUIA_Group_Child, Object3,
  MUIA_Group_Child, Object4,
 TAG_DONE);

Schon macht der letzten "END;" einen Sinn, weil das dem "TAG_DONE);" entspricht.

Da es unpraktisch ist die Objekte  1-4 vorher zu erstellen, wir das recursiv und verschachtelt gemacht.

app = MUI_NewObject(MUIC_Application
   MUIA_Window_RootObject, MUI_NewObject(MUIC_Group,
        MUIA_Group_Child, Object2,
        MUIA_Group_Child, Object3,
        MUIA_Group_Child, Object4,
       TAG_DONE),
   TAG_DONE);

Hier mal für die globale Gruppe des Fensters und schon siehst du wieder einen "TAG_DONE),", der die Funktion abschließt und einem "End," enspricht.

app = MUI_NewObject(MUIC_Application
 MUIA_Window_RootObject, MUI_NewObject( Object1 = MUI_NewObject( MUIC_Group,
               MUIA_Group_Child, Object2 = MUI_NewObject(MUIC_Text, TAG_DONE),
               MUIA_Group_Child, Object3 = MUI_NewObject(MUIC_Text, TAG_DONE),
               MUIA_Group_Child, Object4 = MUI_NewObject(MUIC_Text, TAG_DONE),
              TAG_DONE),

 TAG_DONE);

Hier die saubere Makrofreie Version mit allen vier Gadgets.


Ich hoffe es ist jetzt etwas klarer!

Geit



[ Dieser Beitrag wurde von geit am 28.03.2006 um 11:23 Uhr geändert. ]


[ Dieser Beitrag wurde von geit am 28.03.2006 um 11:24 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 12:59 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von geit:
Da es unpraktisch ist die Objekte 1-4 vorher zu erstellen, wir das recursiv und verschachtelt gemacht.

Und weil rekusiv und verschachtelt so viel übersichtlicher und praktischer ist, hat der Erfinder dieser Vorgehensweise ein paar Makros erfunden, die das Ganze NOCH lesbarer machen, in dem sie die Rekursion und Verschachtelung verschleiern. Nur deshalb können Programmierer wie Kaesebroetchen auf den ersten Blick erkennen, was dieser Source-Code macht.
Außerdem spart man dabei ca. 5 Zeichen und zwei Zeilenumbrüche im Source-Code.

Zitat:
Original von Kaesebroetchen:
Nachdem ich mit überlegen nicht weiterkam, habe ich ein bisschen mit den End, Tags herumgespielt und damit ein halbwegs brauchbares Layout hinbekommen das sich aber nur horizontal vergrößern lässt.

Du hast ja auch keine Objekte, die sich vertikal vergrößern lassen. Buttons und StringGadgets haben eine feste Höhe, und die Container berechnen ihre maxmale Größe auf ihrem Inhalt.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 13:10 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@geit
Danke für die Hilfe, ich glaube allmählich kriege ich das in den Griff.

Kannst du mir vielleicht noch mal sagen ob es bei MUI diese Rahmen mit Beschriftung gibt, mit denen man Elemente optisch zusammenfassen kann ?
Ausserdem brauche ich noch BitmapButtons und eine Statusleiste.

Siehe Screenshot:

http://amidevcpp.amiga-world.de/AfA_Screenshots/msa1.jpg

http://amidevcpp.amiga-world.de/AfA_Screenshots/msa2.jpg

Wäre super wenn du mir da die richtigen Stichworte sagen könntest.

--
http://amidevcpp.amiga-world.de/

[ Dieser Beitrag wurde von Kaesebroetchen am 28.03.2006 um 13:11 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 13:17 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Kaesebroetchen:
Kannst du mir vielleicht noch mal sagen ob es bei MUI diese Rahmen mit Beschriftung gibt, mit denen man Elemente optisch zusammenfassen kann ?
Ausserdem brauche ich noch BitmapButtons und eine Statusleiste.

Das richtige Stichwort für die Rahmen kann ich Dir ad-hoc nicht sagen, aber die anderen Komponenten sind trivial, weil MUI-Objekte ziemlich generisch sind. Du mußt sie nur evtl. mit der ausgeschriebenen Syntax, statt mit den C-Makros erzeugen.
Soll heißen: der MUI-Button kann problemlos beliebige Image-Objekte, also auch BitMaps statt Text darstellen. Und die normale Textzeile (Label, oder wie auch immer das jetzt gerade unter MUI heißt) kann auch mit einem beliebigen Rahmen versehen werden und ne Statuszeile ist letztendlich auch nur eine beliebige Komponente, nur halt am unteren Fensterrand.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 13:18 Uhr

geit
Posts: 332
[Ex-Mitglied]

Das geht praktischerweise mit den Gruppen selber.

Also einfach nach dem VGROUP oder innerhalb der Group Taglist definieren:

Das macht einen Ramen:

MUIA_Frame, MUIV_Frame_Group

Das macht einen Ramen mit Titel
MUIA_Frame, MUIV_Frame_Group, MUIA_FrameTitle, "Hallo", MUIA_Background, MUII_GroupBack

Einfacher geht es hier allerdings wirklich mit:

GroupFrame

oder

GroupFrameT( "Hallo" )

Geit

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 13:25 Uhr

geit
Posts: 332
[Ex-Mitglied]
Wenn du dein String Beispiel auch vertical ziehbar machen willst, mußt du in die Gruppen einen Spacer einbauen. Dieser ist nichts anderes als ein leerer Bereich, der die Größe ausfüllt.

Wird wie ein normales Gadget definiert: Child, HVSpace,

Du mußt natürlich in allen Spalten einen Spacer oder ein vertikal ziehbares Gadget haben, sonst funktioniert es nicht.

In diesem Beispiel ist das aber nicht sinnvoll, da die Gadgets nur weiter auseinander driften.

Wenn aber z.B. zwei Gruppen nebeneinander sind und Links ein String und recht eine Liste wäre, dann wäre die Liste vertikal nicht ziehbar, weil die linke Gruppe die maximale Größe definiert. Dann müßtest du einen Spacer unter das Stringfeld pappen, damit auch die linke Spalte eine variable Höhe haben kann.

Geit

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 18:07 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@geit:
Hier mal der aktuelle Stand der GUI:

http://amidevcpp.amiga-world.de/AfA_Screenshots/cnc.jpg

Die Buttons neben den slidern konnte ich nur in ihrer Größe anpassen indem ich die alle in extra Groups gepackt habe.
Ist das so üblich bei MUI oder gibt es für die Gadgets extra Größen Tags ?

Dann habe ich noch versucht mit Child, HVSpace einen Abstand zwischen den GroupFrames und dem Rand der Tabs/Register zu erzeugen doch der war gleich genauso groß wie die drei Groups und reagierte ebenfalls nicht auf HVSpace.
Gibt es da noch andere Tags für ?

Für die Eingabe des CNC Programmcodes brauche ich noch ein großes Memo.
Kann ich dafür ein StringObject nehmen oder gibt es da was anderes ?
Achja die Label hätte ich gerne links statt rechtsbündig.

Wenn ich die ganzen Gadgets erzeugt habe, dann muss ich da ja auch noch strings auslesen und hineinschreiben. Gibt es da eine einfache Methode für ?


--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 01:12 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Kaesebroetchen:
Achja die Label hätte ich gerne links statt rechtsbündig.

Du kannst vor den Label-Text "\033l" setzen. Oder Du gibst MUIA_Text_PreParse, "\033l" für die betroffenen Labels an und läßt den eigentlichen Text unberührt. Letzteres spart wohl etwas Speicher in der Anwendung, vergrößert dafür aber den Source-Code.

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 11:18 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@Holger:
Danke Holger!

Das mit dem MUIA_Text_PreParse, "\033l"
hat keinen Effekt auf die Ausrichtung des Textes,
aber wenn man das \0331 vor den Text stellt klappt es wunderbar.


--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 13:52 Uhr

p-OS
Posts: 131
Nutzer
Zitat:
Original von Kaesebroetchen:
Für die Eingabe des CNC Programmcodes brauche ich noch ein großes Memo.
Kann ich dafür ein StringObject nehmen oder gibt es da was anderes ?

Das StringObject von MUI bietet, zumindest in der Version 3.8, an der sich Zune ja orientiert, keine Möglichkeit für mehrzeilige Texteeingabefelder.
Du könntest die TextEditor.mcc verwenden, die auch für AROS verfügbar ist.

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 16:10 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@p-OS:
Erst mal danke für die vielen Hinweise.
Das mit dem TextEditor.mcc für Aros muss relativ neu sein,
bei meinem SDK fehlte das komplett.
Ich habe mir jetzt erst mal das aktuellste Aros SDK heruntergeladen,
meine ganzen Anpassungen für C++ nochmal gemacht und müsste jetzt alles haben um so ein TextEditor.mcc zu benutzen.

Leider sind die Beispielcodes die ich bisher dafür gesehen habe sehr umfangreich und da ich noch nicht mit mcc's gearbeitet habe auch ziemlich unverständlich.

Hat vielleicht jemand ein ganz einfaches Beispiel dafür wie man so ein TextEditor.mcc in eine GUI einbaut ?
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > MUI relative Größenangaben ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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