Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
Dark_Delphin, если обычный классический скин Windows, так в SkinBuilder-е просто создаешь новый (кнопка "New"), и сохраняешь скин.
Dark_Delphin
16-03-2013, 02:44
alert30, я делал так, но почемуто не отображается он.
Dark_Delphin, попробуйте ради эксперимента скин Office 2007, если опять не вышло, значит проблема с DLL-ками скина.
Gnom_aka_Lexander
16-03-2013, 07:30
Dark_Delphin, в шапке есть пример задания цвета прогрессбару. оттуда тебе нужна функция SetWindowTheme. Вот ее у себя декларируешь и применяешь к хендлам элементов, которые нужно отобразить в классическом виде. Тоесть, главное окно и кнопки - это в первую очередь. для модальных окошек (обзоры всякие) я писал длл-ку, ибо инно слишком медленно работает - пока там интерпретатор поймет чего от него хотят, в итоге окошки моргали. если найду, где валяется у меня - выложу попозже.
neorom, в шапке есть куча справок, или почитайте каждую страницу.
в шапке есть куча справок, или почитайте каждую страницу. »
Мне только надо знать назву похожого скрипта
Dark_Delphin
16-03-2013, 13:28
neorom, NFS Undecover
Johny777
16-03-2013, 13:30
Dark_Delphin, держи процедуру установки стиля всем окнам на форме на основе SetWindowTheme(...), чтоб много букв не печатать
#ifdef UNICODE
function SetWindowTheme(hwnd: HWND; pszSubAppName, pszSubIdList: PAnsiChar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall';
#else
function SetWindowTheme(hwnd: HWND; pszSubAppName, pszSubIdList: PChar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall';
#endif
procedure SetClassicTheme(UndefCtrl: TWinControl);
var
i: Integer;
begin
SetWindowTheme(TWinControl(UndefCtrl).Handle, #32#32, #32#32);
for i := 0 to UndefCtrl.ControlCount-1 do if UndefCtrl.Controls[i] is TWinControl then if TWinControl(UndefCtrl.Controls[i]).ControlCount-1 > 0 then SetClassicTheme(TWinControl(UndefCtrl.Controls[i])) else SetWindowTheme(TWinControl(UndefCtrl.Controls[i]).Handle, #32#32, #32#32);
end;
procedure InitializeWizard();
begin
SetClassicTheme(WizardForm);
end;
Gnom_aka_Lexander, Спасибо, хорошая функция!
Dark_Delphin
16-03-2013, 14:05
Johny777, спасибо большое.
Готово.
Gnom_aka_Lexander
16-03-2013, 15:19
Спасибо, хорошая функция! »
Это не мне спасибо. Это Microsoft-у спасибо.
Как мне создать только скрипт для зтого фото http://s3.share.te.ua/496977/99999999.jpg (http://s3.share.te.ua/b496977/99999999.jpg)
Так же нужен скрипт под Fenixx http://s3.share.te.ua/496994/8c604595526a0690a53edfd5b225a29e.png (http://s3.share.te.ua/b496994/8c604595526a0690a53edfd5b225a29e.png)http://s3.share.te.ua/496995/bedfc88b350d.jpg (http://s3.share.te.ua/b496995/bedfc88b350d.jpg)http://s3.share.te.ua/496965/00.JPG (http://s3.share.te.ua/b496965/00.JPG)
Как мне создать только скрипт для зтого »
Это чистый ISDone!
Так же нужен скрипт под Fenixx »
Во истину, что дерьмовей, то людям нравится больше! Это вообще трудно назвать скрипт(ом(ами)). То что ты видишь - это всего лишь картинка (ну там FotoShop, или ещё что) подставь к картинке прогрессбар, кнопки и всё такое - вот тебе и скрипт, как его там.
neorom, в конце концов прочитали бы справку какую-то, а не тупо сказать "мне нужен готовый скрипт, как вот это"...
Это вообще трудно назвать скрипт(ом(ами)). То что ты видишь - это всего лишь картинка (ну там FotoShop, или ещё что) подставь к картинке прогрессбар, кнопки и всё такое - вот тебе и скрипт, как его там. »
Єсли всь так просто, то почеме не может никто єделать єтат скрип. Да, на славах у вас всех всьо очень легко, но на деле нечево не видно.
P.S. Да, я пересматрел форум и понял что скрипт от Fenixx всем очень нравиться, и я не нашол ни одного человека каторий зделать єтот скрипт, только на словах все хвастаются что он очень прост !!!
в конце концов прочитали бы справку какую-то, а не тупо сказать "мне нужен готовый скрипт, как вот это"... »
Да я, не профи в созданию скриптов, я просто новочьок. Но и профи просто переводят стрелки заместь того чтоб просто навести пример или дасть злилку на похожий ответ .
Это чистый ISDone! »
Но где найти єтот скрипт (чтоби процес бар отображался именно так, как на фото) ?
neorom
Єсли всь так просто, то почеме не может никто єделать єтат скрип. Да, на славах у вас всех всьо очень легко, но на деле нечево не видно. »
Вам никто не хочет помогать потому, что Вы задаёте вопросы на уже давно очевидные вещи! И если провести денёк на этом форуме и почитать даже ту шапку, я уверен, половина вопросов сразу же отпадут.
И когда Вы изучите Inno и поймёте что к чему - Вы будете говорить точно так же, как сейчас отвечают Вам.
Чтобы развеять Ваше негативное отношение к людям находящихся на этом форуме, якобы всё только на словах, а на деле... Вот Вам пример.
[Setup]
AppName=Example
AppVerName=Example
DefaultDirName={pf}\Example
OutputDir=.
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl";
[Messages]
SetupWindowTitle=FORUM OSZONE.NET EXAMPLE
[Files]
Source: "ISSkin.dll"; DestDir: "{tmp}"; Flags: dontcopy;
Source: "Tiger.cjstyles"; DestDir: "{tmp}"; Flags: dontcopy;
Source: "botva2.dll"; DestDir: "{tmp}"; Flags: dontcopy;
Source: "1.jpg"; DestDir: "{tmp}"; Flags: dontcopy;
Source: "2.jpg"; DestDir: "{tmp}"; Flags: dontcopy;
[ Code]
var
WelcomeLabel1, WelcomeLabel2, SelectDirLabel, SelectDirBrowseLabel: TLabel;
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';
function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@files:botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@files:botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@files:botva2.dll stdcall delayload';
function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\ISSkin.dll')) then ExtractTemporaryFile('ISSkin.dll');
if not FileExists(ExpandConstant('{tmp}\Tiger.cjstyles')) then ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result:= True;
end;
procedure InitializeWizard();
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\1.jpg')) then ExtractTemporaryFile('1.jpg');
if not FileExists(ExpandConstant('{tmp}\2.jpg')) then ExtractTemporaryFile('2.jpg');
WizardForm.ClientWidth:= ScaleX(1000);
WizardForm.ClientHeight:= ScaleY(600);
WizardForm.Width:= ScaleX(1000);
WizardForm.Height:= ScaleY(600);
WizardForm.Position:= poScreenCenter;
with WizardForm do
begin
InnerNotebook.Left:= ScaleX(0);
InnerNotebook.Top:= ScaleY(0);
InnerNotebook.Width:= WizardForm.ClientWidth;
InnerNotebook.Height:= WizardForm.ClientHeight;
OuterNotebook.Left:= ScaleX(0);
OuterNotebook.Top:= ScaleY(0);
OuterNotebook.Width:= WizardForm.ClientWidth;
OuterNotebook.Height:= WizardForm.ClientHeight;
WizardBitmapImage.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
WizardSmallBitmapImage.Hide;
MainPanel.Hide;
SelectDirLabel.Hide;
SelectDirBrowseLabel.Hide;
SelectDirBitmapImage.Hide;
DiskSpaceLabel.Hide;
end;
with WizardForm.BackButton do
begin
Left:= ScaleX(700);
Top:= ScaleY(540);
BringToFront;
end;
with WizardForm.NextButton do
begin
Left:= ScaleX(800);
Top:= ScaleY(540);
BringToFront;
end;
with WizardForm.CancelButton do
begin
Left:= ScaleX(900);
Top:= ScaleY(540);
BringToFront;
end;
WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(50);
Top:= ScaleY(50);
Transparent:= True;
Font.Color:= $0006FF;
Font.Name:= 'Arial';
Font.Size:= 14;
Font.Style:= [fsBold];
Caption:= WizardForm.WelcomeLabel1.Caption;
Parent:= WizardForm.WelcomePage;
end;
WelcomeLabel2:= TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Left:= ScaleX(50);
Top:= ScaleY(400);
Transparent:= True;
Font.Color:= $00FFFF;
Font.Name:= 'Arial';
Font.Size:= 10;
Font.Style:= [fsBold];
Caption:= WizardForm.WelcomeLabel2.Caption;
Parent:= WizardForm.WelcomePage;
end;
SelectDirLabel:= TLabel.Create(WizardForm);
with SelectDirLabel do
begin
Left:= ScaleX(50);
Top:= ScaleY(50);
Transparent:= True;
Font.Color:= $0006FF;
Font.Name:= 'Arial';
Font.Size:= 14;
Font.Style:= [fsBold];
Caption:= WizardForm.SelectDirLabel.Caption;
Parent:= WizardForm.SelectDirPage;
end;
SelectDirBrowseLabel:= TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Left:= ScaleX(50);
Top:= ScaleY(400);
Transparent:= True;
Font.Color:= $00FFFF;
Font.Name:= 'Arial';
Font.Size:= 10;
Font.Style:= [fsBold];
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Parent:= WizardForm.SelectDirPage;
end;
with WizardForm.DirBrowseButton do
begin
Left:= ScaleX(600);
Top:= ScaleY(540);
end;
with WizardForm.DirEdit do
begin
Left:= ScaleX(50);
Top:= ScaleY(540);
Width:= ScaleX(500);
end;
ImgLoad(WizardForm.WelcomePage.Handle, ExpandConstant('{tmp}\1.jpg'), ScaleX(0), ScaleY(0), WizardForm.InnerNotebook.Width, WizardForm.InnerNotebook.Height, True, True);
ImgApplyChanges(WizardForm.WelcomePage.Handle);
ImgLoad(WizardForm.SelectDirPage.Handle, ExpandConstant('{tmp}\2.jpg'), ScaleX(0), ScaleY(0), WizardForm.InnerNotebook.Width, WizardForm.InnerNotebook.Height, True, True);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);
end;
procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
gdipShutdown;
end;
Tco 03 Как мне добавить до моєго скрипта вот єти финкции(установка значка и установка по) http://s3.share.te.ua/496995/bedfc88b350d.jpg (http://s3.share.te.ua/b496995/bedfc88b350d.jpg)
И чтоби били коментарии как на фото ( чтоби било 5 рисунков )
Ссилка ==> http://us.ua/1066396/
Как мне добавить до вошого скрипта вот єти финкции(установка значка и установка по) »
Создавать кустомные чекбоксы и лейблы к ним...
Создание кустомного чекбокса.
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[ code]
var
QuickLaunchIcon: TCheckBox;
function MakeQuickLaunchIcon: Boolean;
begin
Result:=QuickLaunchIcon.Checked;
end;
procedure InitializeWizard();
begin
QuickLaunchIcon := TCheckBox.Create(WizardForm);
with QuickLaunchIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Создать значок в Панели быстрого запуска';
Left := ScaleX(0);
// Left := WizardForm.DirEdit.Top + 100;
Top := WizardForm.DirEdit.Top + 117;
Width := ScaleX(300);
Height := ScaleY(15);
TabOrder := 0;
Checked := False;
end;
end;
Johny777
17-03-2013, 15:54
Tco 03, у тебя всё правильно, но рекомендую:
1. писать скобки в заголовке процедуры/функции function MakeQuickLaunchIcon(): Boolean; и при вызове MakeQuickLaunchIcon(); для наглядности
2. писать координаты через метод SetBounds(ScaleX(слева), ScaleY(сверху), ScaleX(ширина), ScaleY(высота)) для краткости кода, а все отдельные координаты с участием цифр через функции ScaleX(), ScaleY() для правильного расположения контролов
3. Checked := False; по дефолту, так что строка не нужна
4. Цитата: "TabOrder — указывает направление перемещения фокуса при нажатии клавиши Tab (от начала к концу или от конца к началу);" Думай нужен ли он тебе.
до кучи советую почитать о методе Create конструктора http://delphi.about.com/od/adptips2005/qt/aowner.htm со входным параметром (это указатель) принадлежности к другому компоненту
например у меня есть процедура создания формы, на ней панели, а панели кучи котролов. При разрушении формы родителем панели что лежала не ней становится WizardForm (тк геморно разрушать, сохранять а потом воссоздовать). Поэтому указатель у меня на пенели nil а указатели на контролах, что лежат на панели - ссылка на панель myPanel (var myPanel: TPanel)
5. Сейчас будет смешно, но у чекбокса нет возможности подстраиваться под размер собственного текста и чтоб не подгонять размер, а в лучае с несколькими языками это много работы используй забавную, но сверх рабочую, быструю и удобную функцию function GetFutureCtrlWidth(const uCaption: String): Integer; Есть правда вин апишная функция которая используется в Autosize лейбла но работать нормально она не хотела, использовал её в первой реализации кастомного чекбокса ( http://forum.oszone.net/post-2043384-1383.html )
короче вот так выглядел бы твой код у меня:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external; Check: MakeQuickLaunchIcon();
[code]
var
QuickLaunchIcon: TCheckBox;
function GetFutureCtrlWidth(const uCaption: String): Integer;
begin
with TLabel.Create(nil) do
try
Caption := uCaption;
Result := Width + 16; // где 16 - размер картинки чекбокса/переключателя
finally
Free;
end;
end;
function MakeQuickLaunchIcon(): Boolean;
begin
Result:=QuickLaunchIcon.Checked;
end;
procedure InitializeWizard();
begin
QuickLaunchIcon := TCheckBox.Create(WizardForm);
with QuickLaunchIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Создать значок в Панели быстрого запуска';
SetBounds(ScaleX(0), ScaleY(WizardForm.DirEdit.Top + 117), ScaleX(GetFutureCtrlWidth(Caption)), ScaleY(16));
end;
end;
Johny777
Ну, а говоришь времени нет, вон какую "поэму" написал :smirk:
Это не мой код - это справка (Inno Faq) с соседнего форума (по крайне мере я её когда-то от туда качал).
А nil не nil спорить не буду, лично я сразу пишу конкретно, где именно и что создать.
Создавать кустомные чекбоксы и лейблы к ним...
Создание кустомного чекбокса. »
Я мало розбераюсь в том. Я в последним сообчтени я дал силку на свой скрип которий надо отретактировать, так чтоби били те функции коториє я там опесал.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.