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

amiga-news.de Forum > Programmierung > MUI Bitmap Button [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

28.03.2006, 19:48 Uhr

Kaesebroetchen
Posts: 643
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 20:35 Uhr

thomas
Posts: 7718
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 21:58 Uhr

Kaesebroetchen
Posts: 643
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

28.03.2006, 22:22 Uhr

Kaesebroetchen
Posts: 643
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 00:54 Uhr

Holger
Posts: 8116
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 11:24 Uhr

Kaesebroetchen
Posts: 643
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 12:43 Uhr

Kaesebroetchen
Posts: 643
Nutzer
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/

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 13:46 Uhr

p-OS
Posts: 131
Nutzer
@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.

[ - Antworten - Zitieren - Direktlink - ]

29.03.2006, 18:51 Uhr

Holger
Posts: 8116
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 12:36 Uhr

Gazelle
Posts: 151
Nutzer
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).

[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 14:24 Uhr

p-OS
Posts: 131
Nutzer
@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...

[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 17:00 Uhr

Georg
Posts: 107
Nutzer
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)


[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 17:20 Uhr

Georg
Posts: 107
Nutzer
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
};







[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 20:58 Uhr

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

[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 22:05 Uhr

Georg
Posts: 107
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

30.03.2006, 22:12 Uhr

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

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > MUI Bitmap Button [ - Suche - Neue Beiträge - Registrieren - Login - ]


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