Logikproblem Schleife

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

RE:

Beitrag von smateja »

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. :(
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

gut reagiert :allright:

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.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

re:

Beitrag von smateja »

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: :)

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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

re:

Beitrag von smateja »

oki schon als weiteres Feature implementiert - nur her mit infos G*
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: re:

Beitrag von Kiffi »

> 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:

Code: Alles auswählen

ButtonGadget(0004,534,20,100,16,"Minimieren")
ButtonGadget(0007,534,3,100,16,"Beenden")
schon besser:

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")
Grüße ... Kiffi
a²+b²=mc²
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Beitrag von smateja »

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
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

sorry, fürs vorkauen :oops:

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
my pb stuff..
Bild..jedenfalls war das mal so.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

RE:

Beitrag von smateja »

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
Antworten