ImageGadget verschwindet bei zweitem Fenster
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
ImageGadget verschwindet bei zweitem Fenster
Hi All
Ich habe gerade mal wieder etwas ausprobiert und mir dabei wohl einen Fehler eingebaut.
Ich möchte um Fehler meines Programmes analysieren zu können einen kleinen Debugger mitbringen.
Da zu kann ich mit einer Checkbox ein neues Window öffnen.
In diesem Window erstelle ich dann ein Editorgadget.
Nun schreibe ich alle Meldungen meines Programms dort hinein.
Soweit ist alles in Ordnung.
Der Fehler liegt darin, dass in meinem HauptWindow ein ImageGadget am Ende der protokollierten Procedure das Bild wechseln soll.
Mit aktiviertem zweiten Fenster verschwindet das ImageGadget komplett.
Ist das Protokoll abgeschaltet also das zweite Fenster nicht da klappt es.
Was kann ich tun, damit es auch mit Protokoll klappt?
Bye Andre
Ich habe gerade mal wieder etwas ausprobiert und mir dabei wohl einen Fehler eingebaut.
Ich möchte um Fehler meines Programmes analysieren zu können einen kleinen Debugger mitbringen.
Da zu kann ich mit einer Checkbox ein neues Window öffnen.
In diesem Window erstelle ich dann ein Editorgadget.
Nun schreibe ich alle Meldungen meines Programms dort hinein.
Soweit ist alles in Ordnung.
Der Fehler liegt darin, dass in meinem HauptWindow ein ImageGadget am Ende der protokollierten Procedure das Bild wechseln soll.
Mit aktiviertem zweiten Fenster verschwindet das ImageGadget komplett.
Ist das Protokoll abgeschaltet also das zweite Fenster nicht da klappt es.
Was kann ich tun, damit es auch mit Protokoll klappt?
Bye Andre
- 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
code der den fehler aufzeigt wäre ein anfang
Meine Glaskugel sagt, du verwendest GadgetIDs mehrfach, also IDs die
in beiden Fenstern vorkommen.
Meine Glaskugel sagt, du verwendest GadgetIDs mehrfach, also IDs die
in beiden Fenstern vorkommen.
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.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
HI
wo kriegt ihr nur die Glaskugeln her.
Der Ganze Code wäre wohl zu umfangreich, aber das sind wohl die wichtigen Stellen
Ich hoffe es ist einigermaßen verständlich.
Update also doch komplett.
Bye Andre
wo kriegt ihr nur die Glaskugeln her.
Der Ganze Code wäre wohl zu umfangreich, aber das sind wohl die wichtigen Stellen
Code: Alles auswählen
UseJPEGImageDecoder()
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
#Window_1
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
#Gadget
#Text_2
#Text_3
#Text_4
#Text_5
#Check_1
EndEnumeration
DataSection
UdhcpdStart :
IncludeBinary "c:\HF_Helper\udhcpd.orig"
UdhcpdEnd :
SmbStart :
IncludeBinary "c:\HF_Helper\smb.conf"
SmbEnd :
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
;}
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("Funktion")
MenuItem(1, "Internetradio Patch")
MenuItem(2, "Musikordner freigeben")
MenuBar()
; hier wird der Abgrenzungsbalken eingefügt
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)
LoadImage(0, "c:\hf_helper\hf_Offline.jpg")
ResizeImage(0, 350,233,#PB_Image_Smooth)
LoadImage(1, "c:\hf_helper\hf_Online.jpg")
ResizeImage(1, 350,233,#PB_Image_Smooth)
ImageGadget(#Gadget, 75, 100, 350, 300, ImageID(0))
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 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()
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)
EndProcedure
Procedure Telnet()
DatenBuffer.s = Space(100)
ConID = OpenNetworkConnection(IP_Adr.s, 23)
If ConID
;Erste Sequenz vom Server prüfen und beantworten
ReceiveNetworkData(ConID, @DatenBuffer, Len(DatenBuffer))
Soll.s = Chr(255) + Chr(253) + Chr(24) + Chr(255) + Chr(253) + Chr(32) + Chr(255) + Chr(253) + Chr(35) + Chr(255) + Chr(253) + Chr(39)
If Log = 1
AddGadgetItem(#Editor_11, -1 , "Erwartet= " + Soll.s)
AddGadgetItem(#Editor_11, -1 , "Erhalten= " + Mid(DatenBuffer, 0, 12))
EndIf
If Mid(DatenBuffer, 0, 12) = Soll
An.s = Chr(255) + Chr(252) + Chr(24) + Chr(255) + Chr(252) + Chr(32) + Chr(255) + Chr(252) + Chr(35) + Chr(255) + Chr(252) + Chr(39) ;+Chr(13)+Chr(10)
If Log = 1
AddGadgetItem(#Editor_11, -1 , "Sende= " + An.s)
EndIf
If SendNetworkData(ConID, @An, 12) = - 1
MessageRequester("Error", "Server akzeptiert Antwort nicht.!", 0)
EndIf
Else
MessageRequester("Error", "Serversequenz unbekannt!", 0)
EndIf
Delay(dt)
;Zweite Sequenz vom Server prüfen und beantworten
DatenBuffer.s = Space(100)
ReceiveNetworkData(ConID, @DatenBuffer, Len(DatenBuffer))
Soll.s = Chr(255) + Chr(251) + Chr(3) + Chr(255) + Chr(253) + Chr(1) + Chr(255) + Chr(253) + Chr(31) + Chr(255) + Chr(251) + Chr(5) + Chr(255) + Chr(253) + Chr(33)
If Log = 1
AddGadgetItem(#Editor_11, -1 , "Erwartet= " + Soll.s)
AddGadgetItem(#Editor_11, -1 , "Erhalten= " + Mid(DatenBuffer, 0, 15))
EndIf
If Mid(DatenBuffer, 0, 15) = Soll
An.s = Chr(255) + Chr(252) + Chr(1) + Chr(255) + Chr(252) + Chr(31) + Chr(255) + Chr(252) + Chr(33) ;+Chr(255)+Chr(252)+Chr(39);+Chr(13)+Chr(10)
If Log = 1
AddGadgetItem(#Editor_11, -1 , "Sende= " + An.s)
EndIf
If SendNetworkData(ConID, @An, 9) = - 1
MessageRequester("Error", "Server akzeptiert Antwort nicht.!", 0)
EndIf
Else
MessageRequester("Error", "Serversequenz unbekannt!", 0)
EndIf
Delay(dt)
;Dritte Sequenz vom Server Login-------------------------------------------------------------------
Text.s = ""
Repeat
DatenBuffer.s = Space(100)
V = ReceiveNetworkData(ConID, @DatenBuffer, Len(DatenBuffer))
Text.s = Text.s +(Trim(RemoveString(DatenBuffer, Chr(13) + Chr(10))))
If Right(Text.s, 6) = "login:"
V = - 1
EndIf
Until V = - 1
If Log = 1
AddGadgetItem(#Editor_11, -1 , "L1_Erhalten= " + Mid(Text.s, 0, Len(Text.s) - 6))
AddGadgetItem(#Editor_11, -1 , "L2_Erhalten= " + Right(Text.s, 6))
EndIf
An.s = Chr(255) + Chr(253) + Chr(1) + Login.s + Chr(13) + Chr(10)
If Log = 1
AddGadgetItem(#Editor_11, -1 , "L3_Sende= " + Login.s)
EndIf
If SendNetworkData(ConID, @An, Len(An.s)) = - 1
MessageRequester("Error", "Server akzeptiert Antwort nicht.!", 0)
EndIf
Delay(dt)
;Vierte Sequenz vom Server Password;---------------------------------------------------------------
Text.s = ""
Repeat
DatenBuffer.s = Space(100)
V = ReceiveNetworkData(ConID, @DatenBuffer, Len(DatenBuffer))
Text.s = Text.s +(Trim(RemoveString(DatenBuffer, Chr(13) + Chr(10))))
If Right(Text.s, 9) = "Password:"
V = - 1
EndIf
Until V = - 1
If Log = 1
AddGadgetItem(#Editor_11, -1 , "P1_Erhalten= " + Right(Text.s, 9))
EndIf
An.s = Chr(255) + Chr(253) + Chr(1) + Passwort.s + Chr(13) + Chr(10)
If Log = 1
AddGadgetItem(#Editor_11, -1 , "P2_Sende= " + Passwort.s)
EndIf
If SendNetworkData(ConID, @An, Len(An.s)) = - 1
MessageRequester("Error", "Server akzeptiert Antwort nicht.!", 0)
EndIf
Delay(dt)
;Fünfte Sequenz vom Server Prompt ermitteln--------------------------------------------------------
Text.s = ""
Repeat
DatenBuffer.s = Space(100)
V = ReceiveNetworkData(ConID, @DatenBuffer, Len(DatenBuffer))
Text.s = Text.s +(Trim(RemoveString(DatenBuffer, Chr(13) + Chr(10))))
If Right(Text.s, 2) = "~#"
V = 0
EndIf
Until V = 0
For i = 0 To Len(Text.s)
If Mid(Text, i, 4) = "root"
Prompt.s = Mid(Text.s, i, Len(Text.s) - 2)
EndIf
Next
If Log = 1
AddGadgetItem(#Editor_11, -1 , "Pr1_Erhalten= " + Prompt.s)
EndIf
;sechste Sequenz Seriennummer abfragen ------------------------------------------------------------
For A = 1 To Befehle.l
Befehl.s = Telnet_Befehl.s(A)
An.s = Chr(255) + Chr(253) + Chr(1) + Befehl.s + Chr(13) + Chr(10)
If Log = 1
AddGadgetItem(#Editor_11, - 1, "Befehl_Senden= " + Befehl.s)
EndIf
;Befehl senden
If SendNetworkData(ConID, @An, Len(An.s)) = - 1
MessageRequester("Error", "Server akzeptiert Antwort nicht.!", 0)
EndIf
Delay(dt)
;Warten bis Antwort komplett
Text.s = ""
Repeat
DatenBuffer.s = Space(1000)
V = ReceiveNetworkData(ConID, @DatenBuffer, Len(DatenBuffer))
Text.s = Text.s +(Trim(DatenBuffer))
If Right(Text.s, 1) = "#"
For i = 1 To Len(Text.s)
If Mid(Text.s, i, Len(Prompt.s)) = Prompt.s
V = 0
Telnet_Ergebnis.s(A) = Text.s
EndIf
Next
EndIf
Until V = 0
If Log = 1
AddGadgetItem(#Editor_11, - 1, "Befehl_Empfangen= " + Text.s)
EndIf
Next
Else
MessageRequester("Error", "Keine Verbidung zum Hifidelio möglich! ", 0)
EndIf
CloseNetworkConnection(ConID)
EndProcedure
Procedure Seriennummer()
SetActiveWindow(#Window_0)
Befehle.l = 1
Telnet_Befehl.s(1) = "bash /opt/Fidelio/bin/opus"
Telnet()
Ser_Nr.s = Mid(Telnet_Ergebnis.s(1), 29, 5)
SetGadgetText(#Text_4, Ser_Nr.s)
ImageGadget(#Gadget, 75, 100, 350, 300, ImageID(1))
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
ElseIf EventGadget = #Button_3
ElseIf EventGadget = #Button_4
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 = #Gadget
EndIf
; ////////////////////////
Case #PB_Event_Menu
Select EventMenu() ; To see which menu has been selected
Case 102 ; Sub >> Vergebene IPAdressen zuücksetzen
Case 103 ; Sub >> Musik retten
Case 1 ; Sub >> Internetradio
Case 2 ; Sub >> Musikordner freigeben
Case 99 ; Ende
Programmende()
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
;;}
Update also doch komplett.
Bye Andre
Zuletzt geändert von Elektrolurch am 07.10.2009 18:51, insgesamt 2-mal geändert.
- 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
> aber das sind wohl die wichtigen Stellen
Nein, das ist mehr ünnütz. Wo ist die Enumeration und besser noch das
EventLoop dazu
Nein, das ist mehr ünnütz. Wo ist die Enumeration und besser noch das
EventLoop dazu
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.

- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
läßt sich halt nicht testen, weil die Binaries fehlen...
also, die Enum ist es nicht, du vergibst korrekte Nummern.
das einzige was mir auffällt ist, dass du das ImageGadget neu erzeugst anstatt nur das Bild zu wechseln.
das sollte zwar trotzdem funktionieren, aber korrigier das erstmal
vielleicht hilft es ja was.
also, die Enum ist es nicht, du vergibst korrekte Nummern.
das einzige was mir auffällt ist, dass du das ImageGadget neu erzeugst anstatt nur das Bild zu wechseln.
das sollte zwar trotzdem funktionieren, aber korrigier das erstmal
Code: Alles auswählen
SetGadgetState( #Gadget, ImageID(1))
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- 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
Leider auch nicht viel, weil ist ja nicht testbar. Problem ist wohl die
Telnet() Procedure, wo ja ewig lange keine events abgearbeitet werden.
Da stirbt das Fenster. Um das zu bereinigen wäre schon eine größere Umstellung vorzunehmen.
Entweder Thread oder das ganze Netzwerkzeugs in den EventLoop sinnvoll
integrieren.
Mit Netzwerk hab ich aber leider nicht viel mit am Hut und testen geht so ja
garnicht
Telnet() Procedure, wo ja ewig lange keine events abgearbeitet werden.
Da stirbt das Fenster. Um das zu bereinigen wäre schon eine größere Umstellung vorzunehmen.
Entweder Thread oder das ganze Netzwerkzeugs in den EventLoop sinnvoll
integrieren.
Mit Netzwerk hab ich aber leider nicht viel mit am Hut und testen geht so ja
garnicht

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.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Hi
@ Kaeru Gaman

mit
läuft es.
wie soll ich das machen ????
Bye
@ Kaeru Gaman

mit
Code: Alles auswählen
SetGadgetState( #Gadget, ImageID(1))
Code: Alles auswählen
stimmt, ein überlaufender Eventloop könnte verhindern, dass das neue Gadget korrekt eingesetzt wird.
das muss auf jeden Fall bereinigt werden.
Bye