On Sun, 14 Nov 2010, Enrico Schwass wrote:
(Form fromFileNamed: 'myGraphicsFileName') asMorph openInWorld
Das öffnet ein externes Bild.
Danke Enno, aber genau das möchte ich vermeiden bzw. nur einmal tun müssen. Dann möchte ich das Bild im Image bzw. zumindest im Monticello-Paket haben.
Konkret zwei Fragen:
1. Wenn ich so etwas wie "Form fromFileNamed: 'myGraphicsFileName'" im Smalltalk-Code einer Klasse stehen habe und dann mein Werk mit Monticello exportiere und später in ein anderes Image importiere, ist dann die Datei myGraphicsFileName mit dabei und am Zielsystem an der richtigen Stelle?
2. Was ich eigentlich will:
ImageMorph kennt eine Klassenvariable 'DefaultForm' (oder auch 'DefaultImage' bei AlphaImageMorph). Das einzige was ich für diese aufbekomme, ist ein Inspektor. Bei pharo ist sie ein 1x1-Pixel, bei Etoys ein Bild mit Kleinkinderhänden. Meine Schüler sollen Spiele oder Animationen programmieren, bei denen beispielsweise irgendwelche Figuren vorkommen sollen, die ein nettes Kostüm brauchen. Das ganze sollen sie später mit Monticello bei mir abgeben können.
Meine Idee wäre nun, für solche Figuren Unterklassen von ImageMorph abzuleiten und mit einer anderen DefaultForm auszustatten. Nun ist die erste Frage die, wo/wie ich die DefaultForm überhaupt im Smalltalk-Image finde und sie ggf. verändere. Die zweite Frage ist die, ob ein Verändern überhaupt sinnvoll ist, nachdem sich DefaultForm doch nach recht globaler Variable anhört.
Was ich haben möchte, wäre eben so etwas wie DefaultForm, letztlich also wohl die Definition einer konkreten 'Form' (im Sinne der Smalltalk-Klasse) meineDefaultForm, die ich benutzen kann, um damit ImageMorph>>defaultImage im Sinne von
MeinImageMorph>>defaultImage "Answer the default image for the receiver."
^ meineDefaultForm
überschreiben kann.
Mit Hilfe von Berts #storeString habe ich das jetzt geschafft:
(Form fromFileNamed: 'myGraphicsFileName') storeString
Drucken und in #defaultImage einfügen.
3. Doch noch eine Frage:
Wenn ich in pharo etwa ein jpg-Bild auf das pharo-Image ziehe, öffnet sich ein Popup-Menü, das mir erlaubt, das Bild in einem Fenster zu öffnen, als Hintergrund zu benutzen, oder eben 'read graphic into ImageImports'.
Was passiert da und wo/wie kann ich dann auf das Bild zugreifen?
Herumsuchen in Inspektoren brachte mich zu Form(class)>>serviceImageImports bzw.
Form(class)>>importImage: fullName "Import the given image file and store the resulting Form in the default Imports. The image is named with the short filename up to the first period, possibly with additions from the directory path to make it unique."
Imports default importImageFromFileNamed: fullName.
Wenn die Datei z.B. /Pfad/zu/meinBild.jpg war, kann ich die erzeugte Form höchstwahrscheinlich als
Imports default imports at: 'meinBild'
ansprechen. Überlebt das z.B. einen Monticello-Export?
Markus