amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > MUI Bitmap Button [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2006-03-28, 19:48 h

Kaesebroetchen
Posts: 643
User
Hat vielleicht jemand ein kleines codebeispiel wie ich eine Bitmap in einen Button kriege ?

Hilfreich wäre auch zu wissen, welche Dateiformate MUI da so nimmt.
Windows BMP ?, Amiga ILBM ?
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2006-03-28, 20:35 h

thomas
Posts: 7717
User
Zitat:
Hilfreich wäre auch zu wissen, welche Dateiformate MUI da so nimmt.
Windows BMP ?, Amiga ILBM ?


Alle, für die du Datatypes installiert hast.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Answer - Quote - Direct link - ]

2006-03-28, 21:58 h

Kaesebroetchen
Posts: 643
User
Ich habe jetzt erst mal versucht mit ImageObject ein Bild zu laden:

code:
Child, bitbut1 = ImageObject, MUIA_Image_Spec, "5:cnc.png", End,


Es wird jedoch nur ein kleines Rechteck angezeigt.
Es scheint tatsächlich ein kleiner Ausschnitt des geladenen Bildes zu sein, denn wenn ich anderes Bild lade ändert sich die Farbe entsprechend.
Auf jedenfall ist da noch der Wurm drin, denn wenn ich das Programm beende schmiert mir Aros ab.
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2006-03-28, 22:22 h

Kaesebroetchen
Posts: 643
User
Das mit dem Absturz hat sich erledigt. Man sollte halt Objekte entweder ein Bild oder ein Button sein lassen und nicht beides auf einmal...

Nachdem ich meinen Code so geändert habe:

code:
Child, bitbut2 = ImageObject,MUIA_Image_FreeHoriz, TRUE, MUIA_Image_FreeVert, TRUE, MUIA_Image_Spec, "5:Bilder/cnc2.png",  End,

sieht das ganze jetzt so aus:

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

Vielleicht sollte ich doch einfache Textbuttons nehmen ?
Der zeitaufwand steht jedenfalls schon lange in keinem verhältnis mehr zum nutzen...
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2006-03-29, 00:54 h

Holger
Posts: 8116
User
Zitat:
Original von Kaesebroetchen:
Vielleicht sollte ich doch einfache Textbuttons nehmen ?
Der zeitaufwand steht jedenfalls schon lange in keinem verhältnis mehr zum nutzen...

Wolltest Du nicht sowieso Buttons haben?
Wie schon gesagt, da gibt's bei MUI gar keinen Unterschied. Setze als Button Text "33I[5:Bilder/cnc2.png]" und es sollte Dein Bild im Button erscheinen. Hoffe, ich hab das jetzt richtig zusammengekramt.

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

[ - Answer - Quote - Direct link - ]

2006-03-29, 11:24 h

Kaesebroetchen
Posts: 643
User
Zitat:
Original von Holger:
Wolltest Du nicht sowieso Buttons haben?
Wie schon gesagt, da gibt's bei MUI gar keinen Unterschied. Setze als Button Text "33I[5:Bilder/cnc2.png]" und es sollte Dein Bild im Button erscheinen. Hoffe, ich hab das jetzt richtig zusammengekramt.

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


Krrraaasss !
Das geht ja viel einfacher als ich das jemals erwartet hätte!
Die Bilder werden zwar nicht in das executable integriert, aber für den Anfang reicht mir das.

Wenn du mir jetzt noch verraten könntest wie ich die Größe des Buttons / Bildes so anpassen kann dass das ganze Bild angezeigt wird ?


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

[ - Answer - Quote - Direct link - ]

2006-03-29, 12:43 h

Kaesebroetchen
Posts: 643
User
Kann mir vielleciht jemand verraten, wie ich das Bild in meinem Button vollständig angezeigt kriege ?

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

[ - Answer - Quote - Direct link - ]

2006-03-29, 13:46 h

p-OS
Posts: 131
User
@Kaesebroetchen:

Die Idee mit der Verwendung von [5:...] im Text ist keine so gute Idee.
Es funktioniert zwar grundsätzlich bei allen MUI-Objekten (z.B. auch bei BubbleHelp) mit Text diese Möglichkeit, aber mit den von dir beobachteten Einschränkungen. Das Problem ist, daß für die Höhe der Grafik maximal soviel Platz zur Verfügung steht, wie die Schrift in dem Text groß ist.
Noch was grundsätzliches zu Buttons in MUI:
Es gibt eigentlich keine Button Objekte. Du kannst jedes MUI-Objekt durch Zuweisung der entsprechenden Eigenschaft zu einem Button machen. Werf mal einen Blick auf die Definition des ButtonObject in der mui.h .

Vorschlag 1:
Du konvertierst IFF-Bilder mittels des im MUI-Developer-Archiv enthaltenen Programms brush2c in entsprechenden C-Code. Dann hast du die Grafikdaten in deinem Programm selbst. Zur Anzeige verwendest du das ImageObject mit Verweis auf die Daten. Hab grad leider keine MUI-Docs zur Hand...
Dem Objekt weist du noch nen Frame vom Typ MUIV_ButtonFrame sowie die Button-Eigenschaft zu.

