Mehre Fenster plötzlich Bug

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Mehre Fenster plötzlich Bug

Beitrag 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 :=) )
Benutzeravatar
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

Beitrag 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
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.
Bild
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag 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
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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. "
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mehre Fenster plötzlich Bug

Beitrag von Kiffi »

kaitec hat geschrieben:Compiler: PB 3.89
ist schon kagge, wenn auf den Torrents keine aktuellere Version zu finden ist...
a²+b²=mc²
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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.
a²+b²=mc²
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag 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...
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

3.89 gibts gar nicht erst.... Enumeration wurde bei 3.80 eingeführt.
Antworten