Пользователь
Сообщения: 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 решил отказаться потому что не знаю как правильно разобрать строку.
|