Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
Ivan_009
28-01-2014, 19:54
Возможно ли вот сюда загнать картинку которая в фоне самого инсталла...
Gnom_aka_Lexander
28-01-2014, 20:00
Ivan_009, возможно. в расширенной версии есть для этого несколько функций. в папке с инно есть папка примеров, называется Examples, тебе нужен пример с названием Example_NewCheckListBox, там несколько разных фишек, тебе нужна только функция LoadBGBmpFromFile. Только вместо кастомного CheckListBox вписываешь свой - компонентлист или тасклист - чего там хочешь картинкой занавесить.
Ivan_009,
[Components]
Name: a; Description: A
[Files]
Source: "BGImage.bmp"; Flags: dontcopy solidbreak
[Code]
var
btnImgFile, BGImgFile: String;
procedure InitializeWizard();
begin
ExtractTemporaryFile('BGImage.bmp');
BGImgFile := ExpandConstant('{tmp}\BGImage.bmp');
WizardForm.ComponentsList.LoadBGBmpFromFile(BGImgFile, WizardForm.ComponentsList.Left, WizardForm.ComponentsList.Top);
end;
Дальше Gnom_aka_Lexander если что поправит.
Парни, хорош сраться! Пардонте за оффтоп.
nik1967, Да всё нормально.
А это Дальше Gnom_aka_Lexander если что поправит. »
из вежливости написал. Может я где ошибку допустил.
Ivan_009
28-01-2014, 21:32
Nordek, Да и кстати как убрать замыленность текста потом...
Gnom_aka_Lexander
28-01-2014, 21:47
Ivan_009, WizardForm.ComponentsList.Font.Name := 'MS Sans Serif'; ты будешь смеяться, но так. Ну или отключить сглаживание ClearTipe для шрифта компонент-листа, чтоб не менять шрифт:
type
HFONT = LongWord;
function CreateFont(nHeight, nWidth, nEscapement, nOrientaion, fnWeight: Integer;
fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision,
fdwClipPrecision, fdwQuality, fdwPitchAndFamily: DWORD; lpszFace: PAnsiChar): HFONT; external 'CreateFontA@gdi32.dll stdcall delayload';
procedure NewFont(Font : TFont);
begin
Font.Handle := CreateFont(Font.Height, 0, 0, 0, 400, 0, 0, 0,0, 0, 0,0, 3, Font.Name); // предпоследний параметр поиграться от 0 до 4-х, не помню, чего там нужно ставить
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('BGImage.bmp');
BGImgFile := ExpandConstant('{tmp}\BGImage.bmp');
with WizardForm.ComponentsList do
begin
LoadBGBmpFromFile(BGImgFile, WizardForm.ComponentsList.Left, WizardForm.ComponentsList.Top);
NewFont(font);
end;
end;
Ivan_009
28-01-2014, 23:18
Gnom_aka_Lexander, А если я хочу картинку не на ComponentsList а на всю форму чтобы было типа так.
То мне надо ее на BitmapImage ложить или на WizardForm...
Gnom_aka_Lexander
29-01-2014, 07:34
Ivan_009, не так. тебе нужно положить BitmapImage на WizardForm и все, что лежит между WizardForm и ComponentsList
Я делал так вставку картинки на все страницы, мож кому пригодится.
Ivan_009
29-01-2014, 07:50
Gnom_aka_Lexander, Так:
BGBitmapImage := TBitmapImage.Create(WizardForm);
BGBitmapImage.Parent := WizardForm;
BGBitmapImage.Align := alClient;
BGBitmapImage.SendToBack;
BGBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BGImage.bmp'))
Gnom_aka_Lexander
29-01-2014, 08:11
Ivan_009, примерно. это если компонент-лист лежит у тебя прямо на WizardForm. тогда отдельно распаковывать файл изображения для компонентлиста не обязательно, можно взять битмап изображения с BGBitmapImage и вместо LoadBGBmpFromFile использовать LoadBGBmpFromBitmap:
WizardForm.ComponentsList.LoadBGBmpFromBitmap(BGBitmapImage.Bitmap, WizardForm.ComponentsList.Left, WizardForm.ComponentsList.Top);
Ivan_009
29-01-2014, 12:25
Gnom_aka_Lexander, Если я правильно понял то как то так:
var
BGBitmapImage: TBitmapImage;
procedure InitializeWizard();
begin
ExtractTemporaryFile('BGImage.bmp');
BGBitmapImage := TBitmapImage.Create(WizardForm);
BGBitmapImage.Parent := WizardForm;
BGBitmapImage.Align := alClient;
BGBitmapImage.SendToBack;
BGBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BGImage.bmp'))
with WizardForm.ComponentsList do
begin
//BorderStyle := bsNone;
Parent := WizardForm;
SetBounds(ScaleX(110), ScaleY(180), ScaleX(350), ScaleY(120));
Font.Color:=$FFFFFF;
Font.Name:='MS Sans Serif';
Font.Size:= 9;
TreeViewStyle := True;
WizardForm.ComponentsList.LoadBGBmpFromBitmap(BGBitmapImage.Bitmap, WizardForm.ComponentsList.Left, WizardForm.ComponentsList.Top);
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.ComponentsList.Hide;
BGBitmapImage.Hide;
case CurPageID of
wpSelectComponents:
begin
WizardForm.ComponentsList.Show;
BGBitmapImage.Show;
end;
end;
end;
Ну или отключить сглаживание ClearTipe для шрифта компонент-листа »
А я то всю голову ломал, что за замыленность. ClearType по умолчанию то стоит, и ошибкой не посчитал.
ты будешь смеяться »Ничего смешного, MS Sans Serif - волшебный шрифт.
Далее не относится к теме, но относится к шрифту:
Gnom_aka_Lexander, Ты возможно тоже будешь удивлён, но в "C:\Program Files\Inno Setup 5\ISLanguages"
в файле "Russian_ansi.lng" (у меня Tahoma в нём по умолчанию) если заменить DialogFontName=Tahoma на DialogFontName=MS Sans Serif то в Inno Setup Compiler будут отображаться русские буквы вместо непонятных иероглифов.
Ivan_009, И как, нормально компилится?
В WizardForm.ComponentsList под TreeViewStyle := True; лишний end; убери.
Gnom_aka_Lexander
29-01-2014, 14:43
BGBitmapImage.Show; »
картинка только на странице компонентов, чтоли?
А я то всю голову ломал, что за замыленность. »
дело не в замыленности как таковой, там именно из-за сглаживания и именно Cleartype целая куча артефактных явлений - утолщение шрифта при каждом клике, до полного закрашивания и еще какие-то глюки вроде были. и я помню всю голову сломал и уж никак на шрифт не думал. Sans Serif - потому что он старый и не имеет механизма сглаживания Cleartype. скорей всего еще какие-то можно использовать из старых в этой ситуации, я не искал, предпочитаю Tahoma и отключение Cleartype там, где он вызывает глюки.русские буквы вместо непонятных иероглифов. »
для меня неактуально. я так и не смог поймать такой смешной и где-то даже интересный глюк. ни разу.
Ivan_009
29-01-2014, 15:01
картинка только на странице компонентов, чтоли? »
Gnom_aka_Lexander, У меня на остальных через Ботву наложена. Или может как нибудь подругому надо..
Как обьеденить ComponentsList и TasksList в одну страницу...
Как обьеденить ComponentsList и TasksList в одну страницу »Это вопрос?
[Code]
procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
Parent := WizardForm.SelectTasksPage;
Width := ScaleX(193);
Top := ScaleY(37);
Height := ScaleY(168);
end;
with WizardForm.ComponentsDiskSpaceLabel do
begin
Parent := WizardForm.SelectTasksPage;
end;
with WizardForm.TypesCombo do
begin
Visible := False;
end;
with WizardForm.TasksList do
begin
Left := ScaleX(208);
Width := ScaleX(209);
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if(PageID =wpSelectComponents) then Result:= True;
end;
[Code]
procedure InitializeWizard();
begin
WizardForm.ComponentsList.Parent := WizardForm.SelectTasksPage;
WizardForm.ComponentsList.Width := ScaleX(193);
WizardForm.ComponentsList.Top := ScaleY(37);
WizardForm.ComponentsList.Height := ScaleY(168);
WizardForm.ComponentsDiskSpaceLabel.Parent := WizardForm.SelectTasksPage;
WizardForm.TypesCombo.Visible := False;
WizardForm.TasksList.Left := ScaleX(208);
WizardForm.TasksList.Width := ScaleX(209);
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if(PageID =wpSelectComponents) then Result:= True;
end;
Выбирай как больше нравится.
Ivan_009
29-01-2014, 21:23
Nordek, У меня все на WizardForm лежит. Эти примеры не работают... :(
У меня все на WizardForm лежит. »
Не понял.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: a; Description: A
[Tasks]
Name: a; Description: A
[Code]
procedure RedesignWizardForm;
begin
WizardForm.ComponentsList.Parent := WizardForm.SelectTasksPage;
WizardForm.ComponentsList.Width := ScaleX(193);
WizardForm.ComponentsList.Top := ScaleY(37);
WizardForm.ComponentsList.Height := ScaleY(168);
WizardForm.ComponentsDiskSpaceLabel.Parent := WizardForm.SelectTasksPage;
WizardForm.TypesCombo.Visible := False;
WizardForm.TasksList.Left := ScaleX(208);
WizardForm.TasksList.Width := ScaleX(209);
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if(PageID =wpSelectComponents) then Result:= True;
end;
У меня все на WizardForm лежит. Эти примеры не работают... »
Так измените родителя на WizardForm, и в CurPageChanged определите скрытие\показ элементов.
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
[Tasks]
Name: task; Description: task;
[Components]
Name: component; Description: component; Types: full;
[Code]
procedure InitializeWizard();
begin
WizardForm.InnerNotebook.Hide;
WizardForm.TypesCombo.Hide;
WizardForm.ComponentsList.Parent := WizardForm;
WizardForm.ComponentsList.SetBounds(ScaleX(37), ScaleY(102), ScaleX(200), ScaleY(170));
WizardForm.ComponentsDiskSpaceLabel.Hide;
WizardForm.TasksList.Parent := WizardForm;
WizardForm.TasksList.SetBounds(ScaleX(WizardForm.ComponentsList.Left + 220), ScaleY(102), ScaleX(200), ScaleY(170));
WizardForm.TasksList.BorderStyle := bsSingle;
WizardForm.TasksList.Color := $FFFFFF;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
7: Result := True;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.ComponentsList.Hide;
WizardForm.TasksList.Hide;
case CurPageID of
9:
begin
WizardForm.ComponentsList.Show;
WizardForm.TasksList.Show;
end;
end;
end;
Ivan_009, Если вешать на SelectComponentsPage, то задач не будет пока не перейдёшь на страницу самих задач. А когда возвратишься к компонентам то задачи появятся.
Если так же секции [Components] не будет, то и вовсе будет скрыто - в этом случае можно было бы повесить на SelectTasksPage. Но опять же если секции [Tasks] не будет, то и компоненты будут скрыты.
Можно повесить на новую страницу:
[Code]
var
PageComTasks: TWizardPage;
procedure InitializeWizard();
begin
PageComTasks := CreateCustomPage(wpSelectTasks, 'Caption', 'Description');
WizardForm.ComponentsList.Parent := PageComTasks.Surface;
WizardForm.ComponentsList.Width := ScaleX(193);
WizardForm.ComponentsList.Top := ScaleY(43);
WizardForm.ComponentsList.Height := ScaleY(168);
WizardForm.ComponentsDiskSpaceLabel.Parent := PageComTasks.Surface;
WizardForm.ComponentsDiskSpaceLabel.AutoSize := True;
WizardForm.TasksList.Parent := PageComTasks.Surface;
WizardForm.TasksList.Left := ScaleX(208);
WizardForm.TasksList.Width := ScaleX(209);
WizardForm.TasksList.Top := ScaleY(43);
WizardForm.SelectComponentsLabel.Parent := PageComTasks.Surface;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if(PageID =wpSelectComponents) or(PageID =wpSelectTasks) then Result:= True;
end;
но и тут не без нюансов - если секций [Components] и [Tasks] не будет, то будет пустая страница.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.