SoftCreator - Problem mit IniWrite und Variable

  • Hi Leute!
    Ich hab mal ein Projekt angefangen, womit nicht-programmiererfahrene Leute ihr eigenes Programm erstellen sollen.

    To-Do List:
    -Schöne, übersichtliche GUI
    -GUICreator
    -Listenführung der Befehle
    -Export in .exe und .au3 Formate

    Nun habe ich ein Problem. Und zwar muss er folgendes in eine INI schreiben:
    -Anzahl des Controls (z.B. var1,var2,var3 usw...)
    -Name der Variable des Controls (z.B. meinevariable,meinbutton usw.)
    Das müsste dann so aussehen:
    [var]
    var1 = meinbutton
    var2 = meinradio
    var3 = meinlabel

    So eine Aufzählung müsste ich programmieren. Die Hälfte hab ich schon:

    [autoit]


    IniWrite($pathvar, "var", "var"&HIER DIE AUFZÄHLUNG, $convarname)

    [/autoit]

    Wisst ihr wie man diese Aufzählung macht?
    Wenn ja, antwortet mir bitte!

    Danke
    MfG button421

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

  • Ja. Aber so ein Programm wie MacroX ist auch sowas, oder?
    Ist ja auch egal. Weißt du die Antwort?

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

  • An eine For-Schleife hab ich auch schon gedacht. Aber bei dir kann man nur bis 5 Variablen eingeben. Das soll aber unendlich oft gehen. Wie schreibt man den Unendlich? Soll kein Chr sein sondern nur die Zahl die nach To kommen soll.

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

  • Naja du nimmst für das unendlich auch eine Variable... Statt dem "5" kommt "$zahlvariable". Die Variable beinhaltet die Anzahl der Variablen.

  • na klar musst du.
    Du willst ja auch nicht wirklich "unendlich" IniKey's haben. Sonst wird ja deine Festplatte voll bevor du alle Zahlen gespeichert hast :P

    Also von was hängt es ab wieviele Key's du schreiben willst?

  • Verstehe ich richtig, dass dein "SoftCreator" die vom Benutzer gebaute GUI in eine .ini Datei speichern soll ?
    Mir scheint dieser Ansatz schlicht falsch.
    Nimm .au3, so dass dein Programm auch fertig gebaute GUIs (die ohne SoftCreator erstellt wurden) nachträglich ändern kann.
    Wozu ein eigenes .ini Dateiformat, wenn .au3 alle Details der GUI wunderbar speichert ?

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Ok. Dann kommt es in eine .au3! Dann ist dieser Thread ja wohl abgeschlossen. Wie findet ihr denn das Projekt? Mann soll am Ende ja sich die Aktionen zusammenklicken und dann auch als .exe speichern können.

    Meine fertigen Projekte:
    VirtualCash
    Monopoly Digital

    Daran arbeite ich gerade:
    Einem Skript, womit man ohne Programmierkentisse eigene Programme machen kann (habe ich selber früher gesucht :D ) Stand: ||||||||||||||||||||||||| 6%

  • Du meinst die Idee, ein Programm komplett zusammenzuklicken, ohne eine Zeile normales Programm zu schreiben ?
    Das wird hübsch kompliziert... sehr anspruchsvolle Programmieraufgabe.
    Kennst du ein Beispiel für rein grafische Programmierung, das wirklich brauchbar ist ?

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Hallo Button421,

    du kannst in der For...Next-Schleife vom 1. ControlID bis letzter ControlID gehen, siehe selbst:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #AutoIt3Wrapper_Add_Constants=n
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    dim $var[3]
    $Form1 = GUICreate("2 Combos", 200, 150)
    $var[0] = GUICtrlCreateCombo("", 5, 5, 190)
    GUICtrlSetData($var[0], "Täglich")
    GUICtrlSetData($var[0], "Wöchentlich")
    GUICtrlSetData($var[0], "Monatlich")
    GUICtrlSetData($var[0], "Jährlich")
    $var[1] = GUICtrlCreateCombo("", 5, 45, 190)
    $var[2] = GUICtrlCreateButton("&Start", 5, 175, 190)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $Gui_Event_Close
    for $i = $var[0] to $var[2]
    $sText = ControlGetText($Form1,"",$var[$i-$var[0]])
    IniWrite(@ScriptDir & "\DynVars.INI","Var", _GetClassNameNNbyID($Form1,$i) &"[" & $i & "]", $sText)
    ;IniWrite(@ScriptDir & "\DynVars.INI","Var", _GetClassNameNNbyID($Form1,$i) , $sText) oder so
    Next
    Exit
    Case $var[0]
    $sCbo1 = GUICtrlRead($var[0])
    GUICtrlSetData($var[1], "", "")
    Switch $sCbo1
    Case "Täglich"
    $sCbo2 = ""
    For $i = 9 To 17
    $sCbo2 &= $i & " Uhr"
    If $i < 17 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($var[1], $sCbo2, "9 Uhr")
    Case "Wöchentlich"
    $sCbo2 = ""
    For $i = 1 To 7
    $sCbo2 &= _Locale_DayName($i)
    If $i < 7 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($var[1], $sCbo2, _Locale_DayName(1))
    Case "Monatlich"
    $sCbo2 = ""
    For $i = 1 To 5
    $sCbo2 &= $i & ". Woche"
    If $i < 5 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($var[1], $sCbo2, "1. Woche")
    Case "Jährlich"
    $sCbo2 = ""
    For $i = 1 To 12
    $sCbo2 &= _Locale_MonthName($i)
    If $i < 12 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($var[1], $sCbo2, _Locale_MonthName(@MON))
    EndSwitch
    ;case $var[2]

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetClassNameNNByID($hWnd, $ID)
    ;http://www.autoit.de/index.php?page…9314#post209314 funkey
    Local $hCtrl = ControlGetHandle($hWnd, "", $ID)
    Local $sCtrl = _WinAPI_GetClassName($hCtrl)
    If @error Then Return SetError(1)
    For $i = 1 To 1000
    If ControlGetHandle($hWnd, "", $sCtrl & $i) = $hCtrl Then
    Return $sCtrl & $i
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Locale_MonthName($Month, $Abbrev = False)
    ; ==========================================================================================
    ; Autor: Großvater (http://www.autoit.de)
    ; Parameter:
    ; $Month - Nummer des Monats (1 - 12)
    ; $Abbrev - abgekürzten Namen liefern:
    ; |0 : nein
    ; |1 : ja
    ; ==========================================================================================
    Local Const $LOCALE_USER_DEFAULT = 0x0400
    Local Const $LOCALE_SMONTHNAME = 0x37
    Local Const $LOCALE_LOCALE_SABBREVMONTHNAME = 0x43
    Local $LCType = $LOCALE_SMONTHNAME
    If $Abbrev Then $LCType = $LOCALE_LOCALE_SABBREVMONTHNAME
    If Not StringIsInt($Month) Or $Month < 1 Or $Month > 12 Then Return False
    Local $aResult = DllCall("Kernel32.dll", "Int", "GetLocaleInfoA", _
    "UInt", $LOCALE_USER_DEFAULT, _
    "UInt", $LCType + $Month, _
    "Str", "", _
    "Int", 255)
    If @error Or $aResult[0] = 0 Then Return False
    Return $aResult[3]
    EndFunc ;==>_Locale_MonthName

    [/autoit] [autoit][/autoit] [autoit]

    Func _Locale_DayName($WDay, $Abbrev = False)
    ; ==========================================================================================
    ; Autor: Großvater (http://www.autoit.de)
    ; Parameter:
    ; $WDay - Nummer des Wochentages (1 - 7) (!!! 1 ist Montag (s.u.) !!!)
    ; $Abbrev - abgekürzten Namen liefern:
    ; |0 : nein
    ; |1 : ja
    ; Anmerkungen:
    ; Zu meinem Erstaunen hat MS in WinNLS.h folgende Konstanten definiert:
    ; #define LOCALE_SDAYNAME1 0x0000002A // long name for Monday
    ; ...
    ; #define LOCALE_SDAYNAME7 0x00000030 // long name for Sunday
    ; Anders als beim Macro @WDAY gilt deshalb der Montag als Tag 1 und der Sonntag
    ; als Tag 7. Der passende Wert lässt sich per Aufruf der UDF-Funktion
    ; _DateToDayOfWeekISO()
    ; ermitteln.
    ; ==========================================================================================
    Local Const $LOCALE_USER_DEFAULT = 0x0400
    Local Const $LOCALE_SDAYNAME = 0x29
    Local Const $LOCALE_SABBREVDAYNAME = 0x30
    Local $LCType = $LOCALE_SDAYNAME
    If $Abbrev Then $LCType = $LOCALE_SABBREVDAYNAME
    If Not StringIsInt($WDay) Or $WDay < 1 Or $WDay > 7 Then Return False
    Local $aResult = DllCall("Kernel32.dll", "Int", "GetLocaleInfoA", _
    "UInt", $LOCALE_USER_DEFAULT, _
    "UInt", $LCType + $WDay, _
    "Str", "", _
    "Int", 255)
    If @error Or $aResult[0] = 0 Then Return False
    Return $aResult[3]
    EndFunc ;==>_Locale_DayName

    [/autoit]

    dieses Beispiel speichert den Text (sofern vorhanden) in eine INI

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (15. Februar 2011 um 06:54)