UI3
Newbie-
Content Count
2 -
Joined
-
Last visited
Community Reputation
0 Noob-
Создание инсталляторов для модпаков на базе Inno Setup
UI3 replied to EvilAlex's topic in Modding General Discussion
Добрый вечер, помогите переделать условие выполнения скрипта. Именно, данный скрипт позволяет увеличивать окно инсталлятора, с учетом отступов, единственное что нужно поменять это значения "GrowWizard(ScaleX(100), ScaleY(80))"; Вопрос: Как прописать условие, чтобы настройки которые мы изменяем в "GrowWizard" применялись НЕ ДЛЯ ВСЕГО инсталлятора, а ТОЛЬКО для определенной страницу (В моём случае это страница компонентов). ПОМОГИТЕ изменить условия выполнения алгоритма. Как я полагаю за это отвечает секция "procedure GrowWizard". P.S: Мне нужен данный скрипт, т.к он максимально кратко расписан, без лишних наворотов. P.S.S: Если изменять WizardForm, то скрипт не понимает к какой именно странице обращается пользователь, т.к нарушается последовательность обращения DeltaX и Y. procedure ShiftDown(Control: TControl; DeltaY: Integer); begin Control.Top := Control.Top + DeltaY; end; procedure ShiftRight(Control: TControl; DeltaX: Integer); begin Control.Left := Control.Left + DeltaX; end; procedure ShiftDownAndRight(Control: TControl; DeltaX, DeltaY: Integer); begin ShiftDown(Control, DeltaY); ShiftRight(Control, DeltaX); end; procedure GrowDown(Control: TControl; DeltaY: Integer); begin Control.Height := Control.Height + DeltaY; end; procedure GrowRight(Control: TControl; DeltaX: Integer); begin Control.Width := Control.Width + DeltaX; end; procedure GrowRightAndDown(Control: TControl; DeltaX, DeltaY: Integer); begin GrowRight(Control, DeltaX); GrowDown(Control, DeltaY); end; procedure GrowRightAndShiftDown(Control: TControl; DeltaX, DeltaY: Integer); begin GrowRight(Control, DeltaX); ShiftDown(Control, DeltaY); end; procedure GrowWizard(DeltaX, DeltaY: Integer); begin GrowRightAndDown(WizardForm, DeltaX, DeltaY); with WizardForm do begin GrowRightAndShiftDown(Bevel, DeltaX, DeltaY); ShiftDownAndRight(CancelButton, DeltaX, DeltaY); ShiftDownAndRight(NextButton, DeltaX, DeltaY); ShiftDownAndRight(BackButton, DeltaX, DeltaY); GrowRightAndDown(OuterNotebook, DeltaX, DeltaY); GrowRight(BeveledLabel, DeltaX); { WelcomePage } GrowDown(WizardBitmapImage, DeltaY); GrowRight(WelcomeLabel2, DeltaX); GrowRight(WelcomeLabel1, DeltaX); { InnerPage } GrowRight(Bevel1, DeltaX); GrowRightAndDown(InnerNotebook, DeltaX, DeltaY); { LicensePage } ShiftDown(LicenseNotAcceptedRadio, DeltaY); ShiftDown(LicenseAcceptedRadio, DeltaY); GrowRightAndDown(LicenseMemo, DeltaX, DeltaY); GrowRight(LicenseLabel1, DeltaX); { SelectDirPage } GrowRightAndShiftDown(DiskSpaceLabel, DeltaX, DeltaY); ShiftRight(DirBrowseButton, DeltaX); GrowRight(DirEdit, DeltaX); GrowRight(SelectDirBrowseLabel, DeltaX); GrowRight(SelectDirLabel, DeltaX); { SelectComponentsPage } GrowRightAndShiftDown(ComponentsDiskSpaceLabel, DeltaX, DeltaY); GrowRightAndDown(ComponentsList, DeltaX, DeltaY); GrowRight(TypesCombo, DeltaX); GrowRight(SelectComponentsLabel, DeltaX); { SelectTasksPage } GrowRightAndDown(TasksList, DeltaX, DeltaY); GrowRight(SelectTasksLabel, DeltaX); { ReadyPage } GrowRightAndDown(ReadyMemo, DeltaX, DeltaY); GrowRight(ReadyLabel, DeltaX); { InstallingPage } GrowRight(FilenameLabel, DeltaX); GrowRight(StatusLabel, DeltaX); GrowRight(ProgressGauge, DeltaX); { MainPanel } GrowRight(MainPanel, DeltaX); ShiftRight(WizardSmallBitmapImage, DeltaX); GrowRight(PageDescriptionLabel, DeltaX); GrowRight(PageNameLabel, DeltaX); { FinishedPage } GrowDown(WizardBitmapImage2, DeltaY); GrowRight(RunList, DeltaX); GrowRight(FinishedLabel, DeltaX); GrowRight(FinishedHeadingLabel, DeltaX); end; end; procedure InitializeWizard(); begin GrowWizard(ScaleX(100), ScaleY(80)); end; -
Создание инсталляторов для модпаков на базе Inno Setup
UI3 replied to EvilAlex's topic in Modding General Discussion
Дорогие форумчане, а так же: @AtotIK, @night_dragon_on Уже с неделю делаю модпак, и вот возникла проблема. Хочу прикрутить (без ботвы) отображение картинки вблизи курсора (при выборе компонента), который не будет привязан к инсталлятору. Нашел (на другом сайте) пример такого кода (прикреплю его ниже вместе с картинкой). [code] #ifdef UNICODE #define A "W" #else #define A "A" #endif const UNDEF_INDEX = -777; ALPHA_BLEND_LEVEL = 128; // max=Byte=255 WS_EX_LAYERED = $80000; WS_EX_TRANSPARENT = $20; LWA_COLORKEY = 1; LWA_ALPHA = 2; GWL_EXSTYLE = (-20); var InfoPic: TBitmapImage; LastIndex: Integer; TempPath: String; PicForm: TForm; type COLORREF = DWORD; function GetCursorPos(var lpPoint: TPoint): BOOL; external '[email protected] stdcall'; function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external '[email protected] stdcall'; function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall'; function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall'; function SetFocus(hWnd: HWND): HWND; external '[email protected] stdcall'; procedure ShowPicHint(const PicFilePath: String); var pt: TPoint; begin if not GetCursorPos(pt) then Exit; InfoPic.Bitmap.LoadFromFile(PicFilePath); try with PicForm do begin SetBounds(ScaleX(pt.x + 50), ScaleY(pt.y - InfoPic.Height), InfoPic.Width, InfoPic.Height); Show; end; finally SetFocus(WizardForm.Handle); end; end; procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea); var UndefPic: String; begin if Index = -1 then Exit; if Index = LastIndex then Exit; try case TNewCheckListBox(Sender).ItemCaption[Index] of 'Half-Life 2': UndefPic := '404_preview.bmp'; 'Half-Life 2 Episode One': UndefPic := '404_preview.bmp'; 'Half-Life 2 Episode Two': UndefPic := '404_preview.bmp'; 'Portal': UndefPic := '404_preview.bmp'; else begin LastIndex := UNDEF_INDEX; PicForm.Hide; Exit; end; end; if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic); ShowPicHint(TempPath + UndefPic); finally LastIndex := Index; end; end; procedure CompOnMouseLeave(Sender: TObject); begin PicForm.Hide; LastIndex := -1; end; procedure InitInfo(); begin WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove; WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave; TempPath := AddBackslash(ExpandConstant('{tmp}')); LastIndex := UNDEF_INDEX; PicForm := TForm.Create(WizardForm) with PicForm do begin BorderStyle := bsNone; FormStyle := fsStayOnTop; InfoPic := TBitmapImage.Create(PicForm) with InfoPic do begin Parent := PicForm; AutoSize := True; end; end; SetWindowLong(PicForm.Handle, GWL_EXSTYLE, GetWindowLong(PicForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED); SetLayeredWindowAttributes(PicForm.Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA); end; procedure InitializeWizard(); begin InitInfo(); end; Вопросы: 1) Как пофиксить утечку памяти в данном скрипте? Поясняю: При быстром перемещении курсора между компонентами (к которым привязана картинка) увеличивается нагрузка на проц. 2) Как убрать мерцание (я так полагаю он автообновляется при каждом выборе компонента). images.rar