Seite 1 von 2

Mehre Fenster plötzlich Bug

Verfasst: 25.06.2007 11:02
von kaitec
Hier erst einmal der Code:

Code: Alles auswählen

Procedure SetWinTransparency(win,level) 
  If level>=0 And level<101 
    hLib = LoadLibrary_("user32.dll") 
    If hLib 
      adr = GetProcAddress_(hLib,"SetLayeredWindowAttributes") 
      If adr 
        SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000 
        CallFunctionFast(adr,WindowID(win),0,255*level/100,2) 
      EndIf 
      FreeLibrary_(hLib) 
    EndIf 
  EndIf 
EndProcedure 

Procedure Editor_Select(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)    
  sel.CHARRANGE 
  sel\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineStart, 0) + CharStart - 1 
  
  If LineEnd = -1 
    LineEnd = SendMessage_(GadgetID(Gadget), #EM_GETLINECOUNT, 0, 0)-1 
  EndIf 
  sel\cpMax = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineEnd, 0) 
  
  If CharEnd = -1 
    sel\cpMax + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, sel\cpMax, 0) 
  Else 
    sel\cpMax + CharEnd - 1 
  EndIf 
  SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel) 
EndProcedure 

; Set the Text color for the Selection 
; in RGB format 
Procedure Editor_Color(Gadget, Color.l) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_COLOR 
  format\crTextColor = Color 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

; Set Font Size for the Selection 
; in pt 
Procedure Editor_FontSize(Gadget, Fontsize.l) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_SIZE 
  format\yHeight = FontSize*20 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

; Set Font for the Selection 
; You must specify a font name, the font doesn't need 
; to be loaded 
Procedure Editor_Font(Gadget, FontName.s) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_FACE 
  PokeS(@format\szFaceName, FontName) 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

; Set Format of the Selection. This can be a combination of 
; the following values: 
; #CFM_BOLD 
; #CFM_ITALIC 
; #CFM_UNDERLINE 
; #CFM_STRIKEOUT 
Procedure Editor_Format(Gadget, Flags.l) 
  format.CHARFORMAT 
  format\cbSize = SizeOf(CHARFORMAT) 
  format\dwMask = #CFM_ITALIC|#CFM_BOLD|#CFM_STRIKEOUT|#CFM_UNDERLINE 
  format\dwEffects = Flags 
  SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure

