Fenster schliessen schließ Button im anderen Fenster

Anfängerfragen zum Programmieren mit PureBasic.
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Fenster schliessen schließ Button im anderen Fenster

Beitrag von Aspirant »

Hallo ich habe ein Problem das ich nicht verstehe!!

Im Haupt Fenster erzeuge ich einen Button das anklicken erzeugt ein Child Fenster wird diese Child Fenster geschlossen ist der Buton auch weg ich verstehe nur nicht warum???

An merkung benutze ich bei dem Button einen Festen wert Tritt der efeckt nicht auf benutze ich eine Konstante Tritt er auf

Sicher über schneidene Varialbel namen habe ich bereits aus geschlossen

Button wir erzeugt

Code: Alles auswählen

;-Allgemeines Fenster
        If OpenWindow(#haf, 0, 0, sp60, sp30, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered); And CreateGadgetList(WindowID(#lof))
          mel(8,#haf,4) ;Info 5 
          PanelGadget(#pag00,sp00,WindowHeight(#haf)/4,WindowWidth(#haf),(WindowHeight(#haf)/4)*3)  
            AddGadgetItem (#pag00, -1, "Preisermitteln")
             ButtonGadget(#bug02,sp01,sp01,sp05,sp02,"")  ;Button "NEU"  #bug02
                mel(1,#bug02,11) 
              ListIconGadget(#lvg00,sp00,(WindowHeight(#haf)/4)*3-(WindowHeight(#haf)/4)*3+50,WindowWidth(#haf),(WindowHeight(#haf)/4)*3-70,"ID",30,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines )
                AddGadgetColumn(#lvg00,1,"Item",100)
                AddGadgetColumn(#lvg00,2,"Job",50)


Erzeugung des Childe Fenster

Code: Alles auswählen

       OpenWindow(#eingabe, 10, 10, 800, 100, "test",#PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#haf))
                          HideWindow(#eingabe, 1) : StickyWindow(#eingabe,1)  ;Fenster für neues Item 1.Unsichtbar 2.Dauerhaft in den Fordergurd Holen
                          xx1=sp01 : xx2=sp01 : xx3=sp01                        ;Variabeln zur Button erzeugung setzen
                          ButtonGadget(#bug10,WindowWidth(#eingabe)-50, 55, sp05, sp02, Text003$)  ;Button Save setzen
Child Fenster wir Geschloßen und der Button auch wie im Bebug zu sehen ist

Code: Alles auswählen

 Case  #PB_Event_CloseWindow ;Fenster neues Item wurde geschlossen
                               Debug "Neu Button 3 ?"
                              Debug #bug02
                              Debug IsGadget(#bug02)
                              CloseWindow(#eingabe)        ;Fenster neues Item sicher schließen
                              Event = 0                  ;Ereignis zurüsetzen
                               Debug "Neu Button 3a ?"
                              Debug #bug02
                              Debug IsGadget(#bug02)
                              DisableWindow(#haf,0) : HideWindow(#haf, 0) ;Hauptfenster 1.Freigeben 2.Sichtbar machen
                          EndSelect
Hier die Debug ausgabe;

[11:20:50] Neu Button 3 ?
[11:20:50] 2024
[11:20:50] 13548608
[11:20:50] Neu Button 3a ?
[11:20:50] 2024
[11:20:50] 0

Wie Hoffentlich gut zu erkenen ist ist der Button Funktions bereit bevor das Fenster geschloßen wird und da nach nicht mehr ich habe nur keine Ahnung warum??

wäre nett wenn mit jemand helfen könnte bei dem Problem woll nur nicht über 1000 Zeilen Code Posten auf Wunsch stelle ich in natürlich bereit oder maile ihn zu.

mfg Aspi
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Versetz dich doch mal in die Lage der anderen hier. Die kennen den Code
nicht, und da bringt es auch nichts Teile davon zu posten.

Ich vermute mal das deine Enumeration bzw Konstanten sich ueberschneiden.
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Beitrag von Aspirant »

Das Problem das mann den Code nicht kennt ist mir bewust und dich hatte auch erwähnt das ich in bei bedarf Poste nur Wollte ich es keinen umbedingt an tun 1000 zeilen weges eines villeicht kleinen Fehlers durch zu gehen.

Das Problem mit der Enumeration hatte ich auch schon ins Auge gefast in besondere, weil wenn ich einen Feste Zahl für den Button nehme der fehler nicht auf Tritt. Eine überprüfung on die Konstante einen neuen wert bekommt trifft auch nicht zu sie ist vor dem erstellen bis zu dem verschwinden "2024" ich habe der Enumeration auch schon mal anerde werte zu gewiesen gehabt was nichts änderte.

wenn du möchtest kannst du gerne den Code einsehn.

MFG Aspi
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Aspirant

schau dir mal dieses Beispiel genau an.

abgesehen von der strengen Trennung nach EventWindow,
die du ja so ähnlich bestimmt auch vornimmst,
beachte die eine einzige Enumeration für alle Gadgets aller Fenster.

Code: Alles auswählen

;*********************************************************
;*** MoreWindows.pb
;***
;*** Example for use of EventWindow()
;*** to handle multiple Windows
;*** without child/parent
;***
;*** Dec.22, 2006  Kaeru Gaman
;***
;*** PB Ver 4.02 Win
;*********************************************************
EnableExplicit
;*************************************
Enumeration     ;Windows
  #Win_Main
  #Win_Sub1
  #Win_Sub2
  #Win_Sub3
  #Win_Sub4
EndEnumeration
;*************************************
Enumeration     ;Gadgets
  #Main_But_LaunchSub1
  #Main_But_LaunchSub2
  #Main_But_LaunchSub3
  #Main_Txt_Display
  #Sub1_But_TestBeep 
  #Sub2_But_TestBeep 
  #Sub3_But_LaunchSub4
  #Sub4_Opt_Text1
  #Sub4_Opt_Text2
  #Sub4_Opt_Text3
EndEnumeration
;*************************************
 Procedure OpenSub1()
  OpenWindow(#Win_Sub1, -1, -1, 200,150,"Sub1",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
    CreateGadgetList(WindowID(1))
      ButtonGadget(#Sub1_But_TestBeep,10,10,60,20,"Beep Deep")
 EndProcedure
;*************************************
 Procedure OpenSub2()
  OpenWindow(#Win_Sub2, -1, -1, 200,150,"Sub2",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
    CreateGadgetList(WindowID(2))
      ButtonGadget(#Sub2_But_TestBeep,10,10,60,20,"Beep High")
 EndProcedure
;*************************************
 Procedure OpenSub3()
  OpenWindow(#Win_Sub3, -1, -1, 200,150,"Sub3",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
    CreateGadgetList(WindowID(3))
    ButtonGadget(#Sub3_But_LaunchSub4, 70,110,120,30,"Launch Sub4")
 EndProcedure
;*************************************
 Procedure OpenSub4()
  OpenWindow(#Win_Sub4, -1, -1, 200,150,"Sub4",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
    CreateGadgetList(WindowID(4))
      OptionGadget(#Sub4_Opt_Text1,20,20,160,20,"Beef")
      OptionGadget(#Sub4_Opt_Text2,20,50,160,20,"Lamb")
      OptionGadget(#Sub4_Opt_Text3,20,80,160,20,"Fish")
 EndProcedure
;*************************************
OpenWindow(#Win_Main,0,0,320,240,"Main", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
  CreateGadgetList(WindowID(0))
    ButtonGadget(#Main_But_LaunchSub1,190,120,120,30,"Launch Sub1")
    ButtonGadget(#Main_But_LaunchSub2,190,160,120,30,"Launch Sub2")
    ButtonGadget(#Main_But_LaunchSub3,190,200,120,30,"Launch Sub3")
    TextGadget(#Main_Txt_Display,10,10,160,20, "No Choice yet", #PB_Text_Border)
;*************************************
Define Event.l
Define EXIT.l
Define DisplayTxt$ = "Your Choice is "
;*************************************
Repeat
  Event = WaitWindowEvent()
  Select EventWindow()
;*********************************************************
;*** Main Window
;*********************************************************
    Case   #Win_Main
      Select Event
        Case #PB_Event_Gadget
    ;*************************************
    ;** Gadget Events
          Select EventGadget()
            Case #Main_But_LaunchSub1
              OpenSub1()
            Case #Main_But_LaunchSub2
              OpenSub2()
            Case #Main_But_LaunchSub3
              OpenSub3()
          EndSelect
    ;*************************************
    ;** Other Events
        Case #PB_Event_CloseWindow
          EXIT = 1
      EndSelect
;*********************************************************
;*** Sub Window 1
;*********************************************************
    Case #Win_Sub1
      Select Event
        Case #PB_Event_Gadget
    ;*************************************
    ;** Gadget Events
          Select EventGadget()
            Case #Sub1_But_TestBeep
              Beep_( 500,300)
          EndSelect
    ;*************************************
    ;** Other Events
        Case #PB_Event_CloseWindow
          CloseWindow(#Win_Sub1)
      EndSelect
;*********************************************************
;*** Sub Window 2
;*********************************************************
    Case #Win_Sub2
      Select Event
        Case #PB_Event_Gadget
    ;*************************************
    ;** Gadget Events
          Select EventGadget()
            Case #Sub2_But_TestBeep
              Beep_(1500,300)
          EndSelect
    ;*************************************
    ;** Other Events
        Case #PB_Event_CloseWindow
          CloseWindow(#Win_Sub2)
      EndSelect
;*********************************************************
;*** Sub Window 3
;*********************************************************
    Case #Win_Sub3
      Select Event
        Case #PB_Event_Gadget
    ;*************************************
    ;** Gadget Events
          Select EventGadget()
            Case #Sub3_But_LaunchSub4
              OpenSub4()
          EndSelect
    ;*************************************
    ;** Other Events
        Case #PB_Event_CloseWindow
          CloseWindow(#Win_Sub3)
      EndSelect
;*********************************************************
;*** Sub Window 4
;*********************************************************
    Case #Win_Sub4
      Select Event
        Case #PB_Event_Gadget
    ;*************************************
    ;** Gadget Events
          Select EventGadget()
            Case #Sub4_Opt_Text1
              SetGadgetText(#Main_Txt_Display, DisplayTxt$ + "Beef")
            Case #Sub4_Opt_Text2
              SetGadgetText(#Main_Txt_Display, DisplayTxt$ + "Lamb")
            Case #Sub4_Opt_Text3
              SetGadgetText(#Main_Txt_Display, DisplayTxt$ + "Fish")
          EndSelect
    ;*************************************
    ;** Other Events
        Case #PB_Event_CloseWindow
          CloseWindow(#Win_Sub4)
      EndSelect
;*********************************************************
;*** End of Window List
;*********************************************************
  EndSelect
Until EXIT = 1
End
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Beitrag von Aspirant »

@Kaeru Gaman
Ich Denke das ich bei der Enumeration keinen Fehler habe, weil sie genau deinem hinweis enspricht.

Bei den Events bin ich mir da nicht so sicher(eigentlich er garnicht)

Code: Alles auswählen

;-Allgemeines Fenster
        If OpenWindow(#haf, 0, 0, sp60, sp30, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered); And CreateGadgetList(WindowID(#lof))
          mel(8,#haf,4) ;Info 5 
          PanelGadget(#pag00,sp00,WindowHeight(#haf)/4,WindowWidth(#haf),(WindowHeight(#haf)/4)*3)  
            AddGadgetItem (#pag00, -1, "Preisermitteln")
             ButtonGadget(#bug02,sp01,sp01,sp05,sp02,"")  ;Button "NEU"  #bug02
                mel(1,#bug02,11) 
              ListIconGadget(#lvg00,sp00,(WindowHeight(#haf)/4)*3-(WindowHeight(#haf)/4)*3+50,WindowWidth(#haf),(WindowHeight(#haf)/4)*3-70,"ID",30,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines )
                AddGadgetColumn(#lvg00,1,"Item",100)
                AddGadgetColumn(#lvg00,2,"Job",50)
                AddGadgetColumn(#lvg00,3,"Sex",50)
                AddGadgetColumn(#lvg00,4,"LVL",50)
                AddGadgetColumn(#lvg00,5,"SET",50)
                AddGadgetColumn(#lvg00,6,"ATK",50)
                AddGadgetColumn(#lvg00,7,"DEF",50)
                AddGadgetColumn(#lvg00,8,"Crit",50)
                AddGadgetColumn(#lvg00,9,"Atk. SPD",50)
                AddGadgetColumn(#lvg00,10,"STR",50)
                AddGadgetColumn(#lvg00,11,"STA",50)
                AddGadgetColumn(#lvg00,12,"DEX",50)
                AddGadgetColumn(#lvg00,13,"INT",50)
                AddGadgetColumn(#lvg00,14,"Strom",50)
                AddGadgetColumn(#lvg00,15,"Feuer",50)
                AddGadgetColumn(#lvg00,16,"Erde",50)
                AddGadgetColumn(#lvg00,17,"Wasser",50)
                AddGadgetColumn(#lvg00,18,"Wind",50)
                AddGadgetColumn(#lvg00,19,"H. VK",50)
                AddGadgetColumn(#lvg00,20,"H. EK",50)
                AddGadgetColumn(#lvg00,21,"P VK",50)
                AddGadgetColumn(#lvg00,22,"M VK",50)
                AddGadgetColumn(#lvg00,23,"D VL",50)
                fillen(3)
              
               
            AddGadgetItem (#pag00, -1, "Preisthistory")
            AddGadgetItem (#pag00, -1, "Einstellungen")
              CheckBoxGadget(#chb00,sp10,sp03,sp02,sp02,""):DisableGadget(#chb00,1)  ;Checkbox Preis Anzeigen
              CheckBoxGadget(#chb01,sp10,sp06,sp02,sp02,""):DisableGadget(#chb01,1)  ;Checkbox Item Anzeigen
              CheckBoxGadget(#chb02,sp10,sp09,sp02,sp02,""):DisableGadget(#chb02,1)  ;Checkbox Element Anzeigen
              CheckBoxGadget(#chb03,sp15,sp03,sp02,sp02,""):DisableGadget(#chb03,1)  ;Checkbox Preis Ändern / Neu
              CheckBoxGadget(#chb04,sp15,sp06,sp02,sp02,""):DisableGadget(#chb04,1)  ;Checkbox Item Ändern / Neu
              CheckBoxGadget(#chb05,sp15,sp09,sp02,sp02,""):DisableGadget(#chb05,1)  ;Checkbox Element Ändern / Neu
              CheckBoxGadget(#chb06,sp20,sp03,sp02,sp02,""):DisableGadget(#chb06,1)  ;Checkbox Preis Löschen
              CheckBoxGadget(#chb07,sp20,sp06,sp02,sp02,""):DisableGadget(#chb07,1)  ;Checkbox Item Löschen
              CheckBoxGadget(#chb08,sp20,sp09,sp02,sp02,""):DisableGadget(#chb08,1)  ;Checkbox Element Löschen
              TextGadget(#txg03,sp10,2,sp05,sp02,"")      ;Spalten Kopf Ansehen
                mel(1,#txg03,8) ;Preise
              TextGadget(#txg04,sp15,2,sp05,sp02,"")      ;Spalten Kopf Ändern / Neu
                mel(1,#txg04,9) ;Item
              TextGadget(#txg05,sp20,2,sp05,sp02,"")      ;Spalten Kopf Löschen
                mel(1,#txg05,10) ;Element
              TextGadget(#txg06,sp01,sp03,sp08,sp02,"",#PB_Text_Right) ;Zeilen Kopf Preis
                mel(1,#txg06,5) ;Anzeigen
              TextGadget(#txg07,sp01,sp06,sp08,sp02,"",#PB_Text_Right) ;Zeilen Kopf Item
                mel(1,#txg07,14) ;Anlegen
              TextGadget(#txg08,sp01,sp09,sp08,sp02,"",#PB_Text_Right) ;Zeilen Kopf Element
                mel(1,#txg08,6) ;Ändern
              
              einst()
            AddGadgetItem (#pag00, -1, "Admin")
          Repeat                            ;Start der Schleife im Hauptfenster
            Event = WaitWindowEvent()       ;CPU endlasten warten auf ereignis im Fenster
            Select Event                    ;Schleife zu ermitteln des Ereignis
              Case #PB_Event_Gadget         ;Filter ob Gadget Ereignis aus gelöst hat
                Select EventGadget()        ;Filter um das ereignis Gadget zu finden
                  Case #bug02              ;Gadget "Button Neu" würde gedückt
                    Select EventType()      
                      Case #PB_EventType_LeftClick
                        DisableWindow(#haf,1) ;Hauptfenster Abschalten
                        ;HideWindow(#haf, 1)   ;Hauptfenster Unsichtbar machen
                        Debug "Neu Button 2 ?"
                              Debug #bug02
                           Debug IsGadget(#bug02)
                        OpenWindow(#eingabe, 10, 10, 800, 100, "test",#PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#haf))
                          HideWindow(#eingabe, 1) : StickyWindow(#eingabe,1)  ;Fenster für neues Item 1.Unsichtbar 2.Dauerhaft in den Fordergurd Holen
                          xx1=sp01 : xx2=sp01 : xx3=sp01                        ;Variabeln zur Button erzeugung setzen
                          ButtonGadget(#bug10,WindowWidth(#eingabe)-50, 55, sp05, sp02, Text003$)  ;Button Save setzen
                          
                          For s=#cbg00 To #cbg00+21     ;Schleife zur Button erzeugung
                            sz= s - #cbg00               ;Schleifenzähler
                            SelectElement(tex(), sz)   ;Text aus wählen

                            Select sz                    ;Schleifen wert zur erzeugung den gadget
                              Case 0 
                                TextGadget(#txg03+sz,xx1,10,44,sp02,tex()\ite )
                                TextGadget(s, xx1, 30, 34,sp02,Str(ID), #PB_Text_Border)
                                xx1=xx1+50
                              Case 1 To 2
                                TextGadget(#txg03+sz,xx1,10,44,sp02,tex()\ite )
                                ComboBoxGadget(s, xx1, 30, 44,sp02)
                                xx1=xx1+50
                              Case 3 
                                TextGadget(#txg03+sz,xx1,10,sp05,sp02,tex()\ite )
                                ComboBoxGadget(s, xx1, 30, sp10,sp02, #PB_ComboBox_Editable)
                                xx1=xx1+100
                              Case 4 To 6
                                TextGadget(#txg03+sz,xx1,10,sp05,sp02,tex()\ite )
                                ComboBoxGadget(s, xx1, 30, sp10,sp02)
                                xx1=xx1+100
                              Case 7 To 8
                                TextGadget(#txg03+sz,xx1,10,sp05,sp02,tex()\ite )
                                StringGadget(s, xx1, 30, sp10,sp02,"", #PB_String_Numeric)
                                xx1=xx1+100
                              Case 9 To 13
                                TextGadget(#txg03+sz,xx2,55,45,sp02,tex()\ite )
                                ComboBoxGadget(s, xx2, 75, 45,sp02)
                                xx2=xx2+50
                              Case 14 To 25
                                TextGadget(#txg03+sz,xx2,55,45,sp02,tex()\ite )
                                StringGadget(s, xx2, 75, 45,sp02,"")
                                xx2=xx2+50
                            EndSelect
                          Next
                        fillen(1)
                        
                        HideWindow(#eingabe, 0)  
                        LastElement(item())
                                    SetGadgetText(#cbg00,Str(item()\id+1))
                        Repeat              ;Schleife Fenster Neu
                          Event = WaitWindowEvent()
                          Select Event      ;fenster ereignis auswerten
                            Case #PB_Event_Gadget
                              Select EventGadget()
                                Case #cbg09 To #cbg13 ;Änderrung bei elementen
                                  If EventType() =1   ;Rückseten des Elemts bei geänderter auswahl
                                    If EventGadget() <> #cbg09 : SetGadgetState(#cbg09,0) :EndIf
                                    If EventGadget() <> #cbg10 : SetGadgetState(#cbg10,0) :EndIf
                                    If EventGadget() <> #cbg11 : SetGadgetState(#cbg11,0) :EndIf
                                    If EventGadget() <> #cbg12 : SetGadgetState(#cbg12,0) :EndIf
                                    If EventGadget() <> #cbg13 : SetGadgetState(#cbg13,0) :EndIf
                                  EndIf
                                Case #bug10           ;Save Button ausgelöst
                                  Event = 0            ;Ereigenis zurücksetzen
                                  If GetGadgetText(#cbg03) <> ""  ;Fetsellen ob Item name leer ist Ja= Nicht Speichern
                                    save(1)                       ;Eingabe in zerlegen und in SQL Speichern
                                    fillen(2)                     ;Felder auf Grundwerten zurück setzen
                                    LastElement(item())
                                    SetGadgetText(#cbg00,Str(item()\id+1)) ;Item ID um 1 erhöhen
                                  EndIf
                              EndSelect
                            Case  #PB_Event_CloseWindow ;Fenster neues Item wurde geschlossen
                               Debug "Neu Button 3 ?"
                              Debug #bug02
                              Debug IsGadget(#bug02)
                              CloseWindow(#eingabe)        ;Fenster neues Item sicher schließen
                              Event = 0                  ;Ereignis zurüsetzen
                               Debug "Neu Button 3a ?"
                              Debug #bug02
                              Debug IsGadget(#bug02)
                              DisableWindow(#haf,0) : HideWindow(#haf, 0) ;Hauptfenster 1.Freigeben 2.Sichtbar machen
                          EndSelect
                        Until IsWindow(#eingabe)= 0    ;Hauptfenster auf Gültigkeit Prüfen (Programm ende
                           
                    EndSelect
                EndSelect
            EndSelect
          Until Event= #PB_Event_CloseWindow
@Oliver1994
Und du meinst ein Anfänger versteht den Code?

Wir sind hier im Anfängerforum nicht im Allgemeinen...
Ist mir Klar weil ich mich für einen Anfänger halte deiner Meinung nach geben hier also Anfänger hilfe anstatt zu Posten oder wie soll ich deine Ausage verstehen??

MFG Aspi
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Poste die Enumeration mal. Oder am besten den ganzen Code, kannst du
danach wieder entfernen.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

edel hat geschrieben:Oder am besten den ganzen Code, kannst du
danach wieder entfernen.
+1

Grüße ... Kiffi
a²+b²=mc²
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Und Probier bitte mal, die deutsche Rechtschreibung zu achten (grobe Fehler
mit der Vorschaufunktion ausmerzen). Vor allem im ersten Post. Ich versteh
da nur schwer was.
Win11 x64 | PB 6.20
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Beitrag von Aspirant »

Ok werde mal versuchen auf fehler zu Achten.

Hier nun der Code.

Code: Alles auswählen

;; Wenn Du übers Internet auf eine MySQL Datenbank zugreifen
; möchtest kannst Du das entweder über ODBC oder direkt mit der
; libmysql.dll -> http://www.mysqltools.com/download.htm realisieren.

; PS: Nachfolgend von Max aus dem Englischen Forum ein Beispiel für
; die Nutzung der libmysql.dll:
;##############################################################################
;-Fehler Meldungen

Global fehler1000$ = "Konnte >libmysql.dll< nicht finden"
Global fehler1001$ = "Keinen Gültigen Datensatz gefunden"
Global fehler1002$ = "Bitte auch Passwort eingeben"


;##############################################################################
;-Text Meldungen
Text001$  = "Benutzer"
Text002$  = "Passwort"
Text003$  = "Einloggen"
Text004$  = "Benutzer Login"
Text005$  = "Hallo "
;************************************************
Text100$  = "Anzeigen"
Text101$  = "Ändern "
Text102$  = "Löschen"
Text103$  = "Preise"
Text104$  = "Item"
Text105$  = "Elemente"
;************************************************
Text200$  = "Neu"
;************************************************


;##############################################################################
;Feld und Fenster Größen
;Variabel auf  Buchstabern 1+2 Fenster kennung, 3 Achse, 4+5 Fenster oder Feldfunktion
;X = Waagerecht, Y = Senkrecht, Z = Tiefe
;-Fenster Login
 
;-Fenster Allgemein 
  
;##############################################################################
;-Structuren
 
  Structure benutzer;Benutzer Angaben
    id.l    ;Zeilen ID
    nick.s  ;benutzer Nich
    pass.s  ;benutzer Passwort (MD5)
  EndStructure
  
  Structure rights;Benutzer Rechte
    id.l          ;Zeilen ID
    userid.l      ;Zeilen ID von Benutzer
    lese.s        ;Daten Lesen? N/(J)
    schreibe.s    ;Daten Schreiben N/(J)
    delete.s      ;Daten Löschen (N)/J
    pre.l      ;
    ite.l
    ele.l 
  EndStructure
    
  Structure ruestung ;Job Table
    id.l          ;Table ID
    nam.s         ;Name
    lvl.s         ;Benötiges LVL
    gen.s         ;Geschlecht
    set.s         ;Setteil 
    spe.s         ;Waffen Speed
  EndStructure
  
  Structure elemente ;Job Table
    id.l          ;Table ID
    itemid.l      ;Item ID
    str.l         ;Vagrant
    feu.l         ;Mercenary
    erd.l         ;Knight
    was.l         ;Blade
    win.l         ;Assist
   EndStructure
   
   Structure chara ;Job Chara Werte
    id.l          ;Table ID
    itemid.l      ;Item ID
    atk.s         ;ATK wert
    def.s         ;DEF wert
    cri.s         ;Crit wert
    spd.s         ;AtkSpd wert
    str.s         ;STR wert
    sta.s         ;STA wert
    dex.s         ;DEX wert
    int.s         ;INT Wert
    spe.s         ;SPEED
  EndStructure
  
  Structure berufe ;Job Table
    id.l          ;Table ID
    itemid.l      ;Item ID
    vag.s         ;Vagrant
    mer.s         ;Mercenary
    kni.s         ;Knight
    bla.s         ;Blade
    ass.s         ;Assist
    bil.s         ;Billposter
    rin.s         ;Ringmaster
    mag.s         ;Magician
    ele.s         ;Elementer
    psy.s         ;Psykeeper
    acr.s         ;Acrobat
    jes.s         ;Jester
    ran.s         ;Ranger
  EndStructure
  
  Structure kosten ;Job Table
    id.l          ;Table ID
    itemid.l      ;Item ID
    hek.l         ;vom Händler Kaufen
    hvk.l         ;an Händler verkaufen
    mvk.l         ;Mittlerer Verkaufs Preis aus Histerie daten
    evk.l         ;empfohlender verkaufs Preis
  EndStructure
   
   Structure user_kosten ;Job Table
    id.l          ;Table ID
    userid.l      ;User ID
    preisid.l     ;Preis ID
    itemid.l      ;Item ID
    pre.l         ;Preis in Penya
    dat.l         ;Datum
  EndStructure
  
  Structure infos ;Texte und Fehler Meldungen 
    id.l          ;Table ID
    inf.s         ;Gadget Texte
    tip.s         ;Tool Tipp infos 
    ite.s         ;Item gadget Texte Fenster Neu
    feh.s         ;Fehler Texte
    job.s         ;Job Namen
    spe.s         ;Waffen geschwindigkeiten
  EndStructure
  
  Structure table
    id.s
    nam.s
    job.s
    sex.s
    lvl.s
    atk.s
    def.s
    cri.s
    spd.s
    str.s
    sta.s
    dex.s
    int.s
    lig.s
    feu.s
    erd.s
    was.s
    win.s
    hvk.s
    hek.s
    pvk.s
    mvk.s
    dvk.s
  EndStructure
    
;##############################################################################
;-Variabeln Linketlist 

Global status = 0, pfad$
Global NewList user.benutzer(), NewList rechte.rights(), NewList job.berufe(), NewList tex.infos(), NewList item.ruestung()
Global NewList ele.elemente(), NewList char.chara(), NewList preis.kosten(), NewList preih.user_kosten()
Global NewList tab.table()
Global sp01=10,sp02=20,sp03=30,sp04=40,sp05=50,sp06=60,sp07=70,sp08=80,sp09=90,sp10=100
Global sp11=110,sp12=120,sp13=130,sp14=140,sp15=150,sp16=160,sp17=170,sp18=180,sp19=190,sp20=200
Global sp21=210,sp22=220,sp23=230,sp24=240,sp25=250,sp26=260,sp27=270,sp28=280,sp29=290,sp30=300
Global sp31=310,sp32=320,sp33=330,sp34=340,sp35=350,sp36=360,sp37=370,sp38=380,sp39=390,sp40=400
Global sp41=410,sp42=420,sp43=430,sp44=440,sp45=450,sp46=460,sp47=470,sp48=480,sp49=490,sp50=500
Global sp51=510,sp52=520,sp53=530,sp54=540,sp55=550,sp56=560,sp57=570,sp58=580,sp59=590,sp60=600
Global sp61=610,sp62=620,sp63=630,sp64=640,sp65=650,sp66=660,sp67=670,sp68=680,sp69=690,sp70=700
Global sp71=710,sp72=720,sp73=730,sp74=740,sp75=750,sp76=760,sp77=770,sp78=780,sp79=790,sp80=800
Global sp81=810,sp82=820,sp83=830,sp84=840,sp85=850,sp86=860,sp87=870,sp88=880,sp89=890,sp90=900
Global sp91=910,sp92=920,sp93=930,sp94=940,sp95=950,sp96=960,sp97=970,sp98=980,sp99=990
;##############################################################################
;MySql Zugang
pfad$ = GetTemporaryDirectory()
XIncludeFile  "sql_dll.pbi" 
PBData_Save(pfad$+PBData_GetFileName(1), 1)
#libmysql = 1

host.s    = "10.10.1.199"
user.s    = "Flyff"
passwd.s  = "*******"
db.s      = "flyff"
port.l    = 3306

Global dbHnd.l, row.s, affRows.l, fieldNum.l, rowsNum.l


Procedure.s listung()
  
;##############################################################################
;Fenster & Gadget
Enumeration 1000 ;Fenster 
#lof        ;Login Fenster
#haf        ;Haupt Fenster
#eingabe      ;Haupt Fenster Child neu Anlegen von Item
EndEnumeration
Enumeration ;Gadget 
#txg00      ;Benutzername
#txg01      ;Passwort
#txg02      ;Fehler ausgabe Login
#txg03
#txg04
#txg05
#txg06
#txg07
#txg08
#txg09
#txg10
#stg00      ;Benutzerneme Eingabefeld
#stg01      ;Passwort Engabefeld
#stg02
#stg03
#stg04
#stg05
#stg06
#stg07
#stg08
#stg09
#stg10
#bug00      ;Login Button
#bug01      ;Button Neuer User
#bug02      ;Button Neues Item
#bug03
#bug04
#bug10      ;Speicher Button Neues Iten
#pag00      ;Panels
#pag01
#pag02
#pag03
#chb00      ;Checkbox
#chb01
#chb02
#chb03
#chb04
#chb05
#chb06
#chb07
#chb08
#chb09
#lvg00      ;Listen Gadget
#cbg00
#cbg01
#cbg02
#cbg03
#cbg04
#cbg05
#cbg06
#cbg07
#cbg08
#cbg09
#cbg10
#cbg11
#cbg12
#cbg13
#cbg14
#cbg15
#cbg16
#cbg17
#cbg18
#cbg19
#cbg20
#cbg21
#cbg22
#cbg23
#cbg24
#cbg25
#cbg26
#cbg27
#cbg28
#cbg29
#cbg30
EndEnumeration


EndProcedure
  


  listung() ; Konstanten erstellen
    
Procedure.s GetError(db_ID,requester)
  
  Protected Errormsg.s, i.l, Error.l
  
  If CallFunction(#libmysql,"mysql_errno",db_ID) > 0
    *Error =CallFunction(#libmysql,"mysql_error",db_ID)
    i=-1
    Repeat
      i=i+1
      Errormsg=Errormsg+PeekS(*Error+i,1)
    Until PeekB(*Error+i)=0
    If requester
      Result= MessageRequester("MySQL error",Errormsg,#PB_MessageRequester_Ok)
    EndIf
  EndIf
  
  ProcedureReturn Errormsg
  
EndProcedure

Procedure.l mel(job,feld,text)
  SelectElement(tex(),text)
  Select Job
    Case 1  ;Tool tipp Infos
      SetGadgetText(feld,tex()\inf)
    Case 2  ;Item Text Gadgets
    Case 3  ;Fehler Texte
      SetGadgetText(feld,tex()\feh)
    Case 4  ;Job Texte
    Case 5  ;Texte Waffen Speed
    Case 6  ;Info Texte Button
    Case 7  ;Fenster Text setze
      SetWindowTitle(feld,tex()\inf)
    Case 8  ;Fenster Text setze
      SetWindowTitle(feld,tex()\inf+" "+user()\nick)
  EndSelect
    
EndProcedure

Procedure.s mysql(SQL.s,job)
If CallFunction(#libmysql,"mysql_real_query", dbHnd, SQL, Len(SQL))
        GetError(dbHnd,1)
      Else
        *mysqlResult=CallFunction(#libmysql,"mysql_store_result",dbHnd)
        
        ;no result returned
        If *mysqlResult=0
          ;no fields returned means error
          If CallFunction(#libmysql,"mysql_field_count",dbHnd)
            GetError(dbHnd,1)
            ;fields are returned, so no error but query didn't return data
          Else
            
          EndIf
          ;results are returned
        Else
          
          affRows   = CallFunction(#libmysql,"mysql_affected_rows",dbHnd);liefert die Anzahl betroffener Datensätze durch die letzte INSERT, UPDATE oder DELETE Anfrage an den Server
          fieldNum  = CallFunction(#libmysql,"mysql_num_fields",*mysqlResult); liefert die Anzahl der Felder in der Ergebnismenge, die mit dem Parameter Ergebnis-Kennung angegeben wurde
          rowsNum   = CallFunction(#libmysql,"mysql_num_rows",*mysqlResult) ;liefert die Anzahl der Datensätze einer Ergebnismenge. Diese Funktion ist nur gültig für SELECT Befehle.
          ;Haben Sie eine INSERT, UPDATE oder DELETE Abfrage ausgeführt und möchten die Anzahl der betroffenen Datensätze ermitteln, verwenden Sie die Funktion mysql_affected_rows().
          
          Debug "INSERT, UPDATE oder DELETE "+Str(affRows)
          Debug "Felder in der Ergebnismenge "+Str(fieldNum)
          Debug "nur gültig für SELECT Datensätze "+Str(rowsNum)
          
          If rowsNum = 0
            ;SQL Fehler ausgeben
            Select Job
              Case 1;Login Passwort User Prüfen 
                SetGadgetText(#txg02,fehler1001$)
;               Case 2
;                 If FirstElement(item()) = 0
;                   ClearList(item()) 
;                   AddElement(item())
;                 EndIf
            EndSelect
          Else
          For i=1 To rowsNum
            *mysqlRow=CallFunction(#libmysql,"mysql_fetch_row",*mysqlResult);Liefert einen Datensatz als indiziertes Array
            *mysqlLen=CallFunction(#libmysql,"mysql_fetch_lengths",*mysqlResult);Liefert die Länge eines jeden Feldes in einem Ergebnis 
            
            row = ""
            spalte= 0
            
            ;length of given field
            For j=1 To fieldNum
              length=PeekL(*mysqlLen+4*(j-1))
              fieldptr=PeekL(*mysqlRow+4*(j-1))
              If fieldptr>0
                content.s=PeekS(fieldptr,length)
              Else
                ;zero pointer returend means empty field
                content="NULL"
              EndIf
              Select job
                Case 1 ;Login Passwort User Prüfen
                  Select spalte
                    Case 0
                      AddElement(user())
                      user()\id=Val(content)
                    Case 1
                      user()\nick=content
                    Case 2
                      user()\pass=content
                  EndSelect
                Case 2 ;User Rechte holen
                  Select spalte
                    Case 0
                      AddElement(rechte())
                      rechte()\id=Val(content)
                    Case 1
                      rechte()\userid=Val(content)
                    Case 2
                      rechte()\lese=content
                    Case 3
                      rechte()\schreibe=content
                    Case 4
                      rechte()\delete=content
                    Case 5
                      rechte()\pre=Val(content)
                    Case 6
                      rechte()\ite=Val(content)
                    Case 7
                      rechte()\ele=Val(content)
                  EndSelect  
                Case 3 ;Job infos Holen
                  Select spalte
                    Case 0 
                      AddElement(job())
                      job()\id=Val(content)
                    Case 1
                      job()\itemid=Val(content)
                    Case 2
                      job()\vag=content
                    Case 3
                      job()\mer=content
                    Case 4
                      job()\kni=content
                    Case 5
                      job()\bla=(content)
                    Case 6
                      job()\ass=(content)
                    Case 7
                      job()\bil=(content)
                    Case 8
                      job()\rin=(content)
                    Case 9
                      job()\mag=(content)
                    Case 10
                      job()\ele=(content)
                    Case 11
                      job()\psy=(content)
                    Case 12
                      job()\acr=(content) 
                    Case 13
                      job()\jes=(content)
                    Case 14
                      job()\ran=(content) 
                   EndSelect
                Case 4 ;Items Holen
                  Select spalte
                    Case 0 
                      AddElement(item())
                      item()\id=Val(content)
                    Case 1
                      item()\nam=(content)
                    Case 2
                      item()\lvl=content
                    Case 3
                      item()\gen=content
                    Case 4
                      item()\set=content
                    Case 5
                      item()\spe=content
                  EndSelect 
                Case 5 ;Elemente Holen
                  Select spalte
                    Case 0                       
                      AddElement(ele())
                      ele()\id=Val(content)
                    Case 1
                      ele()\itemid=Val(content)
                    Case 2
                      ele()\str=Val(content)
                    Case 3
                      ele()\feu=Val(content)
                    Case 4
                      ele()\erd=Val(content)
                    Case 5
                      ele()\was=Val(content)
                    Case 5
                      ele()\win=Val(content)
                  EndSelect
                Case 100
                  Select spalte
                    Case 0                  ;Table ID
                      AddElement(tex())
                      tex()\id=Val(content) 
                    Case 1                  ;Gadget Texte
                      tex()\inf=content
                    Case 2                  ;Tool Tipp infos
                      tex()\tip=content
                    Case 3                  ;Item gadget Texte Fenster Neu
                      tex()\ite=content
                    Case 4                  ;Fehler Texte
                      tex()\feh=content 
                    Case 5                  ;Job Namen
                      tex()\job=content 
                    Case 6                  ;Waffen geschwinkeiten
                      tex()\spe=content                     
                  EndSelect
              EndSelect    
       
  
              row = row +content + ";"
              spalte=spalte+1
             
             ; Debug  row
            Next j
            status = 1
            
          Next i
          ;status = 1
          EndIf
          
          Result.l=CallFunction(#libmysql,"mysql_free_result",*mysqlResult);Gibt belegten Speicher wieder frei
        EndIf
      EndIf
EndProcedure

Procedure.l ber(job)
  LastElement(job()) 
  AddElement(job())
  
    job()\id  = ListSize(char())          ;Table ID
    job()\itemid = item()\id      ;Item ID
    job()\vag = "N"      ;Vagrant
    job()\mer = "N"      ;Mercenary
    job()\kni = "N"      ;Knight
    job()\bla = "N"      ;Blade
    job()\ass = "N"      ;Assist
    job()\bil = "N"      ;Billposter
    job()\rin = "N"      ;Ringmaster
    job()\mag = "N"      ;Magician
    job()\ele = "N"      ;Elementer
    job()\psy = "N"      ;Psykeeper
    job()\acr = "N"      ;Acrobat
    job()\jes = "N"      ;Jester
    job()\ran = "N"      ;Ranger
    
    Select job
      Case 0
        job()\vag = "J"      ;Vagrant
      Case 1
        job()\mer = "J"      ;Mercenary
      Case 2
        job()\kni = "J"      ;Knight
      Case 3
        job()\bla = "J"      ;Blade
      Case 4
        job()\ass = "J"      ;Assist
      Case 5
        job()\bil = "J"      ;Billposter
      Case 6
        job()\rin = "J"      ;Ringmaster
      Case 7
        job()\mag = "J"      ;Magician
      Case 8
        job()\ele = "J"      ;Elementer
      Case 9
        job()\psy = "J"      ;Psykeeper
      Case 10
        job()\acr = "J"      ;Acrobat
      Case 11
        job()\jes = "J"      ;Jester
      Case 12
        job()\ran = "J"      ;Ranger  
    EndSelect
EndProcedure

Procedure.l texte(job)
  Select job
    Case 1 
      ClearList(rechte())
        mysql("Select * from userrechte where user_2_iduser_2='"+Str(user()\id)+"'",2) ;User Rechte Holen
      ClearList(job())
        mysql("Select * from job",3) ; Job Tabelle holen
      ClearList(item())
        mysql("Select * FROM item",4) ; Item Tabelle holen
      ClearList(ele())
        mysql("Select * FROM element",5) ; Item Tabelle holen
      ClearList(tex())
        mysql("Select idmeldung,info_de,tipp_de,item_de,fehler_de,job_de,spe_de  from meldung",100) ; Item texte holen
  EndSelect
  
EndProcedure  

Procedure.l fillen(job)
  Select job 
    Case 1
        AddGadgetItem(#cbg02, -1, "")       ;Geschlecht Neutarl 
        AddGadgetItem(#cbg02, -1, "M")      ;Geschlecht Mänlich 
        AddGadgetItem(#cbg02, -1, "W")      ;Geschlcht Weiblich
        AddGadgetItem(#cbg04, -1, "NEIN")   ;Set NEIN 
        AddGadgetItem(#cbg04, -1, "JA")     ;Set JA
        AddGadgetItem(#cbg09, -1, "")       ;Strom
        AddGadgetItem(#cbg10, -1, "")       ;Feuer
        AddGadgetItem(#cbg11, -1, "")       ;Erde
        AddGadgetItem(#cbg12, -1, "")       ;Wasser
        AddGadgetItem(#cbg13, -1, "")       ;Wind
      For co= 1 To 10
        AddGadgetItem(#cbg09, -1, Str(co))  ;Strom 1-10
        AddGadgetItem(#cbg10, -1, Str(co))  ;Feuer 1-10
        AddGadgetItem(#cbg11, -1, Str(co))  ;Erde  1-10
        AddGadgetItem(#cbg12, -1, Str(co))  ;Wasser 1-10
        AddGadgetItem(#cbg13, -1, Str(co))  ;Wind  1-10
      Next
      For co = 0 To 120
        AddGadgetItem(#cbg01, -1, Str(co))  ;Level 1-120
      Next
        FirstElement(tex())
        While tex()\job <> "NULL"                    ;Jobs Einlesen SQL     
          AddGadgetItem(#cbg05, -1,tex()\job ) : NextElement(tex())
          Debug tex()\job
        Wend
        FirstElement(tex())
      While tex()\spe <> "NULL"                      ;Waffespeed Einlesen SQL      
          AddGadgetItem(#cbg06, -1,tex()\spe ) : NextElement(tex())
        Wend
   Case 2
      SetGadgetState(#cbg01,0)              ;Grundwert Setzen LVL
      SetGadgetState(#cbg02,0)              ;Grundwert Setzen M oder W
      SetGadgetState(#cbg03,0)
      SetGadgetState(#cbg04,0)              ;Grundwert Setzen Set
      SetGadgetState(#cbg05,1)              ;Grundwert Setzen Job
      SetGadgetState(#cbg06,3)              ;Grundwert Setzen Speed
      SetGadgetText(#cbg07,"")              ;Grundwert Setzen Händler EinKauf
      SetGadgetText(#cbg08,"")              ;Grundwert Setzen Händler Verkauf
      SetGadgetState(#cbg09,0)              ;Grundwert Setzen Strom
      SetGadgetState(#cbg10,0)              ;Grundwert Setzen Feuer
      SetGadgetState(#cbg11,0)              ;Grundwert Setzen Erde
      SetGadgetState(#cbg12,0)              ;Grundwert Setzen Wasser
      SetGadgetState(#cbg13,0)              ;Grundwert Setzen Wind
      SetGadgetText(#cbg14,"")              ;Grundwert Setzen ATK
      SetGadgetText(#cbg15,"")              ;Grundwert Setzen DEF
      SetGadgetText(#cbg16,"")              ;Grundwert Setzen CRIT
      SetGadgetText(#cbg17,"")              ;Grundwert Setzen AthSpd
      SetGadgetText(#cbg18,"")              ;Grundwert Setzen STR
      SetGadgetText(#cbg19,"")              ;Grundwert Setzen STA
      SetGadgetText(#cbg20,"")              ;Grundwert Setzen DEX
      SetGadgetText(#cbg21,"")              ;Grundwert Setzen INT
    Case 3
      ForEach item()

        AddGadgetItem(#lvg00,-1, Str(item()\id)+Chr(10)+item()\nam+Chr(10)+item()\gen+Chr(10)+item()\lvl+Chr(10)+item()\set)
      Next
  EndSelect
EndProcedure

Procedure.l save(job)
  Select job 
    Case 1 ;Item in SQL Schreiben
    ;Table Item
    LastElement(item()) 
    AddElement(item())
      item()\id  = Val(GetGadgetText(#cbg00)) ;Item ID hinzufügen
      item()\nam = GetGadgetText(#cbg03)    ;Item Name hinzufügen
      item()\lvl = GetGadgetText(#cbg01)    ;Item Benötiges Level hinzufürgen
      item()\gen = GetGadgetText(#cbg02)    ;Item Benötiges Geschlecht hinzufüegen
      item()\set = Left(GetGadgetText(#cbg04),1)    ;Item ist ein Set teil
      item()\spe = GetGadgetText(#cbg06)    ;Item Speed hinzu fügen
      
    ForEach item()
     
    Debug  Str(item()\id)+" "+item()\nam+" "+item()\lvl+" "+item()\gen+" "+item()\set+" "+item()\spe
     Next
   ;Table Elemente
      If Val(GetGadgetText(#cbg09))+Val(GetGadgetText(#cbg10))+Val(GetGadgetText(#cbg11))+Val(GetGadgetText(#cbg12))+Val(GetGadgetText(#cbg13)) > 0 
        LastElement(ele()) 
        AddElement(ele())
          ele()\id  = ListSize(ele())     ;Element ID ermitteln
          ele()\itemid = item()\id          ;Item ID hinzufügen zur wiederfindung
          If Val(GetGadgetText(#cbg09)) > 0 : ele()\str = Val(GetGadgetText(#cbg09)) : EndIf  ;Ermitteln des Elementen Status
          If Val(GetGadgetText(#cbg10)) > 0 : ele()\feu = Val(GetGadgetText(#cbg10)) : EndIf  ;es kann immer nur eienr
          If Val(GetGadgetText(#cbg11)) > 0 : ele()\erd = Val(GetGadgetText(#cbg11)) : EndIf  ;zur eintragung kommen 
          If Val(GetGadgetText(#cbg12)) > 0 : ele()\was = Val(GetGadgetText(#cbg12)) : EndIf  ;
          If Val(GetGadgetText(#cbg13)) > 0 : ele()\win = Val(GetGadgetText(#cbg13)) : EndIf  ;
       Debug "ELEMENT; "+Str(ele()\id)+" "+Str(ele()\itemid)+" "+Str(ele()\str)+" "+Str(ele()\feu)+" "+Str(ele()\erd)+" "+Str(ele()\was)+" "+Str(ele()\win)
      EndIf
    ;Table Chara werte
    LastElement(char()) 
        AddElement(char())
          char()\id  = ListSize(char())     ;Element ID ermitteln
          char()\itemid = item()\id          ;Item ID hinzufügen zur wiederfindung
          char()\atk = GetGadgetText(#cbg14) 
          char()\def = GetGadgetText(#cbg15) 
          char()\cri = GetGadgetText(#cbg16) 
          char()\spd = GetGadgetText(#cbg17) 
          char()\str = GetGadgetText(#cbg18)
          char()\dex = GetGadgetText(#cbg19)
          char()\int = GetGadgetText(#cbg20)
          char()\spe = GetGadgetText(#cbg21)
        Debug "CHAR: "+Str(char()\id)+" "+Str(char()\itemid)+" "+char()\atk+" "+char()\def+" "+char()\cri+" "+char()\spd+" "+char()\str+" "+char()\sta+" "+char()\dex+" "+char()\int+" "+char()\spe
       ;Table Chara werte
       LastElement(job()) 
        AddElement(job())
       
        ber(GetGadgetState(#cbg05))
        ;SelectElement(tex(),GetGadgetState(#cbg05))
         Debug "JOB: "+Str(job()\id)+" "+Str(job()\itemid)+" "+job()\vag+" "+job()\mer+" "+job()\kni+" "+job()\bla+" "+job()\ass+" "+job()\bil+" "+job()\rin+" "+job()\mag+" "+job()\ele+" "+job()\psy+" "+job()\acr+" "+job()\jes+" "+job()\ran
      ;Table Chara werte  
        LastElement(preis()) 
        AddElement(preis())
          preis()\id  = ListSize(char())     ;Element ID ermitteln
          preis()\itemid = item()\id          ;Item ID hinzufügen zur wiederfindung
          preis()\hek = Val(GetGadgetText(#cbg07)) 
          preis()\hvk = Val(GetGadgetText(#cbg08))
          preis()\evk = Val(GetGadgetText(#cbg08))*4
       Debug "Preis"+Str(preis()\id)+"; "+Str(preis()\itemid)+"; "+Str(preis()\hek)+"; "+Str(preis()\hvk)+"; "+Str(preis()\evk)    
      EndSelect
      mysql("INSERT INTO `item` (`name`,`level`,`gen`,`set_2`,`speed`,`time`) VALUES ('"+item()\nam+"',"+item()\lvl+",'"+item()\gen+"','"+item()\set+"','"+item()\spe+"',NULL)",999)
      mysql("INSERT INTO `element` (`item_iditem`,`elektrisch`,`feuer`,`erde`,`wasser`,`wind`) VALUES ('"+Str(ele()\itemid)+"',"+Str(ele()\str)+",'"+Str(ele()\feu)+"','"+Str(ele()\erd)+"','"+Str(ele()\was)+"','"+Str(ele()\win)+"')",999)
      mysql("INSERT INTO `job` (`item_iditem`,`Vagrant`,`Mercenary`,`Knight`,`Blade`,`Assist`,`Billposter`,`Ringmaster`,`Magician`,`Elementer`,`Psykeeper`,`Acrobat`,`Jester`,`Ranger`) VALUES ('"+Str(job()\itemid)+"','"+job()\vag+"','"+job()\mer+"','"+job()\kni+"','"+job()\bla+"','"+job()\ass+"','"+job()\bil+"','"+job()\rin+"','"+job()\mag+"','"+job()\ele+"','"+job()\psy+"','"+job()\acr+"','"+job()\jes+"','"+job()\ran+"')",999)


EndProcedure

Procedure.l logon()
  ;******************************************************************************
;-Login Fenster
        If OpenWindow(#lof, 0, 0, sp20, sp15, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered); And CreateGadgetList(WindowID(#lof))
          mel(7,#lof,3) ;Info 4 
          StringGadget(#stg00, sp08,  sp01, sp10, sp02, "")
          StringGadget(#stg01, sp08,  sp03, sp10, sp02, "", #PB_String_Password )
          ButtonGadget(#bug00,(WindowWidth(#lof)/2)+((WindowWidth(#lof)/2)/2)-(sp05/2), sp06, sp05, sp02, "")
            mel(1,#bug00,2) 
          ButtonGadget(#bug01,((WindowWidth(#lof)/2)/2)-(sp05/2), sp06, sp05, sp02, "")
            mel(1,#bug01,11) 
          TextGadget(#txg00,sp01,sp01,sp05,sp02,tex()\inf)
            mel(1,#txg00,0)
          TextGadget(#txg01,sp01,sp03,sp05,sp02,tex()\inf)
            mel(1,#txg01,1)
          TextGadget(#txg02,(WindowWidth(#lof)/2)-(sp20/2),sp09,sp20,sp04,"",#PB_Text_Center )
        SetActiveGadget(#stg00)  
          Repeat
          Event = WaitWindowEvent()
          pass$= GetGadgetText(#stg01)
          Select Event
       
            Case #PB_Event_Gadget
              Select EventGadget()
                Case #bug00
                  Select EventType()
                    Case #PB_EventType_LeftClick
                      If pass$ <> ""
                          ClearList(user())
                          mysql("Select * from user_2 where name='"+GetGadgetText(#stg00)+"' And pass='"+MD5Fingerprint(@pass$, StringByteLength(pass$))+" '",1) ;User Prüfen 
                          If ListSize(user()) > 0
                            mysql("Select * from userrechte where user_2_iduser_2='"+Str(user()\id)+" '",2)
                            CloseWindow(#lof)
                            ProcedureReturn
                          EndIf
                        Else
                          mel(3,#txg02,2); Fehler 3
                      EndIf
                  EndSelect
                Case #bug01 ;User Neu Anlegen
                  Select EventType()
                    Case #PB_EventType_LeftClick
                      If pass$ <> "" And GetGadgetText(#stg00) <> ""
                        ClearList(user()) 
                        mysql("Select name, pass from user_2 where name='"+GetGadgetText(#stg00)+"'",1) ;User Prüfen
                        If ListSize(user()) > 0
                            mel(3,#txg02,3); Fehler 4
                          Else
                            mysql("INSERT INTO `user_2` (`iduser_2`,`name`,`pass`,`time`)VALUES (NULL,'"+GetGadgetText(#stg00)+"', '"+MD5Fingerprint(@pass$, StringByteLength(pass$))+"',NULL)",999) ;User Prüfen
                            mysql("Select * from user_2 where name='"+GetGadgetText(#stg00)+"' And pass='"+MD5Fingerprint(@pass$, StringByteLength(pass$))+" '",1) ;User Prüfen
                            mysql("INSERT INTO `userrechte` (`user_2_iduser_2`,`lesen`,`schreiben`,`delete_2`,`preise`,`item`,`element`) VALUES ("+Str(user()\id)+",'J','N','N','0','0','0')",999)
                            mel(3,#txg02,4); Fehler 5
                        EndIf               
                      EndIf
                  EndSelect
              EndSelect
          EndSelect
          Until Event= #PB_Event_CloseWindow
          End
        EndIf
EndProcedure

Procedure.l einst()
Debug "Setze Rechte"
If rechte()\pre >= 0 :SetGadgetState(#chb00,1):EndIf
If rechte()\pre >= 1 :SetGadgetState(#chb01,1):EndIf
If rechte()\pre >= 2 :SetGadgetState(#chb02,1):EndIf
If rechte()\pre >= 3 :SetGadgetState(#chb00,1):EndIf
If rechte()\ite >= 0 :SetGadgetState(#chb03,1):EndIf
If rechte()\ite >= 1 :SetGadgetState(#chb04,1):EndIf
If rechte()\ite >= 2 :SetGadgetState(#chb05,1):EndIf
If rechte()\ite >= 3 :SetGadgetState(#chb00,1):EndIf
If rechte()\ele >= 0 :SetGadgetState(#chb06,1):EndIf
If rechte()\ele >= 1 :SetGadgetState(#chb07,1):EndIf
If rechte()\ele >= 2 :SetGadgetState(#chb08,1):EndIf
If rechte()\ele >= 3 :SetGadgetState(#chb00,1):EndIf
EndProcedure


If OpenLibrary(#libmysql,pfad$+"libmysql.dll"); Check ob DLL vorhanden
  Result=CallFunction(#libmysql,"mysql_init",dbHnd); Ja öffenen libmysql.dll
  If Result ;Datenbank ist geöffnet
    dbHnd = Result
    If CallFunction(#libmysql,"mysql_real_connect",dbHnd, host, user, passwd, db, port, "", 0) = 0 ;verbinden zur Datenbank
      GetError(dbHnd,1)
    Else
    weiter:
      ;CallDebugger
      ;- Debugger Einspung zum Testen
      ClearList(user()) 
                      AddElement(user())
                      user()\nick="Aspirant"
  texte(1) ;SQL Infos laden    
  logon()
 
;******************************************************************************
;-Allgemeines Fenster
        If OpenWindow(#haf, 0, 0, sp60, sp30, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered); And CreateGadgetList(WindowID(#lof))
          mel(8,#haf,4) ;Info 5 
          PanelGadget(#pag00,sp00,WindowHeight(#haf)/4,WindowWidth(#haf),(WindowHeight(#haf)/4)*3)  
            AddGadgetItem (#pag00, -1, "Preisermitteln")
             ButtonGadget(#bug02,sp01,sp01,sp05,sp02,"")  ;Button "NEU"  #bug02
                mel(1,#bug02,11) 
              ListIconGadget(#lvg00,sp00,(WindowHeight(#haf)/4)*3-(WindowHeight(#haf)/4)*3+50,WindowWidth(#haf),(WindowHeight(#haf)/4)*3-70,"ID",30,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines )
                AddGadgetColumn(#lvg00,1,"Item",100)
                AddGadgetColumn(#lvg00,2,"Job",50)
                AddGadgetColumn(#lvg00,3,"Sex",50)
                AddGadgetColumn(#lvg00,4,"LVL",50)
                AddGadgetColumn(#lvg00,5,"SET",50)
                AddGadgetColumn(#lvg00,6,"ATK",50)
                AddGadgetColumn(#lvg00,7,"DEF",50)
                AddGadgetColumn(#lvg00,8,"Crit",50)
                AddGadgetColumn(#lvg00,9,"Atk. SPD",50)
                AddGadgetColumn(#lvg00,10,"STR",50)
                AddGadgetColumn(#lvg00,11,"STA",50)
                AddGadgetColumn(#lvg00,12,"DEX",50)
                AddGadgetColumn(#lvg00,13,"INT",50)
                AddGadgetColumn(#lvg00,14,"Strom",50)
                AddGadgetColumn(#lvg00,15,"Feuer",50)
                AddGadgetColumn(#lvg00,16,"Erde",50)
                AddGadgetColumn(#lvg00,17,"Wasser",50)
                AddGadgetColumn(#lvg00,18,"Wind",50)
                AddGadgetColumn(#lvg00,19,"H. VK",50)
                AddGadgetColumn(#lvg00,20,"H. EK",50)
                AddGadgetColumn(#lvg00,21,"P VK",50)
                AddGadgetColumn(#lvg00,22,"M VK",50)
                AddGadgetColumn(#lvg00,23,"D VL",50)
                fillen(3)
              
               
            AddGadgetItem (#pag00, -1, "Preisthistory")
            AddGadgetItem (#pag00, -1, "Einstellungen")
              CheckBoxGadget(#chb00,sp10,sp03,sp02,sp02,""):DisableGadget(#chb00,1)  ;Checkbox Preis Anzeigen
              CheckBoxGadget(#chb01,sp10,sp06,sp02,sp02,""):DisableGadget(#chb01,1)  ;Checkbox Item Anzeigen
              CheckBoxGadget(#chb02,sp10,sp09,sp02,sp02,""):DisableGadget(#chb02,1)  ;Checkbox Element Anzeigen
              CheckBoxGadget(#chb03,sp15,sp03,sp02,sp02,""):DisableGadget(#chb03,1)  ;Checkbox Preis Ändern / Neu
              CheckBoxGadget(#chb04,sp15,sp06,sp02,sp02,""):DisableGadget(#chb04,1)  ;Checkbox Item Ändern / Neu
              CheckBoxGadget(#chb05,sp15,sp09,sp02,sp02,""):DisableGadget(#chb05,1)  ;Checkbox Element Ändern / Neu
              CheckBoxGadget(#chb06,sp20,sp03,sp02,sp02,""):DisableGadget(#chb06,1)  ;Checkbox Preis Löschen
              CheckBoxGadget(#chb07,sp20,sp06,sp02,sp02,""):DisableGadget(#chb07,1)  ;Checkbox Item Löschen
              CheckBoxGadget(#chb08,sp20,sp09,sp02,sp02,""):DisableGadget(#chb08,1)  ;Checkbox Element Löschen
              TextGadget(#txg03,sp10,2,sp05,sp02,"")      ;Spalten Kopf Ansehen
                mel(1,#txg03,8) ;Preise
              TextGadget(#txg04,sp15,2,sp05,sp02,"")      ;Spalten Kopf Ändern / Neu
                mel(1,#txg04,9) ;Item
              TextGadget(#txg05,sp20,2,sp05,sp02,"")      ;Spalten Kopf Löschen
                mel(1,#txg05,10) ;Element
              TextGadget(#txg06,sp01,sp03,sp08,sp02,"",#PB_Text_Right) ;Zeilen Kopf Preis
                mel(1,#txg06,5) ;Anzeigen
              TextGadget(#txg07,sp01,sp06,sp08,sp02,"",#PB_Text_Right) ;Zeilen Kopf Item
                mel(1,#txg07,14) ;Anlegen
              TextGadget(#txg08,sp01,sp09,sp08,sp02,"",#PB_Text_Right) ;Zeilen Kopf Element
                mel(1,#txg08,6) ;Ändern
              
              einst()
            AddGadgetItem (#pag00, -1, "Admin")
          Repeat                            ;Start der Schleife im Hauptfenster
            Event = WaitWindowEvent()       ;CPU endlasten warten auf ereignis im Fenster
            Select Event                    ;Schleife zu ermitteln des Ereignis
              Case #PB_Event_Gadget         ;Filter ob Gadget Ereignis aus gelöst hat
                Select EventGadget()        ;Filter um das ereignis Gadget zu finden
                  Case #bug02              ;Gadget "Button Neu" würde gedückt
                    Select EventType()      
                      Case #PB_EventType_LeftClick
                        DisableWindow(#haf,1) ;Hauptfenster Abschalten
                        HideWindow(#haf, 1)   ;Hauptfenster Unsichtbar machen
                        Debug "Neu Button 2 ?"
                              Debug #bug02
                           Debug IsGadget(#bug02)
                        OpenWindow(#eingabe, 10, 10, 800, 100, "test",#PB_Window_SystemMenu | #PB_Window_ScreenCentered, WindowID(#haf))
                          HideWindow(#eingabe, 1) : StickyWindow(#eingabe,1)  ;Fenster für neues Item 1.Unsichtbar 2.Dauerhaft in den Fordergurd Holen
                          xx1=sp01 : xx2=sp01 : xx3=sp01                        ;Variabeln zur Button erzeugung setzen
                          ButtonGadget(#bug10,WindowWidth(#eingabe)-50, 55, sp05, sp02, Text003$)  ;Button Save setzen
                          
                          For s=#cbg00 To #cbg00+21     ;Schleife zur Button erzeugung
                            sz= s - #cbg00               ;Schleifenzähler
                            SelectElement(tex(), sz)   ;Text aus wählen

                            Select sz                    ;Schleifen wert zur erzeugung den gadget
                              Case 0 
                                TextGadget(#txg03+sz,xx1,10,44,sp02,tex()\ite )
                                TextGadget(s, xx1, 30, 34,sp02,Str(ID), #PB_Text_Border)
                                xx1=xx1+50
                              Case 1 To 2
                                TextGadget(#txg03+sz,xx1,10,44,sp02,tex()\ite )
                                ComboBoxGadget(s, xx1, 30, 44,sp02)
                                xx1=xx1+50
                              Case 3 
                                TextGadget(#txg03+sz,xx1,10,sp05,sp02,tex()\ite )
                                ComboBoxGadget(s, xx1, 30, sp10,sp02, #PB_ComboBox_Editable)
                                xx1=xx1+100
                              Case 4 To 6
                                TextGadget(#txg03+sz,xx1,10,sp05,sp02,tex()\ite )
                                ComboBoxGadget(s, xx1, 30, sp10,sp02)
                                xx1=xx1+100
                              Case 7 To 8
                                TextGadget(#txg03+sz,xx1,10,sp05,sp02,tex()\ite )
                                StringGadget(s, xx1, 30, sp10,sp02,"", #PB_String_Numeric)
                                xx1=xx1+100
                              Case 9 To 13
                                TextGadget(#txg03+sz,xx2,55,45,sp02,tex()\ite )
                                ComboBoxGadget(s, xx2, 75, 45,sp02)
                                xx2=xx2+50
                              Case 14 To 25
                                TextGadget(#txg03+sz,xx2,55,45,sp02,tex()\ite )
                                StringGadget(s, xx2, 75, 45,sp02,"")
                                xx2=xx2+50
                            EndSelect
                          Next
                        fillen(1)
                        
                        HideWindow(#eingabe, 0)  
                        LastElement(item())
                                    SetGadgetText(#cbg00,Str(item()\id+1))
                        Repeat              ;Schleife Fenster Neu
                          Event = WaitWindowEvent()
                          Select Event      ;fenster ereignis auswerten
                            Case #PB_Event_Gadget
                              Select EventGadget()
                                Case #cbg09 To #cbg13 ;Änderrung bei elementen
                                  If EventType() =1   ;Rückseten des Elemts bei geänderter auswahl
                                    If EventGadget() <> #cbg09 : SetGadgetState(#cbg09,0) :EndIf
                                    If EventGadget() <> #cbg10 : SetGadgetState(#cbg10,0) :EndIf
                                    If EventGadget() <> #cbg11 : SetGadgetState(#cbg11,0) :EndIf
                                    If EventGadget() <> #cbg12 : SetGadgetState(#cbg12,0) :EndIf
                                    If EventGadget() <> #cbg13 : SetGadgetState(#cbg13,0) :EndIf
                                  EndIf
                                Case #bug10           ;Save Button ausgelöst
                                  Event = 0            ;Ereigenis zurücksetzen
                                  If GetGadgetText(#cbg03) <> ""  ;Fetsellen ob Item name leer ist Ja= Nicht Speichern
                                    save(1)                       ;Eingabe in zerlegen und in SQL Speichern
                                    fillen(2)                     ;Felder auf Grundwerten zurück setzen
                                    LastElement(item())
                                    SetGadgetText(#cbg00,Str(item()\id+1)) ;Item ID um 1 erhöhen
                                  EndIf
                              EndSelect
                            Case  #PB_Event_CloseWindow ;Fenster neues Item wurde geschlossen
                               Debug "Neu Button 3 ?"
                              Debug #bug02
                              Debug IsGadget(#bug02)
                              CloseWindow(#eingabe)        ;Fenster neues Item sicher schließen
                              Event = 0                  ;Ereignis zurüsetzen
                               Debug "Neu Button 3a ?"
                              Debug #bug02
                              Debug IsGadget(#bug02)
                              DisableWindow(#haf,0) : HideWindow(#haf, 0) ;Hauptfenster 1.Freigeben 2.Sichtbar machen
                          EndSelect
                        Until IsWindow(#eingabe)= 0    ;Hauptfenster auf Gültigkeit Prüfen (Programm ende
                           
                    EndSelect
                EndSelect
            EndSelect
          Until Event= #PB_Event_CloseWindow
          
        EndIf
    EndIf
  EndIf
Else
  MessageRequester("Error!", fehler1000$) ;SQL Fehler ausgabe
EndIf
ich hatte vor gewarnt also nur Konstructive Maulen PLS
MFG Aspi
Zuletzt geändert von Aspirant am 01.02.2009 18:13, insgesamt 1-mal geändert.
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

1. Enums in den Hauptcode.
das ist eine Compilezeit-Sache, hat zur Laufzeit nix mehr zu schigge, deine Procedure ist LEER.

2. Windows-Enum auch bei NULL anfangen, nicht handle-tabelle für tausend fenster verbraten.

...tbc
Antworten