Jump to content
emendelson

GUI: highlighted list instead of radio buttons?

Recommended Posts

I've been using the superb code found here to display a list of printers so that the user can select a printer name:

I'll post my code below, but is there any way to make the GUI more modern, perhaps a list of printer names, with one of the names highlighted (reverse color), so you can move the highlight and then click OK to select that printer? I'm happy to live with this superb code as it is, but it would be nice to give it a more Windows-10-style look.

Here's the code fragment that I've been using (extracted from a much longer script):

#include <Array.au3>
#include <GUIConstants.au3>

Global $printername
Local $ptrselmsg = "Select a printer:"
GetPrinter($ptrselmsg)
Do
    Sleep(100)
Until $printername
ConsoleWrite($printername & @LF)

Func GetPrinter($ptrselmsg)
    Global $printer_list[1]
    Global $printer_list_ext[1]
    Global $printer_radio_array[1]
    Global $gh
    ; $printer_list = 0
    ; $printer_list_ext = 0
    ; $printer_radio_array = 0
    $regprinters = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices"
    $currentprinter = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\", "Device")
    $defaultprinter = StringLeft($currentprinter, StringInStr($currentprinter, ",") - 1)
    Dim $i = 1
    Dim $erreur_reg = False
    While Not $erreur_reg
        $imprimante = RegEnumVal($regprinters, $i)
        $erreur_reg = @error
        If Not $erreur_reg Then
            _ArrayAdd($printer_list, $imprimante)
            _ArrayAdd($printer_list_ext, $imprimante & "," & RegRead($regprinters, $imprimante))
        EndIf
        $i = $i + 1
    WEnd
    _ArrayDelete($printer_list, 0)
    _ArrayDelete($printer_list_ext, 0)
    If UBound($printer_list) >= 2 Then ;if 2 or more printers available, we show the dialog
        Dim $groupheight = (UBound($printer_list) + 1) * 25 ;30
        Dim $guiheight = $groupheight + 50
        Dim $buttontop = $groupheight + 20
        Opt("GUIOnEventMode", 1)
        $gh = GUICreate($ptrselmsg, 400, $guiheight)
        Dim $font = "Verdana"
        GUISetFont(10, 400, 0, $font)
        GUISetOnEvent($GUI_EVENT_CLOSE, "CloseClicked")
        GUISetFont(10, 400, 0, $font)
        GUICtrlCreateGroup("Available printers:", 10, 10, 380, $groupheight)
        Dim $position_vertical = 5 ; 0
        For $i = 0 To UBound($printer_list) - 1 Step 1
            GUISetFont(10, 400, 0, $font)
            $position_vertical = $position_vertical + 25 ;30
            $radio = GUICtrlCreateRadio($printer_list[$i], 20, $position_vertical, 350, 20)
            _ArrayAdd($printer_radio_array, $radio)
            If $currentprinter = $printer_list_ext[$i] Then
                GUICtrlSetState($radio, $GUI_CHECKED)
            EndIf
        Next
        _ArrayDelete($printer_radio_array, 0)
        GUISetFont(10, 400, 0, $font)
        $okbutton = GUICtrlCreateButton("OK", 10, $buttontop, 50, 25)
        GUICtrlSetOnEvent($okbutton, "OKButton")
        Local $AccelKeys[2][2] = [["{ENTER}", $okbutton], ["^O", $okbutton]]
        GUISetAccelerators($AccelKeys)
        GUISetState()
    EndIf
EndFunc   ;==>GetPrinter

Func OKButton()
    For $i = 0 To UBound($printer_radio_array) - 1 Step 1
        If GUICtrlRead($printer_radio_array[$i]) = 1 Then
            $printername = StringLeft($printer_list_ext[$i], StringInStr($printer_list_ext[$i], ",") - 1)
        EndIf
    Next
    GUIDelete($gh)
    ; If Not @Compiled Then ConsoleWrite($printername & @LF)
EndFunc   ;==>OKButton

Func CloseClicked()
    ;$printername = $defaultprinter
    GUIDelete($gh)
    $printername = "nul"
    ; If Not @Compiled Then ConsoleWrite($printername & @LF)
    ;Cancelled() ; MsgBox(0, "", $printername)
    ; Return $printername
EndFunc   ;==>CloseClicked

 

 

Share this post


Link to post
Share on other sites

@Zedna Thank you - this is clearly the answer I was looking for. It's not going to be easy for a low-skills scripted like me to do this, but it should certainly be possible. Thank you again.!

Share this post


Link to post
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

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...