Element WinList BaseElements include 'Win.inc' EndBase GlobalConst implements_IArray ClassName GlobalProc virtual at esi-sizeof.THIWin pa#ClassName THIWin pa#ClassName#.IArray dd ? end virtual proc ClassName#.IArray.Set self,idx,data push esi mov esi,[self] invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.GETCOUNT,0,0 cmp eax,[idx] jbe .err invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.DELETESTRING,[idx],0 invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.INSERTSTRING,[idx],[data] .err: pop esi ret endp proc ClassName#.IArray.Get self,idx push esi mov esi,[self] invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.GETTEXTLEN,[idx],0 cmp eax,ClassName#.ERR je .err mov edx,__rtl_temp_str call __strsetlength invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.GETTEXT,[idx],[__rtl_temp_str] mov eax,[__rtl_temp_str] jmp .ok .err: mov eax,empty_string .ok: pop esi ret endp proc ClassName#.IArray.Count self push esi mov esi,[self] invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.GETCOUNT,0,0 pop esi ret endp proc ClassName#.IArray.Add self,data push esi mov esi,[self] invoke SendMessage,[pa#ClassName#.hwnd],ClassName#.ADDSTRING,0,[data] pop esi ret endp Vars Self#.IArray dd ? Create mov [Self#.IArray],ClassName#.IArray Events Event Self,onClick,LBN_SELCHANGE invoke SendMessage,[Self#.hwnd],ClassName#.GETCURSEL,0,0 if Self#.prop.DataType = 0 Self#.onClick eax,data_int,Parent#.finish else comcall Self#.IArray,IArray,Get,eax Self#.onClick [__rtl_temp_str],data_str,Parent#.finish end if jmp Parent#.finish EndEvent PointWork doAdd \local res ReadStr res,data,data.type,Self#.Str,0 invoke SendMessage,[Self#.hwnd],ClassName#.ADDSTRING,0,res EndPoint PointWork doAddDir \local res push 0 ToString res,data,data.type mov_ex eax,res mov edx,esp call __strdup mov eax,512 mov edx,esp call __strsetlength mov eax,[esp] invoke ClassName#.DlgDir,[Parent#.hwnd],eax,Self#.id,0,21h mov edx,esp call __strclear pop eax EndPoint PointWork doClear invoke SendMessage,[Self#.hwnd],ClassName#.RESETCONTENT,0,0 EndPoint PointWork doDelete \local idx ToInteger idx,data,data.type invoke SendMessage,[Self#.hwnd],ClassName#.DELETESTRING,idx,0 EndPoint PointWork doReplace \local idx,str ReadStr str,0,0,Self#.Str,0 push str ToInteger idx,data,data.type comcall Self#.IArray,IArray,Set,idx EndPoint PointWork doSelect \local idx ToInteger idx,data,data.type invoke SendMessage,[Self#.hwnd],ClassName#.SETCURSEL,idx,0 EndPoint PointWork doSelectString \local str ToString str,data,data.type invoke SendMessage,[Self#.hwnd],ClassName#.SELECTSTRING,-1,str EndPoint PointWork doText EndPoint PointWork doLoad EndPoint PointWork doSave EndPoint PointWork doAppend EndPoint PointVar Count,data_int invoke SendMessage,[Self#.hwnd],ClassName#.GETCOUNT,0,0 result equ eax EndPoint PointVar String,data_str invoke SendMessage,[Self#.hwnd],ClassName#.GETCURSEL,0,0 comcall Self#.IArray,IArray,Get,eax result equ [__rtl_temp_str] EndPoint PointVar Index,data_int invoke SendMessage,[Self#.hwnd],ClassName#.GETCURSEL,0,0 result equ eax EndPoint PointVar Array,data_str_array result equ Self#.IArray EndPoint EndElement macro WinList.Init ClassName,Self { ; Загрузка таблицы строк local addstr if Self#.prop.Strings.size > 1 cld mov edi,Self#.prop.Strings addstr: invoke SendMessage,[Self#.hwnd],ClassName#.ADDSTRING,0,edi xor eax,eax mov ecx,-1 repne scasb cmp edi,Self#.prop.Strings.size + Self#.prop.Strings jb addstr end if }