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

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

Пользователь


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

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


Creat0R,
Цитата:
встроенная функция вполне идеальна для построения практический любого списка (как в плане стильности, так и в плане функциональноти)
Согласен. Я имел ввиду что нет никаких преимуществ если из-за неё приходится отказываться от использования UDF.
Цитата:
Потому что меняется размер GUI
Я бы использовал тут WM_SIZING, оно срабатывает в момент смены размеров.
Я сначала так и хотел сделать... но как оказалось она не срабатывает при команде развернуть-восстановить окно.
Цитата:
Кстати если интересно, могу подкинуть функцию для автоматической смены размера колонок в ListView
Конечно интересно.

Спасибо за пример. Кстати твой код мне показался проще и понятнее чем на офф. форуме.
В общем я решил сделать так:

Код: Выделить весь код
#include <GuiConstantsEx.au3>
#include <Array.au3>
Global $UserCmdLine, $EventCmdLine
Global $Title = "CmdLine_Test"
RegisterScriptMsg($Title)

$Gui = GUICreate($Title, 400, 300)
$EventCmdLine = GUICtrlCreateDummy()
If $CmdLine[0] Then _ArrayDisplay($CmdLine,"CmdLine") ; OpenFile ($CmdLine)
GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $EventCmdLine
            _ArrayDisplay($UserCmdLine,"UserCmdLine") ; OpenFile ($UserCmdLine)
    EndSwitch
WEnd

Func RegisterScriptMsg($Title)
    Local Const $WM_COPYDATA = 0x004A
    Local Const $ERROR_ALREADY_EXISTS = 0x00B7
    Local $String
    Local $OccurName = StringReplace(@ScriptFullPath, "\", "")
    DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $OccurName)
    Local $iLastError = DllCall("kernel32.dll", "int", "GetLastError")
    If $iLastError[0] = $ERROR_ALREADY_EXISTS Then
        If $CmdLine[0] Then
            $String = $CmdLine[1]
            For $i = 2 To $CmdLine[0]
                $String &= "|" & $CmdLine[$i]
            Next
            Local $HWnd = WinGetHandle($Title)
            Local Const $tagCopyData = "dword dwData;dword cbData;ptr lpData"
            Local $struct = "char [" & StringLen($String)+1 & "]"
            Local $p = DllStructCreate($tagCopyData)
            Local $StringMSG = DllStructCreate($struct)
            DllStructSetData($p, "dwData", 0)
            DllStructSetData($p, "cbData", DllStructGetSize($StringMSG))  ; размер структуры $StringMSG
            DllStructSetData($p, "lpData", DllStructGetPtr($StringMSG))   ; указатель на структуру $StringMSG
            DllStructSetData($StringMSG, 1, $String) ; строка сообщения
            DllCall("user32.dll","long","SendMessage","hwnd",$HWnd,"int",$WM_COPYDATA,"hwnd",0,"ptr",DllStructGetPtr($p))
        EndIf
        Exit
    Else
        GUIRegisterMsg($WM_COPYDATA, "WM_COPYDATA")
    EndIf
EndFunc

Func WM_COPYDATA($HWnd, $MsgID, $wParam, $lParam)
    Local Const $tagCopyData = "dword dwData;dword cbData;ptr lpData"
    Local $p = DllStructCreate($tagCopyData, $lParam)
       Local $struct = "char [" & DllStructGetData($p, "cbData") & "]"
     Local $StringMSG = DllStructCreate($struct,  DllStructGetData($p, "lpData"))
    $UserCmdLine = StringSplit(DllStructGetData($StringMSG,1),"|")
    GUICtrlSendToDummy($EventCmdLine)
EndFunc

GUICtrlSendToDummy() я использую для того чтобы как можно быстрее выйти из функции и отпустить "передающий процесс".
От $CmdLineRaw решил отказаться потому что не знаю как правильно разобрать строку.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:21, 03-12-2007 | #811