Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Diamond,
Цитата:
нет никаких преимуществ если из-за неё приходится отказываться от использования UDF
Я лично имею такое мнение: если UDF ни чем не лучше встроенной функции, то лучше использовать оригинал (встроенную функцию) - всегда надёжнее, но это конечно моё имхо .

Цитата:
Конечно интересно.
Вот пример с функцией
Код: Выделить весь код
#include <GuiConstants.au3>

$Main_GUI = GUICreate("ListView Set Equel Column Width", 340, 260, -1, -1, $WS_OVERLAPPEDWINDOW)

$ListView = GUICtrlCreateListView("col1|col2|col3", 20, 30, 300, 150, _
    $LVS_SHOWSELALWAYS+$LVS_NOSORTHEADER, $LVS_EX_FULLROWSELECT+$LVS_EX_GRIDLINES)

GUICtrlCreateListViewItem("line1|data1|more1", $ListView)
GUICtrlCreateListViewItem("line2|data2|more2", $ListView)
GUICtrlCreateListViewItem("line3|data3|more3", $ListView)
GUICtrlCreateListViewItem("line4|data4|more4", $ListView)
GUICtrlCreateListViewItem("line5|data5|more5", $ListView)

$Set_Equel_Button = GUICtrlCreateButton("Set Equel Width", 20, 190, 100, 20)
$Set_Full_Button = GUICtrlCreateButton("Set Full Width", 20, 220, 100, 20)

GUISetState()

GUIRegisterMsg($WM_SIZE, "WM_SIZE")

While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Set_Full_Button, $GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESTORE
            _GUICtrlListViewSetEquelColWidth($Main_GUI, $ListView, 1)
        Case $Set_Equel_Button
            _GUICtrlListViewSetEquelColWidth($Main_GUI, $ListView, 0)
    EndSwitch
WEnd

Func WM_SIZE($hWndGUI, $MsgID, $WParam, $LParam)
    ;По каким то причинам функция не срабатывает корректно при разворачивании/восстановлении,
    ;поэтому пусть стандартный обработчик справляется с этими событиями ($GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESTORE)..
    _GUICtrlListViewSetEquelColWidth($hWndGUI, $ListView, 1)
EndFunc

Func _GUICtrlListViewSetEquelColWidth($hWnd, $hLV, $iFullMode=1)
    If Not IsHWnd($hLV) Then $hLV = ControlGetHandle($hWnd, "", $hLV)
    If @error Then Return SetError(1, 0, -1)

    Local $LV_Header = DllCall("user32.dll", "long", "SendMessage", "hwnd", $hLV, "int", $LVM_GETHEADER, "int", 0, "int", 0)
    If @error Then Return SetError(2, 0, -1)

    ;Local Const $HDM_GETITEMCOUNT = 0x1200
    Local $sItmsCnt = DllCall("user32.dll", "long", "SendMessage", "hwnd", $LV_Header[0], "int", 0x1200, "int", 0, "int", 0)
    If @error Then Return SetError(3, 0, -1)

    Local $Columns_Count = $sItmsCnt[0]
    Local $iLV_Width = 0

    Switch $iFullMode
        Case 0
            Local $Columns_Width = 0
            Local $GetColumns_Width

            For $i = 0 To $Columns_Count
                $GetColumns_Width = DllCall("user32.dll", "long", "SendMessage", _
                    "hwnd", $hLV, "int", $LVM_GETCOLUMNWIDTH, "int", $i, "int", 0)
                $Columns_Width += $GetColumns_Width[0]
            Next

            $iLV_Width = $Columns_Width / $Columns_Count
        Case 1
            Local $sLV_Width = ControlGetPos($hWnd, "", $hLV)
            If @error Then Return SetError(4, 0, 0)

            $iLV_Width = ($sLV_Width[2]-10) / $Columns_Count
        Case Else
            Return SetError(5, 0, -1)
    EndSwitch

    For $i = 0 To $Columns_Count
        DllCall("user32.dll", "long", "SendMessage", "hwnd", $hLV, "int", $LVM_SETCOLUMNWIDTH, "int", $i, "int", $iLV_Width)
    Next
EndFunc


Правда почему то функция не срабатывает корректно при разворачивании/восстановлении, поэтому пусть стандартный обработчик справляется с этими событиями ($GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESTORE).

Но зато она работает и на внешних приложениях

Цитата:
твой код мне показался проще и понятнее чем на офф. форуме
Мне тоже

Цитата:
GUICtrlSendToDummy() я использую для того чтобы как можно быстрее выйти из функции и отпустить "передающий процесс".
Кстати, у меня есть старый пример с использованием фиктивной Label (для получения данных), я как то не подумал о том что можно Dummy использовать - спасибо.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 04:11, 04-12-2007 | #812