Jump to content

Update array from file..to dynamic menu [solved]


Recommended Posts

Thanks, that will definately come in handy!

Could you help me with creating another array from 'IniReadSection'?

In my config i have a 'load' option where i need to get the values from the named section(in this case the preset title) and then set each controls value with the relevant data..[Loaded from the menu created in the previous array you helped me with]

(i'm most likely going to add quite a bit more later on as I start finalizing the config..)

[Menu>Preset 1]

Section example:

[Preset 1]
Adapter=Local Area Connection
IPAddress=1.1.1.1
SubnetMask=2.2.2.2
DefaultGateway=3.3.3.3
PreferredDNS=4.4.4.4
AlternateDNS=5.5.5.5

Would i be able to reference to the 'key=value' in each case? or is it simpler to keep it attached to the 'array index'?

Edited by katoNkatoNK
Link to comment
Share on other sites

I've managed to do the array but ran into another problem

What check can i add to this code, to avoid the error of the element being a 'non-array' element or having no subscripts if the entry doesn't exist?

I get the error on $sRead[2]~ to [6]~ if they aren't in the file.

Func Load_pX()
    Local $sRead
    
    GUICtrlSetData($pTitle, $pReadx)
    
    $sRead = IniReadSection($sFile, $pReadx)
    If FileExists($sFile) Then
        If IsArray($sRead) Then
            If $sRead[1][0] = "Adapter" Then
                GUICtrlSetData($aTitle, $sRead[1][1])
            EndIF
            If $sRead[2][0] = "IPAddress" Then
                _GUICtrlIPAddress_Set($IP_ADDRESS, $sRead[2][1])
            EndIf
            If $sRead[3][0] = "SubnetMask" Then
                _GUICtrlIPAddress_Set($SUBNET_MASK, $sRead[3][1])
            EndIf
            If $sRead[4][0] = "DefaultGateway" Then
                _GUICtrlIPAddress_Set($DEFAULT_GATEWAY, $sRead[4][1])
            EndIf
            If $sRead[5][0] = "PreferredDNS" Then
                _GUICtrlIPAddress_Set($PREFERRED_DNS, $sRead[5][1])
            EndIf
            If $sRead[6][0] = "AlternateDNS" Then
                _GUICtrlIPAddress_Set($ALTERNATE_DNS, $sRead[6][1])
            EndIf
        Else
            MsgBox(0, "Preset Read Error!", "The selected preset could not be found!")
        EndIf
    EndIf   
Endfunc
Link to comment
Share on other sites

Hi again

Everything has been working great up till now..

The list is loaded without any problems, but if i add another [section] to the ini, it adds it BUT instead of just adding the new [section] it re-adds the existing presets again..

Here's the final part of my script for the menu-array:

Global $sFile = @ScriptDir & "\LazyIP.inc"
Global $pRead = IniReadSectionNames($sFile)                                                                     
Global $pReadx, $pReadt                                                                                         
Global $pX_gui[2] = [9999, 9999]                                                                                
Global $pX_tray[2] = [9999, 9999]                                                                               
Global $pX_dList[2] = [9999, 9999]                                                                              
Global $pX_List[2] = [9999, 9999]                                                                               
Global $pX_Current, $pX_New, $pX_Last

From the function:

If FileExists($sFile) Then
        If IsArray($pRead) Then
            _Get_pX($sFile)
        Else
            If MsgBox(1, "Preset Read Error!", "No existing presets for this config were found!" & @CRLF & @CRLF & "Open 'New Preset' dialog?") = 1 Then
                _NewPreset()
            EndIf
        EndIf
    EndIf

From the function's 'While 1':

If FileExists($sFile) Then
            If IsArray($pRead) Then
                $pX_Current = IniReadSectionNames($sFile)
                $pX_New = ""
                For $i = 1 To $pX_Current[0]
                    $pX_New = $pX_New & $pX_Current[$i]
                Next
                If $pX_New <> $pX_Last Then
                    _Get_pX($sFile)
                EndIf
            EndIf
        EndIf

Func _Get_pX($sFile)        ;Get available/existing presets from source file ~ Set in preset menu.
    If FileExists($sFile) Then
        If IsArray($pRead) Then
            Global $pX_gui[$pRead[0] + 1]
            Global $pX_tray[$pRead[0] + 1]
            Global $pX_dList[$pRead[0] + 1]
            Global $pX_List[$pRead[0] + 1]

            For $i = 0 To UBound($pX_gui) - 1
                GUICtrlDelete($pX_gui[$i])
            Next
            For $i = 0 To UBound($pX_tray) - 1
                TrayItemDelete($pX_tray[$i])
            Next
            For $i = 0 To UBound($pX_dList) - 1
                GUICtrlDelete($pX_dList[$i])
            Next
            For $i = 0 To UBound($pX_List) - 1
                GUICtrlDelete($pX_List[$i])
            Next
            $pRead = IniReadSectionNames($sFile)
            For $i = 1 To $pRead[0]
                $pX_gui[$i] = GUICtrlCreateMenuItem($pRead[$i], $pLoad)
                $pX_tray[$i] = TrayCreateItem($pRead[$i], $tPreset)
                $pX_dList[$i] = GUICtrlSetData($DeleteName, $pRead[$i])
                $pX_List[$i] = GUICtrlSetData($ToPreset, $pRead[$i])
            Next

            $pX_Last = ""
            For $i = 1 To $pRead[0]
                $pX_Last = $pX_Last & $pRead[$i]
            Next
        EndIf
    EndIf
EndFunc   ;==>Get_pX
Link to comment
Share on other sites

Mm..strange lol

It was working a few days ago, but even with the 'List' & 'dList' having the same setup they're working fine when updating..

I'm not too sure what you mean, are you talking about the 'Global' declare?

I used your example without changing anything, except adding more menu's.. :unsure:

Edited by katoNkatoNK
Link to comment
Share on other sites

Yes, I am talking about 'Global' declare. First you need to delete MenuItems and then redeclare variables. Just put your first two for loops before the Global declarations. I think that it should fix things.

Link to comment
Share on other sites

Hi ahmet

I'm having a problem differentiating between arrays when clicking on the 'array' from the MenuItem..

Case $pX_gui[1] To $pX_gui[UBound($pX_gui) - 1]
;~some action
Case $pX_dList[1] To $pX_dList[UBound($pX_dList) - 1]
;~some action

The items load fine, except they overlap ($px_gui's array fills both MenuItem's, and if i remove $px_gui's list then $px_dlist's items fill both the menu's)

I've tried having them read from different variables '=GUICtrlRead($msg, 1)' which didn't work..

(It's the same layout as my previous problem but with all the 'Global' declared after the 'For..Next')

And this line:

$pX_dList[$i] = GUICtrlCreateMenuItem($pRead[$i], $pDelete)

Thanks in advance

Link to comment
Share on other sites

Thats the only line i've changed, and then also put the 'Global' declare after the 'For..Next loops'

All the rest is the same as i posted in

In short, the gui seems to have trouble telling the difference between these two:

Case $pX_gui[1] To $pX_gui[UBound($pX_gui) - 1]
;~some action
Case $pX_dList[1] To $pX_dList[UBound($pX_dList) - 1]
;~some action
Link to comment
Share on other sites

Ok, then pX_gui wouldn't work either?

I placed a msgbox to test it and displays the menuitem that i clicked on fine..(but 'pX_gui's msgbox displays when i click on 'pX_dList' - the right text but not the right menu..)

So u'r saying, that these case statements:

Case $pX_gui[1] To $pX_gui[UBound($pX_gui) - 1]
;~some action
Case $pX_dList[1] To $pX_dList[UBound($pX_dList) - 1]
;~some action

don't point to these handles created?

For $i = 1 To $pRead[0]
    $pX_gui[$i] = GUICtrlCreateMenuItem($pRead[$i], $pLoad)
    $pX_dList[$i] = GUICtrlCreateMenuItem($pRead[$i], $pDelete)
Next

It was reading 'pX_gui' without any problems before i added, 'pX_dList'.

I've tried 'GUIGetMsg(1)' but doesn't seem to work..and i'm not sure what else can be used.

Edited by katoNkatoNK
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...