|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1271 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
Отправлено: 16:09, 04-04-2018 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
|
|
Последний раз редактировалось ROMKA-1977, 30-05-2018 в 09:58. Отправлено: 09:29, 30-05-2018 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Добрый день, подскажите, возможно ли как-то прикрутить inno download plugin к скрипту "Opera"
чтоб прогресс скачивания нормально отображался перед распаковкой. Сам скрипт ссылка
|
Отправлено: 16:42, 30-05-2018 | #42 |
Ветеран Сообщения: 1271
|
Профиль | Отправить PM | Цитировать Цитата ROMKA-1977:
P.S. GetWindowLong(MainForm.Handle,-8) - попытка автора библиотеки Application.Handle получить. Ужас. |
|
Отправлено: 10:08, 31-05-2018 | #43 |
Пользователь Сообщения: 131
|
Профиль | Сайт | Отправить PM | Цитировать Доброго времени суток. Будьте добры подскажите:
1. Как изменить цвет текста лицензионного соглашения? WizardForm.LicenseMemo.Font.Color не даёт никакого эффекта. 2. Существует ли способ разместить текст на Splash изображении? 3. Можно ли в WizardForm.ComponentsList добавить название колонок (как в таблицах)? По сути над списком чекбоксов должна размещаться линия, поделенная на 3 "колонки", такого вида: [ Пустая ячейка | Компоненты | Размер компонента]. |
------- Последний раз редактировалось Sotonisto, 13-06-2018 в 02:23. Отправлено: 02:13, 13-06-2018 | #44 |
Ветеран Сообщения: 1271
|
Профиль | Отправить PM | Цитировать Цитата Sotonisto:
Цитата Sotonisto:
Скрытый текст
[Code] #define A = (Defined UNICODE) ? "W" : "A" #ifndef IS_ENHANCED const WC_HEADER = 'SysHeader32'; WS_CHILD = $40000000; WS_VISIBLE = $10000000; WS_DISABLED = $08000000; WM_SETFONT = $0030; HDI_WIDTH = $0001; HDI_TEXT = $0002; HDI_FORMAT = $0004; HDF_CENTER = $0002; HDF_STRING = $4000; HDM_FIRST = $1200; HDM_INSERTITEM = HDM_FIRST + {#ifdef UNICODE}10{#else}1{#endif}; type THDItem = record Mask: LongWord; cxy: Integer; pszText: string; hbm: HBITMAP; cchTextMax: Integer; fmt: Integer; lParam: LongWord; iImage: Integer; iOrder: Integer; _type: LongWord; pvFilter: LongWord; state: LongWord; end; // Window Functions function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: THandle; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall'; function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall'; // Message Functions function SendMessageHDItem(hWnd: HWND; Msg: LongWord; wParam: Longint; var lParam: THDItem): Longint; external 'SendMessage{#A}@user32.dll stdcall'; var HeaderHandle: HWND; #endif procedure CreateHeader; var #ifdef IS_ENHANCED HeaderControl: THeaderControl; HeaderSection: THeaderSection; #else HDItem: THDItem; #endif begin with WizardForm.ComponentsList do begin #ifdef IS_ENHANCED HeaderControl := THeaderControl.Create(WizardForm); HeaderControl.Parent := WizardForm.ComponentsList; HeaderControl.Enabled := False; HeaderSection := HeaderControl.Sections.Add; HeaderSection.Width := ClientWidth div 3; HeaderSection.Alignment := taCenter; HeaderSection.Text := ''; HeaderSection := HeaderControl.Sections.Add; HeaderSection.Width := ClientWidth div 3; HeaderSection.Alignment := taCenter; HeaderSection.Text := 'Компоненты'; HeaderSection := HeaderControl.Sections.Add; HeaderSection.Width := ClientWidth div 3; HeaderSection.Alignment := taCenter; HeaderSection.Text := 'Размер компонента'; #else HeaderHandle := CreateWindowEx(0, WC_HEADER, '', WS_VISIBLE or WS_CHILD or WS_DISABLED, 0, 0, ClientWidth, MinItemHeight, Handle, 0, 0, 0); if HeaderHandle = 0 then Exit; SendMessage(HeaderHandle, WM_SETFONT, Font.Handle, 1); HDItem.Mask := HDI_WIDTH or HDI_TEXT or HDI_FORMAT; HDItem.cxy := ClientWidth div 3; HDItem.fmt := HDF_CENTER or HDF_STRING; HDItem.pszText := ''; SendMessageHDItem(HeaderHandle, HDM_INSERTITEM, 0, HDItem); HDItem.pszText := 'Компоненты'; SendMessageHDItem(HeaderHandle, HDM_INSERTITEM, 1, HDItem); HDItem.pszText := 'Размер компонента'; SendMessageHDItem(HeaderHandle, HDM_INSERTITEM, 2, HDItem); #endif end; end; procedure InitializeWizard; begin CreateHeader; end; procedure DeinitializeSetup; begin #ifndef IS_ENHANCED if HeaderHandle <> 0 then DestroyWindow(HeaderHandle); #endif end; |
||
Отправлено: 12:04, 14-06-2018 | #45 |
Пользователь Сообщения: 131
|
Профиль | Сайт | Отправить PM | Цитировать El Sanchez, скрипт для ComponentsList работает, но название колонок скрывает первый компонент. Каким образом можно разместить название колонок до первого компонента? Или же сделать отступ определенного размера перед списком компонентов?
|
------- Отправлено: 03:57, 15-06-2018 | #46 |
Ветеран Сообщения: 1271
|
Профиль | Отправить PM | Цитировать Цитата Sotonisto:
Скрытый текст
[Code] #define A = (Defined UNICODE) ? "W" : "A" type TNCCalcSizeParams = record rgrc0: TRect; rgrc1: TRect; rgrc2: TRect; end; // Shell Functions function SetWindowSubclass(hWnd: HWND; pfnSubclass: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall'; function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: Longint; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall'; function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint): Longint; external 'DefSubclassProc@comctl32.dll stdcall'; // Run-Time Library (RTL) Routines function ReadNCCalcSizeParams(out Destination: TNCCalcSizeParams; const Source: LongWord; len: Integer): Integer; external 'RtlMoveMemory@kernel32.dll stdcall'; // Debugging Functions function WriteNCCalcSizeParams(hProcess: THandle; lpBaseAddress: Longint; var lpBuffer: TNCCalcSizeParams; nSize: DWORD; out lpNumberOfBytesWritten: DWORD): BOOL; external 'WriteProcessMemory@kernel32.dll stdcall'; // Process and Thread Functions function GetCurrentProcess: THandle; external 'GetCurrentProcess@kernel32.dll stdcall'; // Device Context Functions function GetDCEx(hWnd: HWND; hrgnClip: THandle; flags: DWORD): THandle; external 'GetDCEx@user32.dll stdcall'; function ReleaseDC(hWnd: HWND; hDC: THandle): Integer; external 'ReleaseDC@user32.dll stdcall'; // Painting and Drawing Functions function GetWindowDC(hWnd: HWND): THandle; external 'GetWindowDC@user32.dll stdcall'; // Window Functions function GetWindowRect(hWnd: HWND; var lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall'; function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall'; const WM_NCCALCSIZE = $0083; WM_NCPAINT = $0085; SWP_NOSIZE = 1; SWP_NOMOVE = 2; SWP_NOZORDER = 4; SWP_FRAMECHANGED = $20; SWP_NOOWNERZORDER = $200; DCX_WINDOW = 1; DCX_CACHE = 2; DCX_INTERSECTRGN = $80; DCX_USESTYLE = $10000; DCX_KEEPCLIPRGN = $40000; var PCheckListBoxWndProc: LongWord; HeaderControl: THeaderControl; function CheckListBoxWndProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): LongWord; var DC: THandle; NCCalcSizeParams: TNCCalcSizeParams; NumberOfBytesWritten: DWORD; P: TPoint; R: TRect; begin case uMsg of WM_NCCALCSIZE: begin Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); ReadNCCalcSizeParams(NCCalcSizeParams, lParam, SizeOf(NCCalcSizeParams)); NCCalcSizeParams.rgrc0.Top := NCCalcSizeParams.rgrc0.Top + HeaderControl.Height; WriteNCCalcSizeParams(GetCurrentProcess, lParam, NCCalcSizeParams, SizeOf(NCCalcSizeParams), NumberOfBytesWritten); end; WM_NCPAINT: begin if (wParam <> 0) and (wParam <> 1) then DC := GetDCEx(hWnd, wParam, DCX_WINDOW or DCX_CACHE or DCX_INTERSECTRGN or DCX_KEEPCLIPRGN or DCX_USESTYLE) else DC := GetWindowDC(hWnd); try Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); GetWindowRect(hWnd, R); P.x := 0; P.y := -HeaderControl.Height; P := HeaderControl.ClientToScreen(P); HeaderControl.PaintTo(DC, P.x - R.Left, P.y - R.Top); finally ReleaseDC(hWnd, DC); end; end; else Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); end; end; procedure CreateHeader; var HeaderSection: THeaderSection; begin with WizardForm.ComponentsList do begin HeaderControl := THeaderControl.Create(WizardForm); HeaderControl.Parent := WizardForm.ComponentsList; HeaderControl.Enabled := False; HeaderSection := HeaderControl.Sections.Add; HeaderSection.Width := ClientWidth div 3; HeaderSection.Alignment := taCenter; HeaderSection.Text := ''; HeaderSection := HeaderControl.Sections.Add; HeaderSection.Width := ClientWidth div 3; HeaderSection.Alignment := taCenter; HeaderSection.Text := 'Компоненты'; HeaderSection := HeaderControl.Sections.Add; HeaderSection.Width := ClientWidth div 3; HeaderSection.Alignment := taCenter; HeaderSection.Text := 'Размер компонента'; // sublass PCheckListBoxWndProc := CallbackAddr('CheckListBoxWndProc'); SetWindowSubclass(Handle, PCheckListBoxWndProc, 0, 0); // send WM_NCCALCSIZE SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOOWNERZORDER or SWP_NOSIZE or SWP_NOZORDER); HeaderControl.Visible := False; end; end; procedure InitializeWizard; begin CreateHeader; end; procedure DeinitializeSetup; begin if PCheckListBoxWndProc <> 0 then RemoveWindowSubclass(WizardForm.ComponentsList.Handle, PCheckListBoxWndProc, 0); end; |
|
Последний раз редактировалось El Sanchez, 16-06-2018 в 12:15. Причина: fix Отправлено: 14:37, 15-06-2018 | #47 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Всем привет! Есть код:
procedure RtlMoveMemory(Dest: string; Source: PAnsiChar; Len: Integer); external 'RtlMoveMemory@kernel32.dll stdcall'; function LoadStringFromUTF16LEFile(FileName: string; var S: string): Boolean; var A: AnsiString; begin Result := LoadStringFromFile(FileName, A); if Result then begin SetLength(S, Length(A) div 2); RtlMoveMemory(S, A, Length(S) * 2); { Trim BOM, if any } if (Length(S) >= 1) and (Ord(S[1]) = $FEFF) then Delete(S, 1, 1); end; end; Сама задача решаема через перекодировки в скрипте ConvertString.iss, но в этом примере кода поменьше. // еще одна задача необходимо запустить юникодный батник через функцию Exec или ShellExec (или через api), чтобы внутренние команды выполнились, например, bat-ник с содержимым: copy "c:\嗨 русский.txt" "c:\嗨 русский.txt.bak" в самой Windows, если вставить данную строку в cmd, то, пусть она и не отобразит правильно имена файлов в окне (что не требуется), но зато выполнит операцию корректно с названиями файлов в Unicode кодировке. как добиться этого в Inno, чтобы можно было выполнять юникодные батники? (просьба при возможности сделать пример для стандартной версии IS) |
Последний раз редактировалось usermode, 16-06-2018 в 11:31. Отправлено: 14:40, 15-06-2018 | #48 |
Пользователь Сообщения: 131
|
Профиль | Сайт | Отправить PM | Цитировать El Sanchez, у меня всё снова не как у людей. Вместо названий колонок отображается пустое место (зато с отступом). В первой версии скрипта все отображалось корректно. Я обнаружил, что причина проблемы в том, что у меня WizardForm является родительским элементом для ComponentsList (Parent:=WizardForm). Прошу у Вас помощи еще раз, подскажите что нужно изменить, чтобы колонки отображались.
|
------- Отправлено: 20:55, 15-06-2018 | #49 |
Ветеран Сообщения: 1271
|
Профиль | Отправить PM | Цитировать Цитата Sotonisto:
|
|
Отправлено: 12:16, 16-06-2018 | #50 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты Inno Setup. Помощь и советы [часть 7] | El Sanchez | Автоматическая установка приложений | 2499 | 02-02-2015 08:59 | |
Скрипты Inno Setup. Помощь и советы [часть 6] | El Sanchez | Автоматическая установка приложений | 2494 | 10-03-2014 11:51 | |
Скрипты Inno Setup. Помощь и советы [часть 5] | El Sanchez | Автоматическая установка приложений | 1999 | 28-03-2013 19:09 | |
Скрипты Inno Setup. Помощь и советы [часть 4] | El Sanchez | Автоматическая установка приложений | 2099 | 22-05-2012 23:16 | |
Скрипты Inno Setup. Помощь и советы [часть 3] | Serega | Автоматическая установка приложений | 3755 | 26-10-2011 17:58 |
|