Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Создание GUI с "красивым тулбраром " или графическими кнопками (http://forum.oszone.net/showthread.php?t=286185)

replerk1334 08-08-2014 14:24 2386594

Создание GUI с "красивым тулбраром " или графическими кнопками
 
Вложений: 1
Здравствуйте уважаемые профи Autoit !
Появилась идея создать окно с красивым тулбаром , но покуда не могу понять как это сделать , пробивал ставить иконки и присваивать им события как в обычной кнопки ,все работает но оформить как на изображении которое я приложил я не смог .Посмотрите изображение(тулбар о котором я говорил выделен красным цветом) и ответьте возможно ли создать такой тулбар ,если возможно то как ???
Заранее спасибо!

madmasles 08-08-2014 14:46 2386607

replerk1334,
Смотрите в справке раздел GuiToolbar Management.

replerk1334 08-08-2014 15:15 2386622

madmasles , Спасибо !!

replerk1334 08-08-2014 18:52 2386732

а как заменить картинку на кнопке созданной через
Код:

_GUICtrlToolbar_AddButton
?

madmasles 08-08-2014 18:56 2386735

replerk1334,
Смотрите пример к функции _GUICtrlToolbar_SetButtonBitMap().

replerk1334 08-08-2014 19:05 2386741

madmasles, спасибо!

replerk1334 09-08-2014 14:39 2386989

madmasles, я поискал и узнал много нового в справке , только как загрузить свою иконку , не ту что идет в стандартном системном bitmaps, а именно установить в тулбаре свою иконку к примеру mozilla , я пытался по разному сделать но в итоге либо отображалась системная стандартная иконка или вовсе было пустое место. Приведите пожалуйста пример в котором я наконец таки пойму как это сделать ?
Заранее спасибо .

madmasles 09-08-2014 14:53 2386995

replerk1334,
Завтра или послезавтра сделаю пример, сейчас уезжаю.

madmasles 11-08-2014 08:12 2387577

replerk1334,
Попробуйте с иконками сделать примерно так.
Код:

#include <WinAPIEx.au3>
#include <GuiToolbar.au3>
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
    Local $hGUI, $hToolbar, $i_TB_Btn = 1000, $a_IcoString[4][3] = [[130, '&First'],[132, '&Second'],[134, '&Third'],[136, '&Fourth']], _
            $ah_BitMap[4], $a_Info

    $hGUI = GUICreate(StringTrimRight(@ScriptName, 4), 400, 300)
    $hToolbar = _GUICtrlToolbar_Create($hGUI)
    For $i = 0 To 3
        $a_IcoString[$i][0] = _WinAPI_ShellExtractIcon('shell32.dll', $a_IcoString[$i][0], 16, 16)
        $a_Info = _WinAPI_GetIconInfo($a_IcoString[$i][0])
        $ah_BitMap[$i] = _WinAPI_CopyBitmap($a_Info[5])
        $a_IcoString[$i][2] = _GUICtrlToolbar_AddBitmap($hToolbar, 1, 0, $ah_BitMap[$i])
        $a_IcoString[$i][1] = _GUICtrlToolbar_AddString($hToolbar, $a_IcoString[$i][1])
        If $i = 3 Then _GUICtrlToolbar_AddButtonSep($hToolbar)
        _GUICtrlToolbar_AddButton($hToolbar, $i_TB_Btn, $a_IcoString[$i][2], $a_IcoString[$i][1])
        $i_TB_Btn += 1
        _WinAPI_DestroyIcon($a_IcoString[$i][0])
        For $j = 4 To 5
            _WinAPI_DeleteObject($a_Info[$j])
        Next
    Next
    $a_IcoString = 0
    $a_Info = 0
    GUISetState()
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    For $i = 0 To 3
        _WinAPI_DeleteObject($ah_BitMap[$i])
    Next
EndFunc  ;==>_Main


madmasles 11-08-2014 08:59 2387592

replerk1334,
И еще один пример.
Код:

#include <WinAPIEx.au3>
#include <GuiToolbar.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $hGUI, $iDummy, $iTB_BtnFirst = Random(10000, 15000, 1)

_Main_1()
Exit

Func _Main_1()
    Local $hToolbar, $a_IcoString[4][3] = [[130, '&First'],[132, '&Second'],[134, '&Third'],[136, '&Fourth']], _
            $ah_BitMap[4], $i_ID_TB_Btn, $a_Info, $i_W = 32, $i_H = 32;если 16х16, то не нужна функция _GUICtrlToolbar_SetBitmapSize

    $hGUI = GUICreate(StringTrimRight(@ScriptName, 4), 400, 300)
    $iDummy = GUICtrlCreateDummy()
    $hToolbar = _GUICtrlToolbar_Create($hGUI)
    _GUICtrlToolbar_SetBitmapSize($hToolbar, $i_W, $i_H)
    For $i = 0 To 3
        $a_IcoString[$i][0] = _WinAPI_ShellExtractIcon('shell32.dll', $a_IcoString[$i][0], $i_W, $i_H)
        $a_Info = _WinAPI_GetIconInfo($a_IcoString[$i][0])
        $ah_BitMap[$i] = _WinAPI_CopyBitmap($a_Info[5])
        $a_IcoString[$i][2] = _GUICtrlToolbar_AddBitmap($hToolbar, 1, 0, $ah_BitMap[$i])
        $a_IcoString[$i][1] = _GUICtrlToolbar_AddString($hToolbar, $a_IcoString[$i][1])
        If $i = 3 Then _GUICtrlToolbar_AddButtonSep($hToolbar)
        _GUICtrlToolbar_AddButton($hToolbar, $iTB_BtnFirst + $i, $a_IcoString[$i][2], $a_IcoString[$i][1])
        _WinAPI_DestroyIcon($a_IcoString[$i][0])
        For $j = 4 To 5
            _WinAPI_DeleteObject($a_Info[$j])
        Next
    Next
    $a_IcoString = 0
    $a_Info = 0
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                For $i = 0 To 3
                    _WinAPI_DeleteObject($ah_BitMap[$i])
                Next
                _GUICtrlToolbar_Destroy($hToolbar)
                GUIDelete($hGUI)
                ExitLoop
            Case $iDummy
                $i_ID_TB_Btn = GUICtrlRead($iDummy)
                MsgBox(64, 'Toolbar', 'Button ID: ' & $i_ID_TB_Btn & @LF & 'Button Text: "' & _GUICtrlToolbar_GetButtonText($hToolbar, $i_ID_TB_Btn) & _
                        '"' & @LF & ' has been pressed!', 0, $hGUI)
        EndSwitch
    WEnd
EndFunc  ;==>_Main_1

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Local $i_ID

    Switch $hWnd
        Case $hGUI
            $i_ID = BitAND($wParam, 0xFFFF)
            Switch $i_ID
                Case $iTB_BtnFirst To $iTB_BtnFirst + 3
                    GUICtrlSendToDummy($iDummy, $i_ID)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc  ;==>WM_COMMAND


madmasles 11-08-2014 09:38 2387604

replerk1334,
Или можно сделать все это проще. Смотрите пример к функции _GUICtrlToolbar_SetImageList(). (Почему я сам не посмотрел его, прежде чем писать примеры?) :)

