Автор: Raf_SE
Дата сообщения: 01.02.2008 17:56
Меня интересует один вопрос, если слайд шоу растягивается на весь экран, слайды размера 800х600, то как это все будет выгладить на широкоэкранных мониторах? Если страшно (с искажением), тогда другой вопрос, как этот код нужно модернизировать чтобы слайды не растягивались а были по центру?
[more]
[Setup]
BackColor=$000000
[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
s:string;
Width, Height:Integer;
function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
begin
WizardForm.Position:=poScreenCenter
Width:=GetSystemMetrics(0)
Height:=GetSystemMetrics(1)
MainForm.BORDERSTYLE:=bsNone
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=Width
MainForm.Height:=Height
ExtractTemporaryFile('BackImage.bmp')
s:=ExpandConstant('{tmp}')+'\BackImage.bmp '
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(s)
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
MainForm.Visible:=True
ExtractTemporaryFile('BackImage.bmp')
ExtractTemporaryFile('bilboard0.bmp')
ExtractTemporaryFile('bilboard1.bmp')
ExtractTemporaryFile('bilboard2.bmp')
ExtractTemporaryFile('bilboard3.bmp')
ExtractTemporaryFile('bilboard4.bmp')
ExtractTemporaryFile('bilboard5.bmp')
ExtractTemporaryFile('bilboard6.bmp')
ExtractTemporaryFile('bilboard7.bmp')
ExtractTemporaryFile('bilboard8.bmp')
end;
function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do begin
Result:=(Position-Min)/((Max - Min)/100)
begin
WizardForm.CancelButton.BringToFront;
end
end
end;
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
percent:=PercentProgress
with SlideImage do begin
if ((percent>0) and (percent<10) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard0.bmp')
Tag:=1
end else
if ((percent>11) and (percent<22) and (Tag<>2)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard1.bmp')
Tag:=2
end else
if ((percent>23) and (percent<33) and (Tag<>3)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard2.bmp')
Tag:=3
end else
if ((percent>34) and (percent<44) and (Tag<>4)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard3.bmp')
Tag:=4
end else
if ((percent>45) and (percent<55) and (Tag<>5)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard4.bmp')
Tag:=5
end else
if ((percent>56) and (percent<66) and (Tag<>6)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard5.bmp')
Tag:=6
end else
if ((percent>67) and (percent<77) and (Tag<>7)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard6.bmp')
Tag:=7
end else
if ((percent>78) and (percent<88) and (Tag<>8)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard7.bmp')
Tag:=8
end else
if ((percent>89) and (percent<100) and (Tag<>9)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard8.bmp')
Tag:=9
end
end
end;
procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
Width, Height: Integer;
begin
If CurPageID=wpInstalling
then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)
SlideImage:=TBitmapImage.Create(MainForm)
with SlideImage do begin
Stretch:=True
Align:=alClient
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard0.bmp')
Parent:=MainForm
Tag:=1
end
end
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(0);
WizardForm.Top:=ScaleY(0);
WizardForm.Left:=ScaleX(MainForm.Left+20);
WizardForm.Top:=ScaleY(MainForm.Height-170);
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(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;
if CurPageID=wpFinished
then
begin
SlideImage.Hide
end
end;
procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
If DirExists(ExpandConstant('{app}')+'')
then
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end
IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end
IDCANCEL:
begin
end;
end;
end;
end;
end;
function NextButtonClick(CurPage: Integer): Boolean;
var
s, s2:string;
begin
Result:=True;
If CurPage=wpSelectDir
then
begin
s2:=ExpandConstant('{app}')+'';
If DirExists(s2)
then
begin
s:='Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end;
end;
end;
[/more]