Icons in der Statusbar und im Imagemenue verschwinden

Anfängerfragen zum Programmieren mit PureBasic.
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Icons in der Statusbar und im Imagemenue verschwinden

Beitrag von Broncbuster »

Hallo,
folgendes Problem:(4.20)
Ich lade jedes Bild eines Ordners in ein dynamisch erzeugtes ButtonImageGadget. Dies funktioniert. Nebeneffekt jedesmal ab dem 21 Bild
verschwinden die Icons in der Statusbar und im Imagemenue. Lade ich weniger als 21 Bilder bleibt alles. Hat jemand da eine Idee oder handelt es sich um einen Bug.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Code?
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Eieiei, das hört sich verdächtig danach an, als würden der Blackjack- und der Crystal-Ball-Bug zusammen auftreten. Das ist so ausgesprochen selten, du solltest anfangen, Lotto zu spielen... :o
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

NicTheQuick hat geschrieben:Code?
ja, bitte einen code, der nachvollziehbar den Fehler reproduziert.

das heißt, der code muss auch im Editor einfach zu starten sein,
und nicht noch tausende ressourcen brauchen, die man zusätzlich reinpacken muss.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag von Broncbuster »

Wollte paar Codeschnipsel zusammenstellen, dabei habe ich festgestellt, das die Icons da bleiben, wenn ich die ButtonImageGadgets nur in das Formular lade und nicht in das ScrollAreaGadget. Fehler scheint mit dem ScrollAreaGadget zusammen zu hängen. Werde heute abend noch etwas rumprobieren. Code folgt dann.
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag von Broncbuster »

Code: Alles auswählen

;Hallo, hier mal ein Beispielcode
;Von Broncbuster
;also habe die betreffenden Procedures aus meinem Hauptprogi herausgenommen und dieses Beispiel eingefügt
;Im Gegensatz zum Hauptprogi bekomme ich hier das ScrollAreaGadget nicht sichtbar
;die Icons im Menue und Statusbar verschwinden trotzdem
;egal wie ich es drehe, jedesmal passiert was anderes
;liegt hier vielleicht ein grober Fehler meinerseits vor, den ich jedoch nicht sehe?



UseJPEGImageDecoder()
UseTGAImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseJPEGImageEncoder()
UsePNGImageEncoder()

