[Squeak-ev] Re: Smalltalk Idiome - Bilderimport
Markus Schlager
m.slg at gmx.de
Son Nov 14 19:39:41 UTC 2010
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