Logikproblem Schleife
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Trotz deiner offensichtlichen Abneigung gegenüber der Grammatik unserer Muttersprache (schreibst du deine Posts in Kisuaheli und lässt GoogleTranslate Deutsch draus machen?) hab ich mir deinen Code mal genau angesehen. (testen war nicht, da er ein icon laden will, und soviel zeit hab ich nun auch nich gestohlen)
mir fällt auf, dass du in deinen beiden ereignisabfragen die selben werte für die buttons verwendest.
trotzdem sollten ja (logischerweise) in der inneren schleife andere buttons gemeint sein, als in der äußeren.
außerdem aktualisierst du deine ereignisvariable EventID nicht mehr nach dem verlassen der inneren schleife.
du trennst also die events dort nicht, sondern bearbeitest die events des inneren fensters nochmal im äußeren.
weiterhin brät deine innere schleife die CPU, der Einwand von Kiffi mit Delay(0) ist also absolut berechtigt.
setz dich erstmal damit auseinander, deine schleifen und fenster SAUBER zu proggen. merkwürdiges buggy verhalten von Fenstern kommt oft von merkwürdiger fishy programmierung.
mich würde nicht wundern, wenn das problem bei sauberer programmierung garnicht auftritt.
mir fällt auf, dass du in deinen beiden ereignisabfragen die selben werte für die buttons verwendest.
trotzdem sollten ja (logischerweise) in der inneren schleife andere buttons gemeint sein, als in der äußeren.
außerdem aktualisierst du deine ereignisvariable EventID nicht mehr nach dem verlassen der inneren schleife.
du trennst also die events dort nicht, sondern bearbeitest die events des inneren fensters nochmal im äußeren.
weiterhin brät deine innere schleife die CPU, der Einwand von Kiffi mit Delay(0) ist also absolut berechtigt.
setz dich erstmal damit auseinander, deine schleifen und fenster SAUBER zu proggen. merkwürdiges buggy verhalten von Fenstern kommt oft von merkwürdiger fishy programmierung.
mich würde nicht wundern, wenn das problem bei sauberer programmierung garnicht auftritt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 250
- Registriert: 25.11.2004 19:51
- Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS
RE:
jo merci für schnelle antwort - ich versuch das mal komplett anderst mit den schleifen zu konzipieren - und sorry for my buggy german G* - mist - ist das mit der google translation von klingonisch ins deutsche echt aufgefallen - fuck - egal - also merci ich checks mal durch und hoffe ich komme dann irgendwie auf nen grünen zweig. 

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
gut reagiert
also, zum problem:
meine idee wäre, alle ereignisse in einer schleife abzuhandeln.
es gab auch nen weg festzustellen, von welchem window das event kommt, ist mir nur grad nicht momentan, ich mach nich so oft was mit mehreren windows.
innerhalb dieser schleife kannst du im falle eines rechtsklicks auf den systray eine proc anspringen, die das zweite fenster erstellt. nur erstellt. die gibt wieder zurück an die hauptschleife, und dort werden die ereignisse mit behandelt.
btw. wenn ich mich nicht täusche, handelt es sich meistens bei solchen tools um ein einziges fenster, das versteckt gestartet wird und bei klick auf den systray angezeigt wird. also, kein zweites fenster erstellen, sondern das erste hide/show.

