Seite 2 von 2

Verfasst: 30.06.2006 14:37
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.

RE:

Verfasst: 30.06.2006 14:45
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. :(

Verfasst: 30.06.2006 14:51
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.

re:

Verfasst: 30.06.2006 14:58
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.

Verfasst: 30.06.2006 15:04
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...

re:

Verfasst: 30.06.2006 15:07
von smateja
oki schon als weiteres Feature implementiert - nur her mit infos G*

Re: re:

Verfasst: 30.06.2006 15:09
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

Verfasst: 30.06.2006 15:23
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

Verfasst: 30.06.2006 15:56
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

RE:

Verfasst: 30.06.2006 16:38
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