Enumeration
#Photoalbum
#Neu
#Ende
#ScrollArea_Bilder
#ImM1
#Stat0
#Image_Thumb0
#Loadpro
EndEnumeration
Global Imagegadget
Global a
Global c
Global e
Global lang
Global breit
Global A$
Global Dim datei$(array)
Declare NeuesBild()
Imagegadget = #Image_Thumb0
Procedure Open_Photoalbum()
ExamineDesktops()
If OpenWindow(#Photoalbum, 0, 0, DesktopWidth(0) - 20, 200, "Bug-Test",  #PB_Window_SystemMenu |#PB_Window_SizeGadget| #PB_Window_TitleBar )
 LoadImage(#Ende,"Gfx\rotieren0.ico") 
 LoadImage(#Neu,"Gfx\viewer5.ico")
   If CreateImageMenu(#ImM1, WindowID(#Photoalbum))   
      MenuTitle("Ordner")                 
      MenuItem(1, "Öffnen", ImageID(#Neu)) ; Album einladen
   EndIf
   If CreateStatusBar(0, WindowID(#Photoalbum))
      AddStatusBarField(600) ; Meldung
      AddStatusBarField(150) ; Bildanzahl
   EndIf
StatusBarIcon(#Photoalbum, 1, ImageID(#Ende))
EndIf
EndProcedure
Procedure Albumeinladen()
;DisableWindow(#Photoalbum, 1)
If CreateGadgetList(WindowID(#Photoalbum))
    ;ScrollAreaGadget(#ScrollArea_Bilder, 5, 30, WindowWidth(#Photoalbum) - 10, 150, 780, 120, 0)
    ;bekomme das ScrollAreaGadget nicht sichtbar, lasse es weg und packe die ButtonImagegadgets auf das Formular
    ;CloseGadgetList()
EndIf
a = 2
Imagegadget = 1
InitialPath$ = "C:\"  
ImagePath$ = PathRequester("Bitte wählen Sie einen Pfad aus", InitialPath$)

SetWindowTitle(#Photoalbum, "UseIT-Photo " + Album$)
Global NewList Files.s() 
For b = 1 To 5
  Select b
    Case 1
      A$ = "BMP"
    Case 2
      A$ = "JPG"
    Case 3
      A$ = "JPEG" 
    Case 4
      A$ = "PNG" 
    Case 5
      A$ = "TGA"
  EndSelect
  ExamineDirectory(1,ImagePath$,"*."+A$)
  Repeat 
    NextFile = NextDirectoryEntry(1) 
    If NextFile = 1 
      AddElement(Files()) 
      Files() = DirectoryEntryName(1) 
      CountFiles + 1 
    EndIf 
  Until NextFile = 0 
Next b
;
If CountList(Files()) 
  d = CountList(Files()) 
ForEach Files() 
    A$ = ImagePath$+Files()
    If LoadImage(Imagegadget,A$)
    StatusBarText(0, 0, "Lade Bild aus "+A$)
    StatusBarText(0, 1, "Bild: " + Str(a-1) + " von " + Str(d))
    NeuesBild()
    EndIf
    Imagegadget = Imagegadget + 1 
    a = a + 1
  Next 
EndIf
StatusBarText(0, 0, "")
StatusBarText(0, 1, "Bildanzahl: " + Str(d))
If IsGadget(#ScrollArea_Bilder) <> 0
MessageRequester("Hallo", "ScrollAreaGadget sollte da sein")
Else
MessageRequester("Hallo", "ScrollAreaGadget ungültig")
EndIf
EndProcedure

Procedure NeuesBild()
;OpenGadgetList(#ScrollArea_Bilder,a)
;Bei gesetzter ScrollAreaGadget sollte das ButtonImageGadget hinzugefügt werden
ResizeImage(Imagegadget, 100, 70)
ButtonImageGadget(Imagegadget, c, 5, lang, breit,ImageID(Imagegadget))
;CloseGadgetList() 
;Wenn OpenGadgetList...aktiviert ist kommt immer Fehlermeldung CloseGadgetList without OpenGadgetList
c = c + 115
EndProcedure
a = 2
Imagegadget = 2
lang = 110
breit = 110
Open_Photoalbum()
Repeat
  EventID = WaitWindowEvent()
    Select EventID 
      Case #PB_Event_Menu
         Select EventMenu()
            Case 1 ; Album einladen
                    c = 0
                   lang = 110
                   breit = 110
                   Albumeinladen() 
         EndSelect 
       Case #PB_Event_CloseWindow
          Quit = 1 
    EndSelect
 Until Quit = 1
End [code]
[/code]

oberes Doppler-Posting gelöscht - Kaeru fecit
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Langsam wache ich auf!!!(1.Teil)

Beitrag von Broncbuster »

Okay hätte mich wohl im Anfängerforum melden sollen.
Wenn ich die Icons als ImageID(0) und ImageID(1) bezeichne und die Zeile Imagegadget = 1 lösche, bleiben die Icons erhalten. Habe die Icons ja praktisch überschrieben.
Aber das mit dem ScrollAreaGadget kriege ich nicht gebacken.

Code: Alles auswählen

Procedure Open_Photoalbum()
ExamineDesktops()
If OpenWindow(#Photoalbum, 0, 0, DesktopWidth(0) - 20, 200, "Bug-Test",  #PB_Window_SystemMenu |#PB_Window_SizeGadget| #PB_Window_TitleBar )
 LoadImage(0,"Gfx\rotieren0.ico") 
 LoadImage(1,"Gfx\viewer5.ico")
   If CreateImageMenu(#ImM1, WindowID(#Photoalbum))   
      MenuTitle("Ordner")                 
      MenuItem(1, "Öffnen", ImageID(1)) ; Album einladen
   EndIf
   If CreateStatusBar(0, WindowID(#Photoalbum))
      AddStatusBarField(600) ; Meldung
      AddStatusBarField(150) ; Bildanzahl
   EndIf
StatusBarIcon(#Photoalbum, 1, ImageID(0))
EndIf
EndProcedure
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Langsam wache ich auf!!!(1.Teil)

Beitrag von Kiffi »

Broncbuster hat geschrieben:Aber das mit dem ScrollAreaGadget kriege ich nicht gebacken.
wäre gut, wenn Du das noch mal gesondert erklären kannst, weil ich das
aus den oben stehenden Postings nicht herauslesen kann.

Wo liegt jetzt Dein genaues Problem mit der ScrollAreaGadget?
(Kleiner, lauffähiger Code, der das Problem zeigt, wäre von Vorteil)

Grüße ... Kiffi
a²+b²=mc²
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

ScrollAreaGadget wird nicht angzeigt

Beitrag von Broncbuster »

Hallo,
also im ersten Code verschwinden die Icons. Mein Fehler: überschreibe diese beim erstellen der dynamischen ButtonImageGadgets. Mal sind sie da, mal nicht. Habe die Procedure OpenPhotoalbum geändert. Jetzt werden sie immer angezeigt, da eine eindeutige ID vergeben.
Wenn jetzt im 1. Codebeispiel die Bilder in das Scrollareagadget eingefügt werden sollen, bekomme ich die Scrollarea nicht angezeigt.
Der ausgeklammerte Scrollareacode muß jedoch aktiviert werden. Probier mal. Laut Meldung in der Statusbar werden alle Bilder eingeladen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ScrollAreaGadget wird nicht angzeigt

Beitrag von Kiffi »

Broncbuster hat geschrieben:Probier mal.
#ScrollArea_Bilder hat lt. Deiner Enumeration den Wert 3

Dann gibt es eine Variable 'Imagegadget', die Du pro Bild hochzählst.

Mit ButtonImageGadget(Imagegadget) überschreibst Du das
ScrollAreaGadget, wenn Imagegadget ebenfalls den Wert 3 erreicht.

Grüße ... Kiffi
a²+b²=mc²
Antworten