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: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: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: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:Du kannst vor den Label-Text " |