[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