Vorschlag 2:
Du kopierst dir den Code aus dem ButtonObject Makro und ersetzt das TextObject durch ein MUI_NewObjectA('DTpic.mcc',...).

Für MUI gibt es eine Reihe von fertigen externen Klassen für das Einbinden von einzelnen Grafiken wie auch kompletter Toolbars. Leider aber nicht für AROS.


Offensichtlich machst du gerade deine ersten Erfahrungen mit MUI.
Mir hat es damals sehr geholfen, mit dem MUIBuilder (Aminet) herumzuexperimentieren. Ist zwar schon recht alt und unterstützt keine externen Klassen, aber zum Rumprobieren trotzdem noch gut zu gebrauchen. Das Tool erlaubt das Erstellen von Oberflächen mittels Maus und bietet eine Vorschau-Funktion. Bei Bedarf kannst du dir den zugehörigen Code (u.a. für C) generieren lasssen.

[ - Answer - Quote - Direct link - ]

2006-03-29, 18:51 h

Holger
Posts: 8116
User
Zitat:
Original von p-OS:
... Zur Anzeige verwendest du das ImageObject mit Verweis auf die Daten. Hab grad leider keine MUI-Docs zur Hand...
Dem Objekt weist du noch nen Frame vom Typ MUIV_ButtonFrame sowie die Button-Eigenschaft zu.

Prinzipiell empfehlenswert, aber siehe oben. Er hat bereits mit dem ImageObject expermentiert, und das Ding nimmt nicht die richtige Größe an. Dieses Problem wird er natürlich genauso haben, wenn das gleiche Bild im Programmcode eingebettet ist. Ich tippe mal auf einen Fehler in der Layout-Struktur...
Wenn er das gefixt hat, kann er immer noch auf eingebettete Bilddaten umsteigen.
Zitat:
Vorschlag 2:
Du kopierst dir den Code aus dem ButtonObject Makro und ersetzt das TextObject durch ein MUI_NewObjectA('DTpic.mcc',...).

So toll das auch ist, daß jeder Programmierer meint, quasi als Pflicht-Übung einmal im Leben eine MUI-Klasse entwickelt haben zu müssen, mit geht dieser ganze Wust von externen Klassen für Trivialitäten auf den Keks.
Brauchen wir auf dem Amiga wirklich eine String-Klasse, eine "NewString"-Klasse, eine "BetterString"-Klasse und eine "EvenBetterString"-Klasse?
Was macht denn in diesem Fall DTpic.mcc anders als ImageObject, das ja auch über datatypes Bilder läd, daß es den zusätzlichen Aufwand Wert ist?

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

[ - Answer - Quote - Direct link - ]

2006-03-30, 12:36 h

Gazelle
Posts: 151
User
Zitat:
Original von Kaesebroetchen:
Kann mir vielleciht jemand verraten, wie ich das Bild in meinem Button vollständig angezeigt kriege ?

Laut Autodocs gibt's:

NAME
MUIA_Image_FontMatch -- (V4 ) [I..], BOOL

FUNCTION
If TRUE, width and height of the given image will be
scaled to match the current font. Images are always
defined with a reference font of topaz/8, bigger fonts
will make the image grow (as long as its maximum size
is big enough).

Vielleicht mal auf FALSE setzen? Habe es selber noch nicht verwendet.

Zitat:
Brauchen wir auf dem Amiga wirklich eine String-Klasse, eine "NewString"-Klasse, eine "BetterString"-Klasse und eine "EvenBetterString"-Klasse?

Darüber lässt sich natürlich ewig streiten. Sicherlich ist es ratsam mal zu sehen was MUI selbst anbietet bevor man externe Klassen verwendet. Aber wenn diese einem mehr zusagen bwz. die Funktionalität bieten die man haben möchte, warum nicht?

Zitat:
Was macht denn in diesem Fall DTpic.mcc anders als ImageObject, ...

"Dtpic.mui" ist eine Klasse von MUI, obwohl die Dokumentation dazu (noch) fehlt. Bei der V20 Dok ist wenigstens das Attribut beschrieben (mit dem Hinweis das es seit V18 existiert).

[ - Answer - Quote - Direct link - ]

2006-03-30, 14:24 h

p-OS
Posts: 131
User
@Holger:

Ok, hab ich wohl nicht alles aufmerksam gelesen. Wenn das mit dem Image_Object Probleme gibt, hilft auch DTpic nicht weiter. Vielleicht liegt das Problem ja auch einfach an den verwendeten Grafiken, daß z.B.die gespeicherten Größenangaben nicht stimmen; oder am verwendeten Dataytpe.

DTpic.mcc ist im übrigen keine externe Klasse, sondern MUI-intern, glaub bereits seit Version 4 (Release 2.x?).

