Code verkleinern / Buttons anlegen mittels INI Datei

Für allgemeine Fragen zur Programmierung mit PureBasic.
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Mr.Vain »

Hallo,

ich hab da mal eine Frage. Mittels INI-Datei möchte ich für eine GUI Buttons ändern/hinzufügen/löschen können.

Der untere Code soll nur als Beispiel dienen - die Frage ist, wie ich das alles etwas "vereinfachen" kann.


In der INI sage ich dann einfach folgendes:

[Button6]
BEZEICHNUNG = Explorer
BEFEHL = explorer.exe


Dabei sollen automatisch neue Buttons angelegt werden (4 pro Reihe)

Code: Alles auswählen

 PreferenceGroup("GENERAL")     
        PSEXEC$           = ReadPreferenceString("PSEXEC_FILE", GetCurrentDirectory()+"psexec.exe" )    
        PreferenceGroup("BUTTON1")
        BEZ_BUTTON1$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON1")
        COM_BUTTON1$     = ReadPreferenceString("BEFEHL", "cmd.exe")  
        PreferenceGroup("BUTTON2")
        BEZ_BUTTON2$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON2")
        COM_BUTTON2$     = ReadPreferenceString("BEFEHL", "cmd.exe")
        PreferenceGroup("BUTTON3")
        BEZ_BUTTON3$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON3")
        COM_BUTTON3$     = ReadPreferenceString("BEFEHL", "cmd.exe")
        PreferenceGroup("BUTTON4")
        BEZ_BUTTON4$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON4")
        COM_BUTTON4$     = ReadPreferenceString("BEFEHL", "cmd.exe")
        PreferenceGroup("BUTTON5")
        BEZ_BUTTON5$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON5")
        COM_BUTTON5$     = ReadPreferenceString("BEFEHL", "cmd.exe")
        PreferenceGroup("BUTTON6")
        BEZ_BUTTON6$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON6")
        COM_BUTTON6$     = ReadPreferenceString("BEFEHL", "cmd.exe")  
        PreferenceGroup("BUTTON7")
        BEZ_BUTTON7$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON7")
        COM_BUTTON7$     = ReadPreferenceString("BEFEHL", "cmd.exe") 
        PreferenceGroup("BUTTON8")
        BEZ_BUTTON8$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON8")
        COM_BUTTON8$     = ReadPreferenceString("BEFEHL", "cmd.exe") 
        PreferenceGroup("BUTTON9")
        BEZ_BUTTON9$     = ReadPreferenceString("BEZEICHNUNG", "BUTTON9")
        COM_BUTTON9$     = ReadPreferenceString("BEFEHL", "cmd.exe") 
     ClosePreferences()

Code: Alles auswählen

...
Case 5
          Argument$ = COM_BUTTON1$
          Check()
          PsExec(PC$,Argument$)
                  
        Case 6
          Argument$ = COM_BUTTON2$
          Check()
          PsExec(PC$,Argument$)
        Case 7
          Argument$ = COM_BUTTON3$
          Check()
          PsExec(PC$,Argument$)        
        Case 8
                  Argument$ = COM_BUTTON4$
          Check()
          PsExec(PC$,Argument$)
        Case 9
                  Argument$ = COM_BUTTON5$
          Check()
          PsExec(PC$,Argument$)
        Case 10
                  Argument$ = COM_BUTTON6$
          Check()
          PsExec(PC$,Argument$)
        Case 11
                  Argument$ = COM_BUTTON7$
          Check()
          PsExec(PC$,Argument$)
        Case 12
          Argument$ = COM_BUTTON8$
          Check()
          PsExec(PC$,Argument$)
        Case 14
          Argument$ = COM_BUTTON9$
          Check()
          PsExecI(PC$,Argument$)
...
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Rokur »

Wie wärs mit nem Array und Schleifen? :shock:
WinXP 32 Bit, PureBasic 4.40 (x86)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Kaeru Gaman »

die frage ist auch, wofür...

um zwei dutzend fremdprogramme zu starten, zwei dutzend buttons anlegen?

für was anderes siehts mau aus mit so einer implementierung, und reihenbuttons sehen sowieso arm aus...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Rokur »

