2 images-befehle in einem ritt - eins wird gekillt in xp

Anfängerfragen zum Programmieren mit PureBasic.
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

2 images-befehle in einem ritt - eins wird gekillt in xp

Beitrag von broozar »

hi, habe ein problem mit einem image-loader, neben dem ich auch eine box habe mit einem einfarbigen bild.

Code: Alles auswählen

          Name.s = OpenFileRequester("Please choose a new Player Logo", "C:\", "All supported Image Types|*.png;*jpg;*.bmp;*.jpeg;*.tiff;*.tga;*.ico|PNG Images|*.png|JPEG Images|*.jpg;*.jpeg|BMP Images|*.bmp|TGA Images|*.tga|TIFF Images|*.tiff|ICO Images|*.ico", 0)
            If Name.s ; laden eines bildes über den open file requester
              If LoadImage(0, Name)
                ResizeImage(0, 256, 256)
                SetGadgetState(#i_opt_player, ImageID(0))
                If Not SaveImage(0, "..\Data\playerLogo.png", #PB_ImagePlugin_PNG)
                  MessageRequester("Image Saving Error", "Could not save the image to your hard disk.")
                EndIf
                If CreateImage(0, 80, 20) ; hier beginnt die box
                  If StartDrawing(ImageOutput(0))
                    Box(0,0,80,30, RGB(pc_red, pc_green, pc_blue))
                    BackColor(RGB(0,0,0))
                    FrontColor(RGB(255,255,255)) 
                    StopDrawing()
                  EndIf
                EndIf
              Else
                MessageRequester("Image Error", "Could not load the selected image. please try another one.")
              EndIf
              SetGadgetState(#i_opt_color, ImageID(0))
            EndIf
das bild wird erfolgreich geladen, in der größe angepasst, gespeichert, und die box wird auch dargestellt.

win2k: bild und box stehen nebeneinander, alles ist ok
winXP: bild flackert kurz, danach verschwindet es.

liegt das an der doppelten ImageID(0), und falls ja, wieso handelt das XP anders als 2k.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 2 images-befehle in einem ritt - eins wird gekillt in xp

Beitrag von ts-soft »

Code: Alles auswählen

If CreateImage(0, 80, 20)
hier wird das andere Image mit der ID 0 freigegeben
und existiert nicht mehr. Warum versch. OS Versionen es früher oder später aus dem
Fenster löschen, sollte nicht weiter interessieren.
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

Re: 2 images-befehle in einem ritt - eins wird gekillt in xp

Beitrag von broozar »

ok, hab 0 mit 1 ersetzt, dann lief's

...was mich zu einer grundlegenden frage führt. ich sehe hier oft im forum und auch in der hilfe, dass dinge wie #image, #file oÄ einfach durch 0 ersetzt werden. ich habe das einfach mal übernommen und schreibe in einer prozedur 3 files auf diese art und weise ( CreateFile(0, "..\Data\File.txt") ), und zwar hintereinander, ohne, dass ein fehler auftritt. und nun spukt mir dieser fehler bei den 2 hintereinander erstellten bildern dazwischen.

ist die 0 "schlechter stil", legitim, solange man weiß, was man tut, oder verbirgt sich dahinter etwas, was ich noch nicht ganz verstanden habe?
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 2 images-befehle in einem ritt - eins wird gekillt in xp

Beitrag von ts-soft »

broozar hat geschrieben:ist die 0 "schlechter stil", legitim, solange man weiß, was man tut, oder verbirgt sich dahinter etwas, was ich noch nicht ganz verstanden habe?
So scheint es zu sein.
Jede ID sollte in ihrer Art einmalig sein. In ihrer Art meint:
Gadget
MenuItem/ToolbarItem/Shortcut
Image
Window
usw.

Durch wiederholte Verwendung wird das alte Objekt automatisch freigegeben (wenn es sich um ein Objekt handelt,
was nicht für MenuItem usw. gilt).
Statische IDs sollten von 0 an aufwärts vergeben werden, grosse Lücken in der Nummerierung verschwenden
Speicherplatz, der in der Internen Objektliste erstellt wird.

Enumerationen sind am geeignetesten um die Einmaligkeit sicherzustellen.

Ansonsten noch die Hilfe zu #PB_Any lesen, hierbei werden die Objektpointer in der Liste verwaltet, diese
lassen sich nicht so überschreiben, hier sollte bei Bedarf richtig freigegeben werden.

Für Files immer 0 zu verwenden, geht solange gut, solange die Datei immer geschlossen wird,
deshalb sollte man IMHO für Files immer #PB_Any verwenden.

Gruß
Thomas
Antworten