speziell zum skinnen durch Bilder zur Laufzeit. Deshalb ist
es auch ziemlich langsam, da das gesamte Bild gescannt wird -
auch auf umschlossene Löcher.
Ich habe vor langer Zeit mal für Jemand eine schnellere
Methode entwickelt: SkinWinFast()
Die ist auch schon in SkinWin enthalten, nur undokumetiert.
Man braucht dazu einen "SkinMaker" der eine Skin-Datei von
dem Bild erstellt. Mit dem erzeugten Skin geht das skinnen
dann in Null-Komma-Nix. Auch mit sehr großen und komplizierten
Formen.
SkinWinFast() ist also für die meisten Anwendungen besser,
wenn man nicht zur Laufzeit ein Bild scannen muß, sondern
das Bild schon vorher feststeht.
Beide Befehle, SkinWin() und SkinWinFast(), haben jedoch
keine Möglichkeit den Skin wieder freizugeben, da es ja auch
nicht für Animationen gedacht war.
Durch das wiederholte aufrufen (hundertfach) bei Euch entsteht
so ein Memory-Leak, d.h. der Speicher wird aufgesaugt so schnell
es nur geht.
Ich habe gestern mal einen größeren Anim-Test mit Euren
Test-Sourcen gemacht... und da hat es 1,5GB Speicher innerhalb
weniger Sekunden aufgesaugt. Der Test von bobobo ging
hier garnicht erst (das mit HideWindow).
Es muß also eine etwas andere Methode mit SkinWinFast() her,
und dafür habe ich jetzt einen Test gemacht.
Ein statisches Beispiel mit der neuen SkinWinFast-Methode,
und auch eine 30-Frames-Animation mit SkinWinFast.
DOWNLOAD: fastskin.zip (2,6MB)
Beide Testfenster kann man mit der Maus verschieben (linke Maustaste).
Über Rechtsklick bekommt man ein Menu zum beenden - sonst ALT+F4.
Der statische Test verbraucht ~1,4MB Speicher, die Fenster-
Animation braucht ~4,4MB freien Hauptspeicher - schliesslich
sind alle Einzelbilder in den Skins enthalten.
Das animieren braucht auch ein bissl Rechenpower. Auf älteren
Rechnern (z.B. 300 MHz) kann es deshalb evtl. nicht so sehr
flüssig sein. Auf 1GHz braucht es immerhin noch ~30% CPU-Power.
Habe extra mal eine größere Anim zum testen genommen.
Die Animation ist 200x600 Punkte groß und läuft mit 20 FPS,
also 1,5 Sekunden für alle 30 Frames.
Mich würde nun interessieren ob das überall läuft (Win95, WinXP),
und natürlich ob wirklich Bedarf dafür vorhanden ist - oder ob
Euch das alte SkinWin() reicht.
Danke schonmal fürs testen!
