Imagegadget verschwindet

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Imagegadget verschwindet

Beitrag von Elektrolurch »

Hi All

Ich hätte da mal wieder eine Frage zu einem ImageGadget.

Ich lade in meinen Fenster in ein Imagegadget abwechselnd zwei Bilder.
PC läuft oder PC läuft nicht. (läuft Problemlos)

Nun Öffne ich für ein Unterprogramm ein neues Fenster indem ich zwei neue Imagegadgets anlege in denen zwei Bilder als Vorschau gezeigt werden. Diese kann ich mehrfach ändern. (Kein Problem)

Wenn ich nun das zweite Fenster schließe um wieder in das Hauptprogramm zurück zu kommen, läuft alles bis auf das Imagegadget.
Dieses ist verschwunden.

Wird es gar angesprochen(wechsel oder Hide)
Kriege ich die Fehlermeldung.

Code: Alles auswählen

#Gadget object not initialized
Hat dazu jemand eine Idee?

Bye Andre
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

dazu ist schon der Code erforderlich...

eventuell ,"glaskugel polier", hilft dir ein
PB - Hilfe :
Ergebnis = UseGadgetList(WindowID)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi

Es sind halt schon ca 900 Zeilen Code, ist ein bischen viel zum posten.
Wenn dir Auschnitte genügen, sag mir welche.

Bye Andre
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Du scheinst irgendwie wohl die Gadgetliste des ersten Fensters zu verlieren.
(Obwohl ich mich gerade frage wie das möglich ist ...)

Welche PB-Version nutzt Du (Am besten in die Signatur aufnehmen) ?

Wenn der Code zu lang ist, (und du keine Bedenken mit einer veröffentlichung hast ;) )
kannst du auch einen Link posten zum runterladen...

Aber es müsste irgendwo zwischen Aufruf und danach beim Schließen
des 2. Fensters liegen... wenn ich mich nich grad irgendwie verrenne...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Vielleicht zufällig die Gadget-Nummer zweimal vergeben? Wenn man ein neues Gadget erstellt, das bereits mit der Nummer erstellt wurde, verschwindet das alte. Das das Gadget verschwindet ist ja vielleicht noch zu erklären (Imagegadgets sollte man immer mit disable sperren, dadurch verschwinden diese nicht mehr). Ansonsten könnte auch es auch sein, das du dich nach dem schließen des zweites Fenster immer noch in der Schleife des zweiten Fenster befindest. Vielleicht hast du nur das Fenster zerstört, aber die Schleife nicht verlassen. Da in dieser Schleife das erste Imagegadget ja nicht existiert, kommt die Fehlermeldung.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi

Ich habe jetzt mal etwas zusammen gestrichen.

Das 2 Fenster wird durch "Veronica Themes installieren" im Menü gestartet.

Dort kann man mit Abbrechen das 2 Fenster wieder schließen.
Betätigt man nun "Verbinden" tritt der Effekt ein.

Meine Version ist 4.20

Code: Alles auswählen

UsePNGImageDecoder()
;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
  #Window_1
  #Window_2