If consolepoint = 0
  If OpenWindow(1, 0, 0, dddw, dddh, #PB_Window_ScreenCentered | #PB_Window_BorderLess, rname$)
    hBrush.l = CreateSolidBrush_(RGB(0,0,0))
    SetClassLong_(WindowID(1), #GCL_HBRBACKGROUND, hBrush.l)
    InvalidateRect_(WindowID(1), #Null, #True)
    consolepoint = 1
    
    If CreateGadgetList(WindowID())
      EditorGadget(1, 267, 10, editorgw, editorgh, #PB_String_ReadOnly)
      StringGadget(2, 267, strghh, strgw, strgh,"")   : DisableGadget(2,1)
      If pngde = 1
        If LoadImage(221, "SYSTEM\data\rrrrichtig.png")
          ImageGadget(221, 0,10,267,363,UseImage(221))
        EndIf
          SendMessage_(GadgetID(1),#EM_SETBKGNDCOLOR,0,RGB(0,0,0))
          Editor_Color(1, RGB(255,255,255))
      EndIf
      ButtonGadget(3, btww, bthh, btw, bth, "Enter") : DisableGadget(3,1) 
    EndIf

    If CreateStatusBar(11, WindowID())
      AddStatusBarField(dddw)
    EndIf

    StatusBarText(11, 111, "", #PB_StatusBar_BorderLess)


    If CreateMenu(2, WindowID())    ; hier beginnt das Erstellen des Menüs...
      MenuTitle("System")
         OpenSubMenu("Einstellungen")
          MenuItem( 4, "Allgemeine Einstellungen")
          MenuItem( 5, "User Konten")
         CloseSubMenu()                    
         MenuBar()
         MenuItem(1, "Close"  +Chr(9)+"Ctrl+C")
      MenuTitle("User")
         MenuItem(2, "Einlogen")
         MenuItem(3, "Einstellungen")
      MenuTitle("Info")
         MenuItem(11, "About")
    EndIf
    
    
        EventID = WaitWindowEvent()

    Select EventID
      ;-*Menüs*
      Case #PB_Event_Menu

        Select EventMenuID()  ; To see which menu has been selected

          Case 1
          EventID = #PB_Event_CloseWindow
          
          ;-AboutBox
          ;{
          Case 11
          If OpenWindow(2133, 0, 0, 300, 300, #PB_Window_ScreenCentered, "About")
          SetWinTransparency(2133,80)
          If CreateGadgetList(WindowID(2133)) : Top = 10
          TextGadget(1112,    10, Top, 290, 20, "Sibrina About", #PB_Text_Center) : Top+40 : gadnn = 5555
          TextGadget(gadnn,   10, Top, 290, 20, "Entwicklung", #PB_Text_Center) : Top+20 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Kai Caspar", #PB_Text_Center) : Top+30 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Design und Grafik", #PB_Text_Center) : Top+20 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Kai Caspar", #PB_Text_Center) : Top+20 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Patrick Karren", #PB_Text_Center) : Top+30 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Umgeschrieben in den Fenstermodus", #PB_Text_Center) : Top+20 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Kai Caspar", #PB_Text_Center) : Top+20 : gadnn + 1
          TextGadget(gadnn,   10, Top, 290, 20, "Maxilian Gerlach", #PB_Text_Center) : Top+20 : gadnn + 1
          ButtonGadget(7667, 100, 280, 100, 15, "Close")
          EndIf
          Repeat
          Delay(10)
          Event = WindowEvent()
           
          If Event = #PB_Event_Gadget
          Select EventGadgetID()
          Case 7667
          ffgok$ = "ok"

          EndSelect
          EndIf

          Until ffgok$ = "ok"
          CloseWindow(EventWindowID())
          EndIf
          ;}
          
                    ;-Login
          ;{
          Case 2
          If OpenWindow(2233, 0, 0, 180, 120, #PB_Window_ScreenCentered, "Login Daten")
          If CreateGadgetList(WindowID(2233))
          TextGadget(1112, 10, 26, 50, 20, "User:", #PB_Text_Right)
          TextGadget(5555, 10, 52.5, 50, 20, "Password:", #PB_Text_Right)
          StringGadget(3334,70,25,100,20,"", #PB_String_LowerCase )
          StringGadget(2223,70,50,100,20,"",#PB_String_Password)
          ButtonGadget(7667, 80, 90, 100, 15, "Login")
          EndIf
          Repeat
          Delay(10)
          Event = WindowEvent()
           
          If Event = #PB_Event_Gadget
          Select EventGadgetID()
          Case 7667
          If GetGadgetText(2223) <> ""
          ffgok$ = "ok"
          Else
          MessageRequester("Login", "Bitte geben sie ein Passwort ein")
          EndIf

          EndSelect

          EndIf

          Until ffgok$ = "ok"
          name$ = GetGadgetText(3334)
          Passwd$ = GetGadgetText(2223)
          CloseWindow(EventWindowID())
          Else
            MessageRequester("Sibrina", "Schwerer Loginfehler "+Chr(13)+"Fehlernummer: x5:LI-K",0)
          EndIf
          
          epass$=Passwd$
          npass$=epass$
          
             x=50     
             Repeat
             If name$=""
               x = 99
             EndIf
             If name$="rhost"
               x = 99
             EndIf
             If ReadFile(0, "SYSTEM\data\"+Str(x)+".emsdsf")   ; wenn die Datei geöffnet werden konnte, setzen wir fort...
               While Eof(0) = 0          ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
                 user$ = Decrypt(ReadString())      ; Zeile für Zeile im Debugger-Fenster anzeigen
               Wend
               CloseFile(0)
               Delay(1)
               x = x + 1
                 If ReadFile(0, "SYSTEM\data\"+Str(x)+".emsdsf")
                 While Eof(0) = 0
                   pass$ = Decrypt(ReadString())
                 Wend
                 CloseFile(0)
                 Delay(1)
                 x = x + 1
                 If ReadFile(0, "SYSTEM\data\"+Str(x)+".emsdsf")
                   While Eof(0) = 0
                   avss$ = Decrypt(ReadString())
                   Wend
                   CloseFile(0)
                   Delay(1)
                 EndIf 
               EndIf
            EndIf 
    
            x = x + 1
    
            If name$ = user$
              If npass$ = pass$
                If avss$ = "ass=1"
                  imb = 2
                EndIf 
                accp = 1
                bss = 2
                bbss = imb
                MessageRequester(rname$, "                 Password accpet               ")
                 ;-Disables1
                 DisableMenuItem(2,1)
                 DisableMenuItem(4,0)
                 DisableGadget(2,0)
                 DisableGadget(3,0)
                guser = 1
              EndIf
           EndIf
 
           Until accp = 1 Or x > 99
          ;_______________


           If name$ = "rhost"
             If epass$ = "kaitec"
               accp = 1
               bbss = 2
               bss  = 2
               radmin = 1
               MessageRequester(rname$, "                 Password accpet               ")
                ;-Disables2
                DisableMenuItem(2,1)
                DisableMenuItem(4,0)
                DisableGadget(2,0)
                DisableGadget(3,0)
               uinter = 1
               guser = 1
             EndIf
           EndIf

           If x > 98 And accp = 0
             MessageRequester(rname$, "                 Password no accpet             ")
             ;uinter = 1
             ;guser = 2
           EndIf 

           If uinter <> 1
             MessageRequester(rname$, "                 Password no accpet             ")
           EndIf 
          ;}
          
         
          EndSelect
         Case #PB_Event_Gadget
         
         Select #PB_Event_Gadget
          ;-Befehl-Enter
          ;{
          Case 3
          bef$ = GetGadgetText(2)
          SetGadgetText(2, "") 
          ;}
          EndSelect
          
     EndSelect
     
     Delay(2)

SendMessage_(GadgetID(1),#EM_SETOPTIONS,#ECOOP_OR,#ECO_READONLY) 


    If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf

  Until Quit = 1


EndIf
EndIf
Zu meinem Problem:
Ich hatte zuvor nur die Login Box. Wenn das Hauptfenster offen war un man sich einlogen wollte ging die Login box auf un man konnte sich einlogen. Wenn man sich jetzt mit einem anderen User einlogen wollte ging das Fenster auch.
Jetzt ist die AboutBox dazugekommen die genauso wie die Login Box aufgebaut ist.
Nun der Bug: Öffne ich die About Box (schlies sie wieder) und will die Login Box öffnen, kann das Fenster nicht geöffnet werden. Und anderesrum!

An was kann das liegen?
Ich hoffe mir kann schnell jemand helfen... THX im vorraus!

Ein paar wichtige Daten:
Compiler: PB 3.89
OS: Windows (Windoof :=) )

Verfasst: 25.06.2007 12:26
von ts-soft
Das liegt an Deinem Mehrfach EventLoop in allen Ausführungen :mrgreen:

Code: Alles auswählen

CloseWindow(EventWindowID())
Der dann noch zu allem überfluß. Mach eine vernünftige Eventschleife, dann
klappts ach mit dem Nachbarn.

Hab kein PB3.89, kann anonsten nicht weiterhelfen

Verfasst: 25.06.2007 12:28
von Sicro
Bitte gehe deinen Code nochmal gründlich durch und formatiere (gleichmäßig Einrücken ect.) deinen Code. Denn dieser Code wird sich sonst hier niemand antun :|
Des Weiteren besitzt deine Event-Schleife für das Hauptfenster nur einen Befehl zum Verlassen der Schleife. Also sorge dafür, dass er funktionsfähig ist - zumindest unter PB 3.89

Mfg DerProgger

Verfasst: 25.06.2007 12:43
von D@nte
Sorry aber das ist kein Code das is KOT!

Da werden Variablen für Fensterbreite und Höhe verwendet die nirgendwo initialisiert, geschweige denn deklariert werden, da wird ne consolepoint vor'm Aufbau des Fensters erwartet die sonst nirgendwo auftaucht etc...
Dann sollte vllt noch erwähnt werden das die RC4-Lib verwendet wird...
Dazu kommt noch die Quellcodeformatierung und die 5 Repeatschleifen...

Gab's in PB 3.9tralala eigentlich auch noch kein Enumeration bzw Konstanten?! Hab etwa ne halbe Stunde gebraucht um herauszufinden welches Fenster und welcher Button welche ID haben...

Den Fehler zu finden hat allerdings dann doch schon ganze 30 Sekunden gedauert...
Tipp1:
AboutBox und Login nochmal genau anschauen, das kann man selber finden...
Tipp2:
"Jetzt ist die AboutBox dazugekommen die genauso wie die Login Box aufgebaut ist. "

Re: Mehre Fenster plötzlich Bug

Verfasst: 25.06.2007 13:10
von Kiffi
kaitec hat geschrieben:Compiler: PB 3.89
ist schon kagge, wenn auf den Torrents keine aktuellere Version zu finden ist...

Verfasst: 25.06.2007 15:57
von kaitec
Könnt ihr mir nicht helfen? Wenn ichs selbst wüsste würde ichs ja alleine machen. Übrigends Consolenpoint = 1 hat was mit dem code davor zutun.. ..aba dadrum gehts nicht.

Verfasst: 25.06.2007 16:13
von Kiffi
kaitec hat geschrieben:Könnt ihr mir nicht helfen?
ts-soft, DerProgger und D@nte haben Dir doch gute Tipps gegeben, die Du
erst einmal umsetzen solltest. Vielleicht ist dann der Fehler bereits behoben.

Verfasst: 25.06.2007 17:44
von kaitec
Ich such jetzt schon 5std. an dem Fehler und finde ihn nicht ey.. ..es ist zum kotzen... ...da macht das progen keinen spaß mehr...

Verfasst: 25.06.2007 17:49
von bobobo
bin zu faul obigen code zum laufen zu bekommen.

aber solche problematik könnte von nicht eindeutigen fensternummern herrühren.

in deinen obigen code vergibst du die gadget und andere nummern ja
einfach so. Besser wäre es, die aufzunummerieren (ich weiß nicht, ob 3.89
enumerationen kann, wenn ja nutze diese)

Außerdem wäre ein update auf ne aktuelle pb-version angebracht.

Verfasst: 25.06.2007 18:49
von THEEX
3.89 gibts gar nicht erst.... Enumeration wurde bei 3.80 eingeführt.