#PN_Any absolut unzuverlässig?
-
Kekskiller
- Beiträge: 752
- Registriert: 14.09.2004 21:39
- Kontaktdaten:
#PN_Any absolut unzuverlässig?
Irgendwie macht mir dieses #PB_Any immer wieder Sorgen. Ich verwalte dynamisch mit Liste Bilder, indem ich mir mit #PB_Any die Indexnummern zurückgeben lasse. Wenn ich jetzt von vornherein aber Bilder aus dem Speicher catche, gibt es oft Probleme beim Anzeigen. Irgendwie kommen sich die Dinger ständig in die Haare... Ich könnte natürlich auch die Indexnummern aus dem Indexwert der Liste ziehen, aber ich will das auch anders hinbekommen. Wie kann ich das umgehen? Welchen Bereich wird #PB_Any nie erreichen?
- 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
>> Welchen Bereich wird #PB_Any nie erreichen?
Ich denke mal oberhalb von 4 GB sollten alle Zahlen frei sein
Aber im Ernst, so ganz verstehe ich Dein Problem nicht, könntest Du es vielleicht mal weiter erläutern bzw. ein paar Beispiel-Code-Zeilen.
Gruß
Thomas
Ich denke mal oberhalb von 4 GB sollten alle Zahlen frei sein
Aber im Ernst, so ganz verstehe ich Dein Problem nicht, könntest Du es vielleicht mal weiter erläutern bzw. ein paar Beispiel-Code-Zeilen.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
Kekskiller
- Beiträge: 752
- Registriert: 14.09.2004 21:39
- Kontaktdaten:
Ich verwalte in einem MDI-Gagdet Fenster mit Bildern drinne. Die ImageIDs werden mit #PB_Any abgespeichert.
AddImage() fügt ein neues Fenster zu, je nach Dateiname entscheidet der Code, welches Icon genommen wird. Aber irgendwie werden schon die richtigen Icons genommen, die Bilder aber sind total verstümmelt und verkürzt. Ich vermute es liegt an der ID, Anderes sehe ich da nicht als Problem. Dazu bräuchte ich eine Lösung...
Code: Alles auswählen
Structure IMG
Image.l
Display.l
Area.l
Path$
EndStructureCode: Alles auswählen
Procedure AddImage(Path$)
If FileSize(Path$) > -1
Image = LoadImage(#PB_Any, Path$)
If Image <> 0
AddElement(Images())
Images()\Image = Image
Images()\Path$ = Path$
Select LCase(GetExtensionPart(Path$))
Case "bmp"
img = img_bitmap
Case "png"
img = img_jpeg
Case "jpg"
img = img_jpeg
Default
img = img_default
EndSelect
AddGadgetItem(0, ListIndex(Images()), GetFilePart(Images()\Path$), UseImage(img))
winw = ImageWidth()
winh = ImageHeight()
If winw > GadgetWidth(0)
winw = GadgetWidth(0)
EndIf
If winh > GadgetHeight(0)
winh = GadgetHeight(0)
EndIf
SetGadgetItemAttribute(0, ListIndex(Images()), #PB_MDI_ItemWidth, winw)
SetGadgetItemAttribute(0, ListIndex(Images()), #PB_MDI_ItemHeight, winh)
Images()\Area = ScrollAreaGadget(#PB_Any, 0,0, winw,winh, ImageWidth(),ImageHeight(), 10, #PB_ScrollArea_Single)
Images()\Display = ImageGadget(#PB_Any, 0,0, ImageWidth(),ImageHeight(), UseImage(Images()\Image))
CloseGadgetList()
CloseGadgetList()
EndIf
EndIf
EndProcedureCode: Alles auswählen
Global img_bitmap.l, img_jpeg.l, img_default.l
img_bitmap = CatchImage(#PB_Any, ?bitmap)
img_jpeg = CatchImage(#PB_Any, ?jpeg)
img_default = CatchImage(#PB_Any, ?defaultfile)- 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
Da Dein Code so nicht Testbar ist, deshalb rate ich mal. Durch UseImage wird die ImageID verändert, so das der Wert in Deiner Strukturvariable nicht mehr stimmt.
Mal sehen, ob ich gut im Raten bin
Gruß
Thomas
Mal sehen, ob ich gut im Raten bin
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
Kekskiller
- Beiträge: 752
- Registriert: 14.09.2004 21:39
- Kontaktdaten:
Nein, UseImage wird nur einmal benutzt, daher kann auch falsche Anzeige durch falsch benutzte Images ausgeschlossen werden. Durch ein paar Debugausgaben sehe ich, dass die IDs von Images ziemlich nah aneinanderliegen. Wenn ich aber die richtige Adresse nehme, kann ich mir zwar die ID-Sache ersparen, aber danach kann ich nichts mehr so schön löschen. Hm...
Ich habs jetzt erstmal ohne Icons gelassen, geht auch so ganz ok...
Ich habs jetzt erstmal ohne Icons gelassen, geht auch so ganz ok...
Hm, ich habs mir auch grad mal angeschaut ... ich kann den Code zwar nicht testen, aber ich bin auch dafür, das es an UseImage(img) liegt, bzw dass am ende der Prozedur das falsche Image aktiv ist.
MFG PMV
Code: Alles auswählen
Procedure AddImage(Path$)
If FileSize(Path$) > -1
Image = LoadImage(#PB_Any, Path$)
If Image <> 0
AddElement(Images())
Images()\Image = Image
Images()\Path$ = Path$
Select LCase(GetExtensionPart(Path$))
Case "bmp"
img = img_bitmap
Case "png"
img = img_jpeg
Case "jpg"
img = img_jpeg
Default
img = img_default
EndSelect
AddGadgetItem(0, ListIndex(Images()), GetFilePart(Images()\Path$), UseImage(img))
;ab hier ist das aktive Image das img
winw = ImageWidth()
winh = ImageHeight()
If winw > GadgetWidth(0)
winw = GadgetWidth(0)
EndIf
If winh > GadgetHeight(0)
winh = GadgetHeight(0)
EndIf
SetGadgetItemAttribute(0, ListIndex(Images()), #PB_MDI_ItemWidth, winw)
SetGadgetItemAttribute(0, ListIndex(Images()), #PB_MDI_ItemHeight, winh)
;ImageWidth() und ImageHeight() gehen hier von der Größe von img aus, nicht von der größe von Images()\Image
UseImage(Images()\Image) ;hier müsste das hin, damit ImageHeight() und ImageWidth() auch von dem gewünschen Image aus gehen
Images()\Area = ScrollAreaGadget(#PB_Any, 0,0, winw,winh, ImageWidth(),ImageHeight(), 10, #PB_ScrollArea_Single)
Images()\Display = ImageGadget(#PB_Any, 0,0, ImageWidth(),ImageHeight(), UseImage(Images()\Image))
CloseGadgetList()
CloseGadgetList()
EndIf
EndIf
EndProcedure