also, zum problem:
meine idee wäre, alle ereignisse in einer schleife abzuhandeln.
es gab auch nen weg festzustellen, von welchem window das event kommt, ist mir nur grad nicht momentan, ich mach nich so oft was mit mehreren windows.
innerhalb dieser schleife kannst du im falle eines rechtsklicks auf den systray eine proc anspringen, die das zweite fenster erstellt. nur erstellt. die gibt wieder zurück an die hauptschleife, und dort werden die ereignisse mit behandelt.
btw. wenn ich mich nicht täusche, handelt es sich meistens bei solchen tools um ein einziges fenster, das versteckt gestartet wird und bei klick auf den systray angezeigt wird. also, kein zweites fenster erstellen, sondern das erste hide/show.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 250
- Registriert: 25.11.2004 19:51
- Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS
re:
naja ich ei *G - das mit dem hide war n sau guter tipp - nun schaut der ganze code auch schon etwas besser aus *G - guck mal: 
ANmerkung: ist zwar noch lange nicht perfekt und der ein oder andere hat bestimmt noch ne bessere lösung was ich hoffe die er hier auch postet G* - aber wir nähern uns schon langsam dem ziel - ist auch nimmer so wirr mit der schleife in der schleife usw. - wie gesagt für optimierungsvorschläge hab ich immer n offenes ohr - gerade wiel ich noch kaum erfahrungen hab in richtung proggen.

