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

amiga-news.de Forum > Programmierung > Toolbar-Buttons mit Reaction [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

01.06.2004, 19:46 Uhr

cgutjahr
Posts: 2782
[Administrator]
Ich schreibe gerade eine GUI - allerdings aufgrund mäßiger C-Kenntnisse mit ARexx (AWNPipe). Ich hoffe, ihr könnte eventuelle Lösungsvorschläge abstrakt genug halten, damit ich noch durchblicke ;) Mein Problem ist folgendes:

Meine GUI enthält eine Art "Toolbar" (die Buttons am oberen Fensterrand):

Screenshot


Die Buttons sind in einer Gruppe (bei AWNPipe nennt sich das "Layout") zusammengefasst. Die Gruppe hat die Eigenschaften "horizontal" (die Elemente der Gruppe sind horizontal angeordnet), "even" (alle Buttons in der Gruppe sind gleich groß) sowie "SpaceInner" und "SpaceOuter" ("Spacer" sowohl um die einzelnen Elemente als auch um die komplette Gruppe). Bei der Definition der Buttons wird nur der Gadget-Text und der gewünschte Zeichensatz angegeben, sonst nichts.

Mein Problem ist, dass die Buttons ebenfalls größer werden, wenn ich das Fenster vergrößere:

Screenshot


Wie kann ich das verhindern?

Die Dokumentation von AWNPipe ist da leider etwas dürftig. Beispielsweise kann ich für einen Button die Eigenschaften "minwidth"/"minheight", "weightedwidth"/"weightedheight" und "nominal size" ángeben. Während "minwidth" klar ist, ist mir etwas schleierhaft was "weightedwidth" sein soll (die "relative Größe" des Buttons im Vergleich zu den anderen Buttons?) und "nominal size" (ein Switch, der keine Parameter akzeptiert) sagt mir überhaupt nichts.

Hat jemand Vorschläge (ich hoffe ihr könnt mir folgen ;) )?

Ach ja, falls jemand sich mit AWNPipe auskennt, hier der entsprechende Code:

examplecode.txt

--
Gutjahrs :amiga: Seiten

[ Dieser Beitrag wurde von cgutjahr am 01.06.2004 editiert. ]

