[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source : IsPicture2.dll; Flags : dontcopy;
Source: fon.bmp; Flags: dontcopy
[ code]
//----------------------------------------------------------------------------------\\
const // жирность шрифта
FW_DONTCARE = 0;
FW_THIN = 100;
FW_ULTRALIGHT = 200;
FW_LIGHT = 300;
FW_NORMAL = 400;
FW_MEDIUM = 500;
FW_DEMIBOLD = 600;
FW_BOLD = 700;
FW_ULTRABOLD = 800;
FW_BLACK = 900;
procedure IsPicInit(Handle : HWND);
external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
// начало работы
procedure IsPicAddImg(fName : AnsiString);
external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
// изображение на заднем фоне
procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer);
external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
// видео на заднем фоне
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
// подмена шрифта для борьбы с артефактами сглаживания
// height - Font.Height
// Weight - жирность
// Italic - наклонность
procedure IsPicStopVideo;
external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
// остановка воспроизведения видео - после этой команды
// видео будет перемотано на начало и поставлено на паузу
procedure IsPicPauseVideo(play : Boolean);
external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
// пауза видео
// play -
// если значение True, то продолжаем воспроизводить
// если значение False, то ставим на паузу
procedure IsPicSetVolume(volume : Integer);
external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
// громкость видео от -10000 до 0.
// -10000 - минимальное значение
// 0 - максимальное значение
procedure IsPicDeInit;
external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
// не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp');
with WizardForm do
begin
WizardBitmapImage.Free;
WizardBitmapImage2.Free;
//----------------------------------------------------------------------------------\\
// подменяем шрифты
Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
//----------------------------------------------------------------------------------\\
// цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
Color := $000008;
WelcomePage.Color := $000008;
InnerPage.Color := $000008;
FinishedPage.Color := $000008;
MainPanel.Color := $000008;
DirEdit.Color := $000008;
ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
Font.Color := clYellow;
// запускам
IsPicInit(Handle);
end;
//----------------------------------------------------------------------------------\\
// добавляем изображение на задний фон
IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
//----------------------------------------------------------------------------------\\
end;
procedure DeinitializeSetup();
begin
// завершаем работу
IsPicDeInit;
end;
зависит от скина, были проблемы, которые я так и не смог победить. например, когда цвет в скине задается картинкой - высока вероятность отсутствия этой самой дружбы. пример - скин Tiger. на нем помнится были косяки довольно неприятные.Shift85, да.
Хммм...:o (кнопок невидно из-за измененного размера формы, т.к. по умолчанию фокус на nextbutton я перелистывал все страницы и проверял завершение работы. при использовании procedure LoadSkin на selectdirpage при использовании крестика для закрытия установщик закрывался аварийно. при использование скрипта ниже проблем не обнаружено. скрины только welcomepage)например, когда цвет в скине задается картинкой - высока вероятность отсутствия этой самой дружбы
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: ISSkinExU.dll; DestDir: {app}; Flags: dontcopy
Source: Skin.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source : IsPicture2.dll; Flags : dontcopy;
Source: fon.bmp; Flags: dontcopy
[ code]
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
var DLLHandle:integer;
//----------------------------------------------------------------------------------\\
const // жирность шрифта
FW_DONTCARE = 0;
FW_THIN = 100;
FW_ULTRALIGHT = 200;
FW_LIGHT = 300;
FW_NORMAL = 400;
FW_MEDIUM = 500;
FW_DEMIBOLD = 600;
FW_BOLD = 700;
FW_ULTRABOLD = 800;
FW_BLACK = 900;
procedure IsPicInit(Handle : HWND);
external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
// начало работы
procedure IsPicAddImg(fName : AnsiString);
external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
// изображение на заднем фоне
procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer);
external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
// видео на заднем фоне
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
// подмена шрифта для борьбы с артефактами сглаживания
// height - Font.Height
// Weight - жирность
// Italic - наклонность
procedure IsPicStopVideo;
external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
// остановка воспроизведения видео - после этой команды
// видео будет перемотано на начало и поставлено на паузу
procedure IsPicPauseVideo(play : Boolean);
external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
// пауза видео
// play -
// если значение True, то продолжаем воспроизводить
// если значение False, то ставим на паузу
procedure IsPicSetVolume(volume : Integer);
external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
// громкость видео от -10000 до 0.
// -10000 - минимальное значение
// 0 - максимальное значение
procedure IsPicDeInit;
external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
// не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp');
with WizardForm do
begin
Width:= ScaleX(504);
Height:= ScaleY(341);
WizardBitmapImage.Free;
WizardBitmapImage2.Free;
//----------------------------------------------------------------------------------\\
// подменяем шрифты
Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
//----------------------------------------------------------------------------------\\
// цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
Color := $000008;
WelcomePage.Color := $000008;
InnerPage.Color := $000008;
FinishedPage.Color := $000008;
MainPanel.Color := $000008;
DirEdit.Color := $000008;
ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
Font.Color := clYellow;
// запускам
IsPicInit(Handle);
end;
//----------------------------------------------------------------------------------\\
// добавляем изображение на задний фон
IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
//----------------------------------------------------------------------------------\\
end;
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
s1,s2: String;
begin
result:=True;
try
ExtractTemporaryFile('isskinexU.dll');
DLLHandle:=LoadDLL(ExpandConstant('{tmp}\isskinexU.dll') , ErrorCode);
if (DLLHandle > 0) then
begin
ExtractTemporaryFile('Skin.cjstyles');
s1:=ExpandConstant('{tmp}\Skin.cjstyles');
s2:='';
if not CallDLLProc(DLLHandle,'LoadSkin',CastStringToInteger(s1), CastStringToInteger(s2), ErrorCode) then
begin
// Failed :(
end;
end else
begin
// Failed :(
end;
except
end;
end;
procedure DeinitializeSetup();
var
ErrorCode: Integer;
begin
try
if DLLHandle > 0 then
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
CallDLLProc(DLLHandle,'UnloadSkin',0, 0,ErrorCode);
FreeDLL(DLLHandle);
DeleteFile(ExpandConstant('{tmp}\ISSkinExU.dll'));
end;
except
end;
IsPicDeInit;
// завершаем работу
end;
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: ISSkinExU.dll; DestDir: {app}; Flags: dontcopy
Source: Skin.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source : IsPicture2.dll; Flags : dontcopy;
Source: fon.bmp; Flags: dontcopy
[ code]
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
var DLLHandle:integer;
//----------------------------------------------------------------------------------\\
const // жирность шрифта
FW_DONTCARE = 0;
FW_THIN = 100;
FW_ULTRALIGHT = 200;
FW_LIGHT = 300;
FW_NORMAL = 400;
FW_MEDIUM = 500;
FW_DEMIBOLD = 600;
FW_BOLD = 700;
FW_ULTRABOLD = 800;
FW_BLACK = 900;
procedure IsPicInit(Handle : HWND);
external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
// начало работы
procedure IsPicAddImg(fName : AnsiString);
external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
// изображение на заднем фоне
procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer);
external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
// видео на заднем фоне
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
// подмена шрифта для борьбы с артефактами сглаживания
// height - Font.Height
// Weight - жирность
// Italic - наклонность
procedure IsPicStopVideo;
external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
// остановка воспроизведения видео - после этой команды
// видео будет перемотано на начало и поставлено на паузу
procedure IsPicPauseVideo(play : Boolean);
external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
// пауза видео
// play -
// если значение True, то продолжаем воспроизводить
// если значение False, то ставим на паузу
procedure IsPicSetVolume(volume : Integer);
external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
// громкость видео от -10000 до 0.
// -10000 - минимальное значение
// 0 - максимальное значение
procedure IsPicDeInit;
external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
// не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\
var
ResizeButton: TButton;
PageResized: Boolean;
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
MainForm.Width:=ScaleX(395);
MainForm.Height:=ScaleY(142);
MainForm.Left:=GetSystemMetrics(16)-ScaleX(420);
MainForm.Top:=GetSystemMetrics(17)-ScaleX(150);
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(220);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80)
ResizeButton.Caption:= 'Normalize';
PageResized:= True;
end;
procedure ResumeInstallPage();
begin
MainForm.Center;
WizardForm.Center;
MainForm.Width:=ScaleX(503);
MainForm.Height:=ScaleY(388);
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Minimize';
PageResized:= False;
end;
procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp');
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick
ResizeButton.Caption:= 'Minimize';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
with WizardForm do
begin
Width:= ScaleX(503);
Height:= ScaleY(388);
WizardBitmapImage.Free;
WizardBitmapImage2.Free;
//----------------------------------------------------------------------------------\\
// подменяем шрифты
Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
//----------------------------------------------------------------------------------\\
// цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
Color := $000008;
WelcomePage.Color := $000008;
InnerPage.Color := $000008;
FinishedPage.Color := $000008;
MainPanel.Color := $000008;
DirEdit.Color := $000008;
ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
Font.Color := clYellow;
// запускам
IsPicInit(Handle);
end;
//----------------------------------------------------------------------------------\\
// добавляем изображение на задний фон
IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
//----------------------------------------------------------------------------------\\
end;
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
s1,s2: String;
begin
result:=True;
try
ExtractTemporaryFile('isskinexU.dll');
DLLHandle:=LoadDLL(ExpandConstant('{tmp}\isskinexU.dll') , ErrorCode);
if (DLLHandle > 0) then
begin
ExtractTemporaryFile('Skin.cjstyles');
s1:=ExpandConstant('{tmp}\Skin.cjstyles');
s2:='';
if not CallDLLProc(DLLHandle,'LoadSkin',CastStringToInteger(s1), CastStringToInteger(s2), ErrorCode) then
begin
// Failed :(
end;
end else
begin
// Failed :(
end;
except
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
ResizeButton.Hide;
if CurPageID = wpInstalling then ResizeButton.Show;
if CurPageID = wpFinished then begin
if PageResized then
ResumeInstallPage();
end;
end;
procedure DeinitializeSetup();
var
ErrorCode: Integer;
begin
try
if DLLHandle > 0 then
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
CallDLLProc(DLLHandle,'UnloadSkin',0, 0,ErrorCode);
FreeDLL(DLLHandle);
DeleteFile(ExpandConstant('{tmp}\ISSkinExU.dll'));
end;
except
end;
IsPicDeInit;
// завершаем работу
end;
Попробуй в самом начале initializewizard эту строчку дать. До того, как используется хоть какая-либо функция библиотеки.Обнаружил косяк в библиотеке при добавлении Position:=poScreenCenter;
Попрежнему также несработало...Попробуй в самом начале initializewizard эту строчку дать. До того, как используется хоть какая-либо функция библиотеки.
Поподробней можно где че менятьЯ там заменил poscreencenter на wizardform.center (передняя форма) и mainform.center (задняя форма).
var
BitmapImage: TBitmapImage;
procedure InitializeWizard();
begin
BitmapImage := TBitmapImage.Create(MainForm);
with BitmapImage do
begin
Parent := MainForm;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
SetBounds(ScaleX(72), ScaleY(313), ScaleX(105), ScaleY(105));
end;
end;
font.name := 'имя шрифта';
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
// подмена шрифта для борьбы с артефактами сглаживания
// height - Font.Height
// Weight - жирность
// Italic - наклонность
шрифт элемента, на котором заменяешь шрифт:
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(30), ScaleY(165), ScaleX(540), ScaleY(50));
WordWrap:=True;
//Alignment := taCenter;
//Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 14;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:WelcomeLabel1}');
Parent:=WizardForm;
end;
В смысле переключение шрифта не работаетэто вообще-то жирный шрифт