EndEnumeration
;}
;{ Gadgets
Enumeration
  #IPAddress_0
  #Text_1
  #Button_1
  #Button_2
  #Button_3
  #Button_4
  #String_1
  #Editor_1
  #Editor_2
  #Editor_3
  #Editor_11
  #HImage_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
  #Check_1
  #Progress
  #VImage_1
  #VImage_2
  #VText_1
  #VText_2
  #VText_3
  #VText_4
  #VEditor_1
  #VButton_1
  #VButton_2
  #VButton_3
EndEnumeration
DataSection
  UdhcpdStart :
  IncludeBinary "c:\HF_Helper\Data\udhcpd.orig"
  UdhcpdEnd :
  SmbStart :
  IncludeBinary "c:\HF_Helper\Data\smb.conf"
  SmbEnd :
  VeronicaStart :
  IncludeBinary "c:\HF_Helper\Data\veronica-0.5.4-bin.tar.gz"
  VeronicaEnd :

EndDataSection
Global IniFile.s = ""
Global IP_Adr.s = ""
Global Log = 0
Global Login.s = "root"
Global Passwort.s = "root"
Global Ziel.s
Global Ser_Nr.s = ""
Global Install.s = "Installieren"
Global Deinstall.s = "Deinstallieren"
Global Funktion.s = ""
Global Dim Telnet_Befehl.s(5)
Global Dim Telnet_Ergebnis.s(5)
Global IM
Global Befehle.l
Global dt = 100
Global Theme_File.s
Global Theme_Path.s
Global Theme_Name.s
Global Theme_Ziel.s
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 1, 1, 500, 500, "Hifidelio Helper", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    ; hier beginnt das Erstellen des Menüs...
    If CreateMenu(0, WindowID(0))
      MenuTitle("Funktionen")
      MenuItem(1, "Musikordner freigeben")
      MenuItem(2, " Veronica 0.5.4 installieren")
      MenuItem(3, "  Veronica 0.5.4 konfigurieren")
      MenuItem(4, "   Veronica Themes installieren")
      MenuBar()
      ; hier wird der Abgrenzungsbalken eingefügt
      MenuItem(96, "Hifidelio Standby")
      MenuItem(97, " Hifidelio Neustart")
      MenuItem(98, "  Hifidelio Ausschalten")
      MenuItem(99, "   Beenden")
      MenuTitle("Admin Funktionen")
      MenuItem(101, "Update auf Pro")
      MenuItem(102, " IPAdressen zurücksetzen")
      MenuItem(103, "  Musik retten")
    EndIf
    If CreateGadgetList(WindowID(#Window_0))
      ;immer Sichtbar
      IPAddressGadget(#IPAddress_0, 280, 10, 205, 25)
      TextGadget(#Text_1, 225, 13, 54, 14, "IP Adresse")
      ButtonGadget(#Button_1, 15, 5, 70, 30, "Verbinden")
      CheckBoxGadget(#Check_1, 5, 465, 90, 14, "Debugfenster")
      TextGadget(#Text_3, 390, 465, 70, 14, "Seriennummer")
      TextGadget(#Text_4, 460, 465, 35, 15, "", #PB_Text_Border)
      TextGadget(#Text_2, 102, 13, 54, 14, "Passwort")
      StringGadget(#String_1, 150, 10, 61, 20, "root")
      ;Textfeld oben
      EditorGadget(#Editor_1, 15, 40, 380, 100, #PB_Editor_ReadOnly)
      HideGadget(#Editor_1, 1)
      ;Schalter oben
      ButtonGadget(#Button_2, 410, 75, 70, 30, "Oben")
      HideGadget(#Button_2, 1)
      ;Textfeld unten
      EditorGadget(#Editor_2, 15, 160, 380, 100, #PB_Editor_ReadOnly)
      HideGadget(#Editor_2, 1)
      ;Schalter unten
      ButtonGadget(#Button_3, 410, 195, 70, 30, "Unten")
      HideGadget(#Button_3, 1)
      ;Schalter ausführen
      ButtonGadget(#Button_4, 200, 440, 100, 30, "Installieren")
      HideGadget(#Button_4, 1)
      ;Editorfeld
      EditorGadget(#Editor_3, 15, 40, 470, 385)
      HideGadget(#Editor_3, 1)
      ;Bilder laden und anpassen
      LoadImage(0, GetPathPart(ProgramFilename()) + "\hf_Offline.png")
      ;ResizeImage(0, 350,233,#PB_Image_Smooth)
      LoadImage(1, GetPathPart(ProgramFilename()) + "\hf_Online.png")
      ;ResizeImage(1, 350,233,#PB_Image_Smooth)
      ImageGadget(#HImage_1, 75, 100, 350, 300, ImageID(0))
      ;Prozessgadget
      Ergebnis = ProgressBarGadget(#Progress, 5, 5, 10, 450, 0, 110, #PB_ProgressBar_Vertical)
      HideGadget(#Progress, 1)
    EndIf
  EndIf
EndProcedure
Procedure OpenWindow_Window_1()
  If OpenWindow(#Window_1, 520, 1, 450, 500, "Hifidelio Debug", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_1))
      ;Editorfeld
      EditorGadget(#Editor_11, 15, 15, 420, 470)
      HideGadget(#Editor_11, 0)
    EndIf
  EndIf
EndProcedure
Procedure OpenWindow_Window_2()
  If OpenWindow(#Window_2, 367, 57, 600, 600, "Veronica Themes", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_2))
      ImageGadget(#VImage_1, 15, 50, 275, 275, 0, #PB_Image_Border)
      ImageGadget(#VImage_2, 310, 50, 275, 275, 0, #PB_Image_Border)
      TextGadget(#VText_1, 15, 15, 570, 15, "Quellpfad")
      TextGadget(#VText_2, 15, 30, 570, 15, "Computer")
      TextGadget(#VText_3, 15, 525, 570, 15, "Zielpfad")
      TextGadget(#VText_4, 15, 540, 400, 15, "Hifidelio")
      EditorGadget(#VEditor_1, 15, 340, 570, 180, #PB_Editor_ReadOnly)
      SetGadgetText(#VEditor_1, "Theme.xml")
      ButtonGadget(#VButton_1, 75, 555, 100, 25, "Theme suchen")
      ButtonGadget(#VButton_2, 200, 555, 100, 25, "Abbrechen")
      ButtonGadget(#VButton_3, 325, 555, 100, 25, "Theme installieren")
      OptionGadget(10, 450, 540, 150, 20, "In Standardverzeichnis")
      OptionGadget(11, 450, 560, 150, 20, "In eigenes Verzeichnis")
While WindowEvent() : Wend
    EndIf
  EndIf
EndProcedure

Procedure Programmstart()
  ;Einstellungen laden-------------------------------------------------------------------------------
  IniFile.s = GetPathPart(ProgramFilename()) + "\HF_Helper.ini"
  If OpenPreferences(IniFile.s)
    PreferenceGroup("Global")
    IP_Adr.s = ReadPreferenceString("IP_Adr", "192.168.178.001")
    Passwort.s = ReadPreferenceString("Passwort", "root")
    ClosePreferences()
  Else
    IP_Adr.s = "192.168.178.001"
    CreatePreferences(IniFile.s)
    PreferenceGroup("Global")
    WritePreferenceString("IP_Adr", IP_Adr.s)
    WritePreferenceString("Passwort", Passwort.s)
    ClosePreferences()
  EndIf
  SetGadgetState(#IPAddress_0, MakeIPAddress(Val(StringField(IP_Adr, 1, ".")), Val(StringField(IP_Adr, 2, ".")), Val(StringField(IP_Adr, 3, ".")), Val(StringField(IP_Adr, 4, "."))))
  SetGadgetText(#String_1, Passwort.s)
EndProcedure
Procedure Programmende()
  CreatePreferences(IniFile.s)
  PreferenceGroup("Global")
  WritePreferenceString("IP_Adr", GetGadgetText(#IPAddress_0))
  WritePreferenceString("Passwort", GetGadgetText(#String_1))
  ClosePreferences()
  CloseWindow(#Window_0)
  End
EndProcedure
Procedure Windowclean()
  HideGadget(#Button_2, 1)
  HideGadget(#Button_3, 1)
  HideGadget(#Button_4, 1)
  HideGadget(#Editor_1, 1)
  HideGadget(#Editor_2, 1)
  HideGadget(#Editor_3, 1)
  HideGadget(#HImage_1, 1)
EndProcedure
Procedure Telnet()
  
EndProcedure
Procedure Seriennummer()
   HideGadget(#HImage_1, 0)
EndProcedure
Procedure Musikordner()
  
EndProcedure
Procedure Musikretten()
 
EndProcedure
Procedure IP_zuruecksetzen()
  

EndProcedure
Procedure Veronica_Install()
  
EndProcedure
Procedure Veronica_Config()
  
EndProcedure
Procedure Veronica_Themes()
OpenWindow_Window_2()

EndProcedure
Procedure Themes_laden()

EndProcedure
Procedure Theme_speichern()

EndProcedure
Procedure Standby()
 
EndProcedure
Procedure Neustart()
 
EndProcedure
Procedure Ausschalten()
 
EndProcedure
OpenWindow_Window_0()
Programmstart()
;{- Event loop
Ziel.s = "\\" + IP_Adr.s + "\import\"
If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
EndIf
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #IPAddress_0
        IP_Adr.s = GetGadgetText(#IPAddress_0)
        Ziel.s = "\\" + IP_Adr.s + "\import\"
      ElseIf EventGadget = #Text_1
      ElseIf EventGadget = #Button_1
        Seriennummer()
      ElseIf EventGadget = #Button_2
        If Funktion.s = "Musikordner" : Funktion.s = "Muster" : Musikordner() : EndIf
        If Funktion.s = "Musik retten" : Musikretten() : EndIf
        If Funktion.s = "IP löschen" : IP_zuruecksetzen() : EndIf
        If Funktion.s = "Veronica" : Veronica_Install() : EndIf
        If Funktion.s = "Veronica Config" : Veronica_Config() : EndIf
      ElseIf EventGadget = #Button_3
        If Funktion.s = "Musikordner" : Funktion.s = "HF" : Musikordner() : EndIf
      ElseIf EventGadget = #Button_4
        If Funktion.s = "HF" Or Funktion.s = "Muster" : Funktion.s = "Install" : Musikordner() : EndIf
        If Funktion.s = "Veronica Config" : Funktion.s = "Veronica Configi" : Veronica_Config() : EndIf
      ElseIf EventGadget = #String_1
        Passwort = GetGadgetText(#String_1)
      ElseIf EventGadget = #Text_2
      ElseIf EventGadget = #Text_3
      ElseIf EventGadget = #Text_4
      ElseIf EventGadget = #Check_1
        If GetGadgetState(#Check_1) = 1
          OpenWindow_Window_1()
          Log = 1
        Else
          CloseWindow(#Window_1)
          Log = 0
        EndIf
      ElseIf EventGadget = #HImage_1
      ElseIf EventGadget = #VButton_1
          Themes_laden()
      ElseIf EventGadget = #VButton_2
          CloseWindow(#Window_2)
      ElseIf EventGadget = #VButton_3
              
      EndIf
      ; ////////////////////////
    Case #PB_Event_Menu
      Select EventMenu() ; To see which menu has been selected
        
        Case 102 ; Sub >> Vergebene IPAdressen zuücksetzen
          IP_zuruecksetzen()
        Case 103 ; Sub >> Musik retten
          Musikretten()
        Case 1 ; Sub >> Musikordner freigeben
          Musikordner()
        Case 2 ; Sub >> Veronica 5.4 installieren
          Veronica_Install()
        Case 3 ; Sub >> Veronica 5.4 konfigurieren
          Veronica_Config()
        Case 4 ; Sub >> Veronica Themes installieren
          Veronica_Themes()
        Case 96 ; Hifidelio Standby
          Standby()
        Case 97 ; Hifidelio Neustart
          Neustart()
        Case 98 ; Hifidelio Ausschalten
          Ausschalten()
        Case 99 ; Ende
          Programmende()
      EndSelect
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        Programmende()
      EndIf
      If EventWindow = #Window_2
        CloseWindow(#Window_2)

      EndIf
  EndSelect
ForEver
;;}
Zuletzt geändert von Elektrolurch am 07.10.2009 18:47, insgesamt 4-mal geändert.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Genau. Du erstellst ein NEUES Gadget (Obwohl es gar nicht nötig ist...)
und PB weiss nicht welches Fenster Du meinst, da das Window 2 grad
geschlossen wurde (also die aktuelle Gadgetliste).

Code: Alles auswählen


Ausschnitt....

ElseIf EventGadget = #VButton_2

  CloseWindow(#Window_2)
  UseGadgetList(WindowID(#Window_0)) ; <----- Genau dieses meinte ich
  ImageGadget(#HImage_1, 75, 100, 350, 300, ImageID(0))
  ;Bilder laden und anpassen
  
Übrigens um ein Imagegadget ein neues Bild zuzuweisen reicht ein

Code: Alles auswählen

SetGadgetState(#HImage_1, ImageID(1))
wenn die Dimensionen sich nicht ändern... also gleiche Position usw.

Edit: Ich merk grad... das ImageGadget verschwindet sogar aus der Gadgetliste...
Aber nur wenn man den Button anklickt. Wenn man das Fenster über den Schliessen
Button oben rechts beendet (#PB_Event_CloseWindow) dann ist alles in ordnung
Zuletzt geändert von Bisonte am 26.03.2009 11:49, insgesamt 1-mal geändert.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi Bisonte

Sorry, da habe ich dich etwas in den Wald geschickt.

Ich hatte nur versucht es mit Gewalt neu zu inizieren.
Ich habe den Quelltext überarbeitet und den ganzen Zermon weggelassen.
So fällt es auch noch aus.
Wäre nett wenn du noch mal drüber schauen könntest.

Danke Andre
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

An Deiner Stelle würde ich sowieso die komplette Fensterverwaltung für
das 2. Fenster auch in die Prozedur schieben, wo es gebraucht wird...
Inklusive Eventhandling...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

HI Bisonte

Wenn ich im 2 Fenster die beiden OptionGadgets weg lasse gehts.

Code: Alles auswählen

      ;OptionGadget(10, 450, 540, 150, 20, "In Standardverzeichnis")
      ;OptionGadget(11, 450, 560, 150, 20, "In eigenes Verzeichnis")
Edit:
GadgetID geändert,

Code: Alles auswählen

      ;OptionGadget(20, 450, 540, 150, 20, "In Standardverzeichnis")
      ;OptionGadget(21, 450, 560, 150, 20, "In eigenes Verzeichnis")
nun läufts.
Danke daß wir mal darüber gesprochen haben. :oops:
Bye Andre:
Antworten