replerk1334 11-08-2014 10:33 2387618

madmasles, спасибо вам большое !!! теперь все понятно !!!!!)))

madmasles 13-08-2014 08:45 2388582

Вложений: 1
replerk1334,
Так можно сделать с крупными иконками (прикрепленные иконки должны лежать в папке со скриптом).
читать дальше »
Код:

#include <WinAPIEx.au3>
#include <GuiToolbar.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiImageList.au3>

Opt('MustDeclareVars', 1)

Global $iDummy

_Main_2()
Exit

Func _Main_2()
    Local $hGUI, $hToolbar, $a_IcoString[4][3] = [['11.ico', '12.ico', '&First'],['21.ico', '22.ico', '&Second'],['31.ico', '32.ico', '&Third'], _
            ['41.ico', '42.ico', '&Fourth']], $i_ID_TB_Btn, $a_Info, $i_W = 48, $i_H = 48, $hIL_Normal, $hIL_Hot, $i_Btn, _
            $iTB_BtnFirst = Random(10000, 15000, 1)

    $hIL_Normal = _GUIImageList_Create($i_W, $i_H, 5)
    $hIL_Hot = _GUIImageList_Create($i_W, $i_H, 5)
    $hGUI = GUICreate(StringTrimRight(@ScriptName, 4), 400, 300)
    $iDummy = GUICtrlCreateDummy()
    $hToolbar = _GUICtrlToolbar_Create($hGUI, 0x00000800, $TBSTYLE_EX_DOUBLEBUFFER)
    If @WorkingDir <> @ScriptDir Then FileChangeDir(@ScriptDir)
    For $i = 0 To 3
        $a_IcoString[$i][0] = _WinAPI_ShellExtractIcon($a_IcoString[$i][0], 0, $i_W, $i_H)
        $a_Info = _WinAPI_GetIconInfo($a_IcoString[$i][0])
        _GUIImageList_Add($hIL_Normal, $a_Info[5]);, $a_Info[4])
        For $j = 4 To 5
            _WinAPI_DeleteObject($a_Info[$j])
        Next
        _WinAPI_DestroyIcon($a_IcoString[$i][0])
        $a_IcoString[$i][1] = _WinAPI_ShellExtractIcon($a_IcoString[$i][1], 0, $i_W, $i_H)
        $a_Info = _WinAPI_GetIconInfo($a_IcoString[$i][1])
        _GUIImageList_Add($hIL_Hot, $a_Info[5]);, $a_Info[4])
        For $j = 4 To 5
            _WinAPI_DeleteObject($a_Info[$j])
        Next
        _WinAPI_DestroyIcon($a_IcoString[$i][1])
        _GUICtrlToolbar_AddString($hToolbar, $a_IcoString[$i][2])
    Next
    _GUICtrlToolbar_SetImageList($hToolbar, $hIL_Normal)
    _GUICtrlToolbar_SetHotImageList($hToolbar, $hIL_Hot)
    For $i = 0 To 3
        _GUICtrlToolbar_AddButton($hToolbar, $iTB_BtnFirst + $i, $i, $i)
    Next
    $a_Info = _GUICtrlToolbar_GetButtonSize($hToolbar)
    If Not @error Then _GUICtrlToolbar_SetIndent($hToolbar, (400 - $a_Info[1] * 4) / 2)
    $a_IcoString = 0
    $a_Info = ControlGetPos($hGUI, '', $hToolbar)
    If Not @error Then GUICtrlCreateLabel('', 0, $a_Info[3], 405, 3, BitOR($GUI_SS_DEFAULT_LABEL, $SS_ETCHEDHORZ))
    $a_Info = 0
    $i_Btn = GUICtrlCreateButton('Button', 150, 150, 100, 40)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND_Main_2')
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $i_Btn
                MsgBox(64, 'Info', 'Button $i_Btn has been pressed!', 0, $hGUI)
            Case $iDummy
                $i_ID_TB_Btn = GUICtrlRead($iDummy)
                Switch $i_ID_TB_Btn
                    Case $iTB_BtnFirst To $iTB_BtnFirst + 3
                        MsgBox(64, 'Toolbar', 'Button ID: ' & $i_ID_TB_Btn & @LF & 'Button Text: "' & _GUICtrlToolbar_GetButtonText($hToolbar, $i_ID_TB_Btn) & _
                                '"' & @LF & 'has been pressed!', 0, $hGUI)
                EndSwitch
        EndSwitch
    WEnd
    GUIRegisterMsg($WM_COMMAND, '')
    _GUIImageList_Destroy($hIL_Normal)
    _GUIImageList_Destroy($hIL_Hot)
    _GUICtrlToolbar_Destroy($hToolbar)
    GUIDelete($hGUI)
    $iDummy = 0
EndFunc  ;==>_Main_2

Func _WM_COMMAND_Main_2($hWnd, $iMsg, $wParam, $lParam)
    GUICtrlSendToDummy($iDummy, BitAND($wParam, 0xFFFF))
    Return $GUI_RUNDEFMSG
EndFunc  ;==>_WM_COMMAND_Main_2


replerk1334 13-08-2014 15:14 2388758

madmasles, спасибо!!


Время: 17:39.

Время: 17:39.
© OSzone.net 2001-