Code: Alles auswählen
LoadFont(0, "Tahoma", 8)
SetGadgetFont(#PB_Default, FontID(0))
OpenWindow(0001, 100, 150, 300, 100, "(H)iveworx (C)lient", #PB_Window_Invisible|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0001))
AddSysTrayIcon(1, WindowID(0001), LoadImage(0, "bin\icons\cherry.ico"))
SysTrayIconToolTip(1, "(H)iveworx (E)ngine (C)lient")
OpenWindow(0002,1,1,640,480,"(H)iveworx (E)ngine (C)lient",#PB_Window_ScreenCentered|#PB_Window_Invisible)
CreateGadgetList(WindowID(0002))
ContainerGadget(0003, 0, 420, 640, 40,#PB_Container_Single)
SetGadgetColor(0003, #PB_Gadget_BackColor ,RGB(255, 255, 255))
ButtonGadget(0004,534,20,100,16,"Minimieren")
ButtonGadget(0007,534,3,100,16,"Beenden")
TextGadget(0005,4,2,400,30,"Created 2006 by Hiveworx - Engine V.1.24 (Earthlink)")
SetGadgetColor(0005, #PB_Gadget_BackColor ,RGB(0, 0, 0))
SetGadgetColor(0003, #PB_Gadget_BackColor ,RGB(0, 0, 0))
SetGadgetColor(0005, #PB_Gadget_FrontColor,RGB(128, 128, 128))
CloseGadgetList()
CreateStatusBar(0009, WindowID(0002))
AddStatusBarField(50)
AddStatusBarField(590)
PanelGadget (0, 2, 2, 636, 414)
AddGadgetItem (0, -1, "Status")
Frame3DGadget(0010, 4, 4, 624, 380, "Status")
AddGadgetItem (0, -1, "Account")
Frame3DGadget(0011, 4, 4, 624, 380, "Account")
AddGadgetItem (0, -1, "Einstellungen")
Frame3DGadget(0012, 4, 4, 624, 380, "Einstelungen")
AddGadgetItem (0, -1, "Update")
Frame3DGadget(0013, 4, 4, 624, 380, "Update")
AddGadgetItem (0, -1, "Log")
Frame3DGadget(0014, 4, 4, 624, 380, "Log")
AddGadgetItem (0, -1, "Neuigkeiten")
Frame3DGadget(0008, 4, 4, 624, 380, "Neuigkeiten")
WebGadget(0006, 8, 18, 616, 360, "hiveworx.dyndns.org", #PB_Web_Mozilla)
Repeat
StatusBarText(0009, 0, FormatDate("%hh:%ii:%ss", Date()))
Delay(5)
Event = WindowEvent()
If Event = #PB_Event_SysTray
If EventType() = #PB_EventType_RightClick
HideWindow(0002,0)
EndIf
EndIf
If Event = #PB_Event_Gadget
;Debug EventGadget()
Select EventGadget()
Case 0004:
HideWindow(0002,1)
Case 0007:
End
EndSelect
EndIf
Until Quit=1
ANmerkung: ist zwar noch lange nicht perfekt und der ein oder andere hat bestimmt noch ne bessere lösung was ich hoffe die er hier auch postet G* - aber wir nähern uns schon langsam dem ziel - ist auch nimmer so wirr mit der schleife in der schleife usw. - wie gesagt für optimierungsvorschläge hab ich immer n offenes ohr - gerade wiel ich noch kaum erfahrungen hab in richtung proggen.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
sigscht, schon kann man was erkennen... 
bei Case 0007 solltest du dann auch Quit = 1 setzen anstatt einfach END zu machen... is schicker.
so gehts zwar auch, aber wenn du das Quit-Flag schon im Until drin hast, kannst dus auch setzen...

bei Case 0007 solltest du dann auch Quit = 1 setzen anstatt einfach END zu machen... is schicker.
so gehts zwar auch, aber wenn du das Quit-Flag schon im Until drin hast, kannst dus auch setzen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: re:
> für optimierungsvorschläge hab ich immer n offenes ohr
dann solltest Du Deine Fenster und Gadgets mit aussagekräftigen
Bezeichnern versehen, denn wenn Du da nur einfache Nummern angibst,
dann prophezeihe ich Dir, dass Du Dich in Deinem eigenen Code bereits
nach ein paar Tagen nicht mehr zurechfinden wirst.
schlecht, weil unübersichtlich:
schon besser:
Grüße ... Kiffi
dann solltest Du Deine Fenster und Gadgets mit aussagekräftigen
Bezeichnern versehen, denn wenn Du da nur einfache Nummern angibst,
dann prophezeihe ich Dir, dass Du Dich in Deinem eigenen Code bereits
nach ein paar Tagen nicht mehr zurechfinden wirst.
schlecht, weil unübersichtlich:
Code: Alles auswählen
ButtonGadget(0004,534,20,100,16,"Minimieren")
ButtonGadget(0007,534,3,100,16,"Beenden")
Code: Alles auswählen
Enumeration
[...]
#frmHiveworxEngineClient_cmdMinimize
#frmHiveworxEngineClient_cmdEnd
[...]
EndEnumeration
ButtonGadget(#frmHiveworxEngineClient_cmdMinimize,534,20,100,16,"Minimieren")
ButtonGadget(#frmHiveworxEngineClient_cmdEnd,534,3,100,16,"Beenden")
a²+b²=mc²
-
- Beiträge: 250
- Registriert: 25.11.2004 19:51
- Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS
jup -den streß hab ich jetzt schon G* - idee angenommen und wird aktuell gerade umgesetzt - merci for hint
NAchtrag: mmhm schaut zwar jetzt etwas übersichtlicher aus - nur hab ichs nun geschafft - anhand von deiner vorgabe mit den beiden buttons - diese auch in den schleifenabfragen geändert - aber - der 2. button fehlt lol - mal checken noch.
2. Nachtrag - so suppi - nun hab ichs total verbockt - nun hat jedes gadget so n bezeichner - und stürzt dann beim ausführen einfach ab mit ner assigen standart windows-fehlermeldung - mmhm -arg
NAchtrag: mmhm schaut zwar jetzt etwas übersichtlicher aus - nur hab ichs nun geschafft - anhand von deiner vorgabe mit den beiden buttons - diese auch in den schleifenabfragen geändert - aber - der 2. button fehlt lol - mal checken noch.
2. Nachtrag - so suppi - nun hab ichs total verbockt - nun hat jedes gadget so n bezeichner - und stürzt dann beim ausführen einfach ab mit ner assigen standart windows-fehlermeldung - mmhm -arg
sorry, fürs vorkauen

Code: Alles auswählen
Enumeration
#font_0
#win_0
#win_1
#sysTrayIcon_0
#img_0
#cont_gad_0
#button_gad_0
#button_gad_1
#text_gad_0
#stat_bar_0
#panel_gad_0
#frame3dGad_0
#frame3dGad_1
#frame3dGad_2
#frame3dGad_3
#frame3dGad_4
#frame3dGad_5
#web_gad_0
EndEnumeration
LoadFont(#font_0, "Tahoma", 8)
SetGadgetFont(#PB_Default, FontID(#font_0))
OpenWindow(#win_0, 100, 150, 300, 100, "(H)iveworx (C)lient", #PB_Window_Invisible|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(#win_0))
AddSysTrayIcon(#sysTrayIcon_0, WindowID(#win_0), LoadImage(#img_0, "C:\test_pic.ico"))
SysTrayIconToolTip(#sysTrayIcon_0, "(H)iveworx (E)ngine (C)lient")
OpenWindow(#win_1,1,1,640,480,"(H)iveworx (E)ngine (C)lient",#PB_Window_ScreenCentered|#PB_Window_Invisible)
CreateGadgetList(WindowID(#win_1))
ContainerGadget(#cont_gad_0, 0, 420, 640, 40,#PB_Container_Single)
SetGadgetColor(#cont_gad_0, #PB_Gadget_BackColor ,RGB(255, 255, 255))
ButtonGadget(#button_gad_0,534,20,100,16,"Minimieren")
ButtonGadget(#button_gad_1,534,3,100,16,"Beenden")
TextGadget(#text_gad_0,4,2,400,30,"Created 2006 by Hiveworx - Engine V.1.24 (Earthlink)")
SetGadgetColor(#text_gad_0, #PB_Gadget_BackColor ,RGB(0, 0, 0))
SetGadgetColor(#cont_gad_0, #PB_Gadget_BackColor ,RGB(0, 0, 0))
SetGadgetColor(#text_gad_0, #PB_Gadget_FrontColor,RGB(128, 128, 128))
CloseGadgetList()
CreateStatusBar(#stat_bar_0, WindowID(#win_1))
AddStatusBarField(50)
AddStatusBarField(590)
PanelGadget (#panel_gad_0, 2, 2, 636, 414)
AddGadgetItem (#panel_gad_0, -1, "Status")
Frame3DGadget(#frame3dGad_0, 4, 4, 624, 380, "Status")
AddGadgetItem (#panel_gad_0, -1, "Account")
Frame3DGadget(#frame3dGad_1, 4, 4, 624, 380, "Account")
AddGadgetItem (#panel_gad_0, -1, "Einstellungen")
Frame3DGadget(#frame3dGad_2, 4, 4, 624, 380, "Einstelungen")
AddGadgetItem (#panel_gad_0, -1, "Update")
Frame3DGadget(#frame3dGad_3, 4, 4, 624, 380, "Update")
AddGadgetItem (#panel_gad_0, -1, "Log")
Frame3DGadget(#frame3dGad_4, 4, 4, 624, 380, "Log")
AddGadgetItem (#panel_gad_0, -1, "Neuigkeiten")
Frame3DGadget(#frame3dGad_5, 4, 4, 624, 380, "Neuigkeiten")
WebGadget(#web_gad_0, 8, 18, 616, 360, "hiveworx.dyndns.org", #PB_Web_Mozilla)
Repeat
StatusBarText(#stat_bar_0, 0, FormatDate("%hh:%ii:%ss", Date()))
Delay(5)
Event = WindowEvent()
If Event = #PB_Event_SysTray
If EventType() = #PB_EventType_RightClick
HideWindow(#win_1,0)
EndIf
EndIf
If Event = #PB_Event_Gadget
;Debug EventGadget()
Select EventGadget()
Case 0004:
HideWindow(#win_1,1)
Case 0007:
End
EndSelect
EndIf
Until Quit=1
-
- Beiträge: 250
- Registriert: 25.11.2004 19:51
- Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS
RE:
ne paßt schon - 1A merci - anbei mein streß mit dem aufhängen war unsauberes arbeiten - hab versucht ne statusbar auf n systrayicon zu hängen - das wird wohl kaum gehen G* - merci an alle nochmals
1A Support und Community
