Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 [102] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Ivan_009
28-01-2014, 19:54
Возможно ли вот сюда загнать картинку которая в фоне самого инсталла...

Gnom_aka_Lexander
28-01-2014, 20:00
Ivan_009, возможно. в расширенной версии есть для этого несколько функций. в папке с инно есть папка примеров, называется Examples, тебе нужен пример с названием Example_NewCheckListBox, там несколько разных фишек, тебе нужна только функция LoadBGBmpFromFile. Только вместо кастомного CheckListBox вписываешь свой - компонентлист или тасклист - чего там хочешь картинкой занавесить.

Nordek
28-01-2014, 21:02
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
28-01-2014, 21:18
Парни, хорош сраться! Пардонте за оффтоп.

Nordek
28-01-2014, 21:25
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;

Nordek
29-01-2014, 13:31
Ну или отключить сглаживание 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 в одну страницу...

Nordek
29-01-2014, 20:58
Как обьеденить 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 лежит. Эти примеры не работают... :(

Nordek
29-01-2014, 21:55
У меня все на 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;

saurn
29-01-2014, 22:12
У меня все на 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;

Nordek
29-01-2014, 22:35
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