[ Dieser Beitrag wurde von cgutjahr am 01.06.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

01.06.2004, 20:40 Uhr

Mazze
Posts: 263
Nutzer
Hallo,

hat AWNPipe etwas mit ReAction zu tun?

Wenn ich bei ReAction verhindern will, dass sich ein Button beim Vergrößern des Fensters vergrößert, mache ich das so:

code:
LAYOUT_AddChild ButtonObject
   GA_ID ... etc
ButtonEnd
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,


Wenn sich mehrere Buttons in einem Layout befinden, gebe ich auch beim Layout die Weighted-Parameter an.
Die Weighted-Parameter sind eigentlich dazu da, um bei mehreren Gadgets die prozentualen Größenverhältnisse zueinander festzulegen. Bei '0' wird die kleinstmöglichste Größe veranlasst.

Nachtrag:
Ich habe mir den Screenshot angeschaut. In deinem Fall würde ich nur WeightedHeight angeben.

[ Dieser Beitrag wurde von Mazze am 01.06.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

01.06.2004, 21:48 Uhr

cgutjahr
Posts: 2782
[Administrator]
Zitat:
Original von Mazze:
hat AWNPipe etwas mit ReAction zu tun?

AWNPipe ist eine ziemlich mächtige GUI, die es (u.a.) ermöglicht, von jeder (Skript-)Sprache bzw. DOS aus eine Reaction-GUI zu erstellen (du schickst die GUI-Definition an die Pipe und wenn du das Fenster geöffnet hast wartest du darauf, dass die Pipe die Events zurückliefert). Die GUI kann dabei beliebig komplex sein und auch noch nachträglich geändert werden (Buttons (de)aktivieren, Einträge zu Listview hinzufügen etc.).

Ist halt leider nur mäßig dokumentiert...

Zitat:
code:
LAYOUT_AddChild ButtonObject
   GA_ID ... etc
ButtonEnd
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,


Hm, daraus werde ich jetzt nicht schlau, kannst du mal versuchen im Klartext zu beschreiben, was du da machst?

Zitat:
Die Weighted-Parameter sind eigentlich dazu da, um bei mehreren Gadgets die prozentualen Größenverhältnisse zueinander festzulegen. Bei '0' wird die kleinstmöglichste Größe veranlasst.
Ah, okay. Da hätte ich fast selbst drauf kommen können ;)

Zitat:
Ich habe mir den Screenshot angeschaut. In deinem Fall würde ich nur WeightedHeight angeben.
Warum?

Danke für die Tips.


--
Gutjahrs :amiga: Seiten

[ - Antworten - Zitieren - Direktlink - ]

01.06.2004, 22:38 Uhr

Mazze
Posts: 263
Nutzer
Zitat:
Zitat:
Ist halt leider nur mäßig dokumentiert...
ReAction selbst ist auch nicht besonders gut dokumentiert. Im NDK3.9 gibt es die Autodocs zu den ReAction-Klassen/Gadgets/Images.
Martin Elsners Kurs hat mir sehr geholfen.


Zitat:
code:
LAYOUT_AddChild ButtonObject
   GA_ID ... etc
ButtonEnd
CHILD_WeightedWidth, 0,
CHILD_WeightedHeight,0,


Hm, daraus werde ich jetzt nicht schlau, kannst du mal versuchen im Klartext zu beschreiben, was du da machst?
[/quote]
Wenn man in C eine ReAction-GUI schreibt, kommen 2 Besonderheiten der Sprache C zum Einsatz: Makros und flexible Parameterlisten. Schritt für Schritt würde das etwa so aussehen:
code:
Object *button1 = NewObject(BUTTON_GetClass(),NULL,
GA_ID, 1, GA_Text, "OK", GA_RelVerify, TRUE, TAG_DONE);
(GA_RelVerify ist erforderlich, damit ein Event ausgelöst wird, GA_ID steht dann im Event-Loop zur Verfügung)

Object *button2 = NewObject(BUTTON_GetClass,NULL,
GA_ID, 2, GA_Text, "Cancel", GA_Relverify, TRUE, TAG_DONE);

Object *inner_layout = NewObject(LAYOUT_GetClass(),NULL,
LAYOUT_AddChild, button1, //button 1 hinzufügen
CHILD_WeightedHeight, 0, //Höhe für button1 minimieren
LAYOUT_AddChild, button2, // button 2 hinzufügen
CHILD_WeightedHeight,0, // Höhe für button2 minimieren
TAG_DONE);

Object *outer_layout = NewObject(LAYOUT_GetClass(),NULL,
LAYOUT_AddChild, inner_layout,
CHILD_WeightedHeight, 0, //Höhe für Toolbar minimieren
... weitere Gadgets
TAG_DONE);


Gewöhnungsbedürftig ist, dass die CHILD...-Attribute zum Layout gehören, sie beeinflußen aber das unmittelbar zuvor erzeugte Gadget

Zitat:
Zitat:
Ich habe mir den Screenshot angeschaut. In deinem Fall würde ich nur WeightedHeight angeben.
Warum?
Die Taskbar soll in der Höhe zusammengestaucht werden. Dazu ist sowohl bei den Buttons als auch beim Layout, in dem die Buttons stehen, WeightedHeight,0 erforderlich.
In der Breite hängt es eigentlich nur davon ab, was dir optisch besser gefällt. Mit EvenSize hast Du ja bereits erreicht, dass alle Buttons gleich groß sind. Mit einem WeightedWidth,0 beim Layout könntest Du die Toolbar z.B. in die linke Ecke zwängen.

[ - Antworten - Zitieren - Direktlink - ]

02.06.2004, 15:11 Uhr

cgutjahr
Posts: 2782
[Administrator]
Zitat:
Original von Mazze:
ReAction selbst ist auch nicht besonders gut dokumentiert. Im NDK3.9 gibt es die Autodocs zu den ReAction-Klassen/Gadgets/Images.
Martin Elsners Kurs hat mir sehr geholfen.

Okay, werde ich mir mal ansehen, danke.

Zitat:
Schritt für Schritt würde das etwa so aussehen:
code:
Object *button1 = NewObject(BUTTON_GetClass(),NULL,
GA_ID, 1, GA_Text, "OK", GA_RelVerify, TRUE, TAG_DONE);
(GA_RelVerify ist erforderlich, damit ein Event ausgelöst wird, GA_ID steht dann im Event-Loop zur Verfügung)

Object *button2 = NewObject(BUTTON_GetClass,NULL,
GA_ID, 2, GA_Text, "Cancel", GA_Relverify, TRUE, TAG_DONE);

Object *inner_layout = NewObject(LAYOUT_GetClass(),NULL,
LAYOUT_AddChild, button1, //button 1 hinzufügen
CHILD_WeightedHeight, 0, //Höhe für button1 minimieren
LAYOUT_AddChild, button2, // button 2 hinzufügen
CHILD_WeightedHeight,0, // Höhe für button2 minimieren
TAG_DONE);

Object *outer_layout = NewObject(LAYOUT_GetClass(),NULL,
LAYOUT_AddChild, inner_layout,
CHILD_WeightedHeight, 0, //Höhe für Toolbar minimieren
... weitere Gadgets
TAG_DONE);


Gewöhnungsbedürftig ist, dass die CHILD...-Attribute zum Layout gehören, sie beeinflußen aber das unmittelbar zuvor erzeugte Gadget

Ah, jetzt steige ich durch! ;) Mit CHILD#? hatte ich schon so meine Probleme, gut zu wissen.

Vielen Dank für die Erläuterungen. WeightedWidth/height tut genau das, was ich brauche.

Eine Frage noch: Ist es möglich, einen Button zu erstellen, der sowohl ein Bild als auch einen Text enthält (ähnlich wie die Toolbar-Knöpfe in YAM)?

--
Gutjahrs :amiga: Seiten

[ - Antworten - Zitieren - Direktlink - ]

02.06.2004, 19:00 Uhr

Mazze
Posts: 263
Nutzer
Zitat:
Eine Frage noch: Ist es möglich, einen Button zu erstellen, der sowohl ein Bild als auch einen Text enthält (ähnlich wie die Toolbar-Knöpfe in YAM)?

Da bleibt Dir wohl nichts andres übrig, als den Text vorher ins Bild reinzumalen. Oder die Texte als Label-Image drunter zu setzen.

[ - Antworten - Zitieren - Direktlink - ]

03.06.2004, 15:49 Uhr

cygnusEd
Posts: 104
Nutzer
Hi,

Michael Christoph (Meicky-Soft) hat ebenfalls einen gelungenen Workshop
über Reaction gemacht. Wurde im Amiga-Magazin veröffendlicht und
ist über http://www.meicky-soft.de/amiga-magazin/reaction.html

online zu lesen.

Gruß
CygnusEd

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Toolbar-Buttons mit Reaction [ - Suche - Neue Beiträge - Registrieren - Login - ]


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