Was das Thema externe Klassen angeht, hast du natürlich recht, daß es da z.T. schon eine verwirrende Vielfalt gibt. Aber das liegt halt auch daran, daß von offizieller Seite (in dem fall namentlich Stefan Stuntz), halt jahrelang keine Weiterentwicklung gab. Sonst gäb es wohl die ganzen zusätzlichen String und Listview-Klassen nicht.
Das gleiche gilt natürlich auch für das Betriebssystem selbst. Hätte OS 3.1 bereits eine Bibliothek für frei konfigurierbare und größenunabhängige Oberflächen mitgebracht, gäbe es auch die meisten GUI-Systeme wohl nicht. Da es keine offizielle Weiterentwicklung gab, hat eben eine inoffizielle stattgefunden,
Irgendwo ist die Modularität und erweiterbarkeit halt der Vorteil und zugleich Nachteil der amigaoiden Systeme.
Vergleich mal ein blankes OS3.1 mit einer Installation mit Magellan/MagicMenu/VisualPrefs/MUI/AHI/W3D...da liegen welten dazwischen. Und das ganz ohne offizielle Weiterentwicklung. Das war eben nur durch die grds.Erweiterbarkeit möglich.
Naja, ich fürcht, ich schweif grad ab...

[ - Answer - Quote - Direct link - ]

2006-03-30, 17:00 h

Georg
Posts: 107
User
ImageObject: mal versuchen mit MUIA_FixWidth und MUIA_FixHeight die Größe des Bildes anzugeben.

dtpic.mui: folgendes geht hier unter Zune/AROS:

code:
MUI_NewObject("Dtpic.mui",
   MUIA_Dtpic_Name,"SYS:System/Images/AROS.png",
   MUIA_InputMode, MUIV_InputMode_RelVerify,
   ImageButtonFrame,
   TAG_DONE)


[ - Answer - Quote - Direct link - ]

2006-03-30, 17:20 h

Georg
Posts: 107
User
Um Images mit max. 256 Farben direkt in Programme zu integrieren hat Zune außerdem ne ChunkyImage Klasse:

code:
ChunkyImageObject,
 MUIA_FixWidth, img->width,
 MUIA_FixHeight, img->height,
 MUIA_ChunkyImage_Pixels, (IPTR)img->data,
 MUIA_ChunkyImage_NumColors, img->numcolors,
 MUIA_ChunkyImage_Palette, (IPTR)img->pal,
 MUIA_Bitmap_Width, img->width,
 MUIA_Bitmap_Height, img->height,
 MUIA_Bitmap_UseFriend, TRUE,
 MUIA_Bitmap_Transparent, 0,
 End,


Für die Palette wird 1 BYTE pro Komponent (Rot, Grün, Blau) benutzt, also 3 BYTE pro Farbe:

code:
static const UBYTE useimage_data[] =
{
	00,00,00,00,00,00,00,00,00,02,02,02,00,
	00,00,00,00,00,00,00,00,02,02,02,02,01,
	00,00,00,00,00,00,00,02,02,02,02,02,01,
	00,00,00,00,00,00,00,02,02,02,02,01,00,
	00,00,00,00,00,00,02,02,02,02,01,00,00,
	00,00,00,00,00,00,02,02,02,01,00,00,00,
	00,02,02,00,00,00,02,02,02,01,00,00,00,
	02,02,02,02,00,02,02,02,01,00,00,00,00,
	02,02,02,02,02,02,02,02,01,00,00,00,00,
	02,02,02,02,02,02,02,02,01,00,00,00,00,
	00,02,02,02,02,02,02,01,00,00,00,00,00,
	00,00,02,02,02,02,02,01,00,00,00,00,00,
	00,00,02,02,02,02,02,01,00,00,00,00,00,
	00,00,00,02,02,02,01,00,00,00,00,00,00,
	00,00,00,02,02,02,01,00,00,00,00,00,00,
	00,00,00,00,02,01,00,00,00,00,00,00,00
};

static const UBYTE useimage_pal[] =
{
	0xb3,0xb3,0xb3,0x00,0x00,0x00,
	0x00,0x76,0x00
};







[ - Answer - Quote - Direct link - ]

2006-03-30, 20:58 h

Kaesebroetchen
Posts: 643
User
@Georg:
Danke !
Das klappt schon mal super und sieht auch gut aus.
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]

2006-03-30, 22:05 h

Georg
Posts: 107
User
Für Buttons mit Text+Image wie in den Prefs Programmen gibt es außerdem noch ImageButton:

code:
ImageButton("label", "path:to/imagefile")


Weiters CoolImageButton für ins Programm integrierte chunky images:

code:
CoolImageButton("label", coolimagestruct)



bzw. CoolImageIDButton für standard Images (Use image, Cancel Image, Save Image):

code:
CoolImageButton("label", COOL_SAVEIMAGE_ID)


Siehe libraries/coolimages.h und linklibs/coolimages.h.

[ - Answer - Quote - Direct link - ]

2006-03-30, 22:12 h

Kaesebroetchen
Posts: 643
User
@Georg:
Das wird ja immer besser !
Das muss ich mir gleich mal anschauen.
--
http://amidevcpp.amiga-world.de/

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > MUI Bitmap Button [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.