Über den Sinn kann man nur Vermutungen anstellen, ich tippe mal auf eine Art Schnellstartleiste.

Hier mal ein Beispiel:

Für die Übernahme in dein Programm müsstest du evtl. die Gadget-IDs und die Event-Abfrage der Buttons ändern, wenn du noch andere Gadgets verwendest.

Code: Alles auswählen

EnableExplicit

Define i
Dim programme.s(0)

OpenWindow(0, 0, 0, 120, 500, "Test", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)

;Buttons laden
OpenPreferences("Programme.ini")
i = 1
While PreferenceGroup("BUTTON"+Str(i))
  ReDim programme(i)
  ButtonGadget(i, 0, (i-1)*30, 120, 30, ReadPreferenceString("BEZEICHNUNG", "Taschenrechner"))
  programme(i-1) = ReadPreferenceString("BEFEHL", "calc.exe")
  i+1
Wend

Repeat
  Define event = WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      RunProgram(programme(EventGadget()-1))
  EndSelect
ForEver
WinXP 32 Bit, PureBasic 4.40 (x86)
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Mr.Vain »

Danke für eure Tipps.

Ich möchte eine GUI für das Programm "psexec" schreiben - daher die Buttons und Aufrufe externer Programme.
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Mr.Vain »

Ein Problem habe ich da noch:

Code: Alles auswählen

  EventID = WaitWindowEvent()

  CreateIni()
 
  TextGadget(102,60,20,80,25, "PC-Name:")
  
  StringGadget(101,  120, 20, 100, 20, "")
  SetGadgetFont(#PB_Default, FontID(0))
  TextGadget(103,30,80,80,25, "Anwendung:")  
  SetGadgetFont(#PB_Default, #PB_Default) 
  SetGadgetFont(#PB_Default, FontID(0))
  TextGadget(113,30,180,80,25, "Installation:")   
  SetGadgetFont(#PB_Default, #PB_Default)         


Repeat
  Define event = WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow
      End
      
    
    Case 101
      Debug("Hallo")
    
    Default
      
      PC$ = GetGadgetText(101)
      Argument$ = program(EventGadget()-1)
      If EventGadget()<49
        PsExec(PC$,Argument$)
      EndIf
      If EventGadget()>48
        PsExecI(PC$,Argument$)
      EndIf
      
     
      
  EndSelect
ForEver

Die Buttons sind u.a. von 0-...48 und von 49-...99

Code: Alles auswählen

 OpenPreferences(INI_Datei$)
 
 i=1
 z=1
 
While PreferenceGroup("Program"+Str(i))

  ReDim program(i)
  ButtonGadget(i, ((i-1)*83)+30-((z-1)*332), ((z-1)*30)+105, 70, 20, ReadPreferenceString("BEZEICHNUNG", "Cmd"))
  program(i-1) = ReadPreferenceString("BEFEHL", "cmd.exe")
  i+1
  
  If i=5
  z+1
  EndIf
Wend

 i=50
 z=1
 k=1
 
While PreferenceGroup("Install"+Str(k))

  ReDim program(i)
  ButtonGadget(i, ((k-1)*83)+30-((z-1)*332), ((z-1)*30)+225, 70, 20, ReadPreferenceString("BEZEICHNUNG", "Cmd"))
  program(i-1) = ReadPreferenceString("BEFEHL", "cmd.exe")
  i+1
  k+1
  
  If i=55
  z+1
  EndIf
Wend
Wie wähle ich bei Select -> Case die Bedingung??

Wenn ich

Code: Alles auswählen

Case 0 To 99
      
      PC$ = GetGadgetText(101)
      Argument$ = program(EventGadget()-1)
      If EventGadget()<49
        PsExec(PC$,Argument$)
      EndIf
      If EventGadget()>48
        PsExecI(PC$,Argument$)
      EndIf
mache, kommt ständig die Meldung:

Code: Alles auswählen

      Argument$ = program(EventGadget()-1)
=> Array Index out of bounds
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Beitrag von Rokur »

Du solltest prüfen ob überhaupt ein Gadget-Event stattgefunden hat und ob dein Array groß genug ist.

Tipp: Mit dem Debugger lassen sich solche Fehler schneller finden.
WinXP 32 Bit, PureBasic 4.40 (x86)
Antworten