Seite 1 von 1

Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 10.12.2009 23:41
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$)
...

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 11.12.2009 08:18
von Rokur
Wie wärs mit nem Array und Schleifen? :shock:

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 11.12.2009 08:30
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...

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 11.12.2009 10:41
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

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 22.12.2009 11:45
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.

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 22.12.2009 16:43
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

Re: Code verkleinern / Buttons anlegen mittels INI Datei

Verfasst: 22.12.2009 16:55
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.