Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Если это сложно реализовать »
Всё это реализовать не сложно, просто котострафически не хватает времени...
Свободное время появляется только около 11 часов вечера. Делаю попытки, или как это лучше сказать, пытаюсь просмотреть все актуальные темы, но усталость берет вверх и натуральным образом просто отрубаюсь...
P.S.
Так, что не держите зла кому не ответил...
добрый день, подскажите как сделать вот так: http://img57.imageshack.us/i/sshot1w.jpg/ а то сколько не старась у меня буквы "лежат на фоне и рисунка не видно" надеюсь на помощь! заранее спасибо
Скажите плиз каким скриптом можно поменять в инсталлере кнопки назад/далее/обзор ?
GrizzlyMK
12-10-2009, 17:31
grinda,
Вот наложение изоброжение на кнопки.
А также саме кнопки вложил.
[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy
*Code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;
procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;
procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;
procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;
begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel
Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image
with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end
Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=23 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;
procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;
procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;
procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;
procedure InitializeWizard();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight
WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight
WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight
WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick
ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
люди помогите соединить 2 скрипта:
const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;
VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;
FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;
CLR_INVALID = $FFFFFFFF;
function InitGifCtrl(): Boolean;
external 'initgifctrl@files:gifctrl.dll stdcall';
function UninitGifCtrl(): Boolean;
external 'uninitgifctrl@files:gifctrl.dll stdcall';
function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newgifwnd@files:gifctrl.dll stdcall';
function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean;
external 'gifwndloadfromfile@files:gifctrl.dll stdcall';
var
GIF: HWND;
WelcomeLabel1,WelcomeLabel2: TLabel;
WizardImage: TBitmapImage;
procedure DeinitializeSetup();
begin
// скрываем надписи
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
WizardForm.WizardBitmapImage.Align:=true;
// создаём надписи поверх рисунка
WelcomeLabel1 := TLabel.Create(WizardForm);
WelcomeLabel1.Left := 150;
WelcomeLabel1.Top := 30;
WelcomeLabel1.Width := 310;
WelcomeLabel1.Height := 28;
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Color := clBlack;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := 150;
WelcomeLabel2.Top := 70;
WelcomeLabel2.Width := 310;
WelcomeLabel2.Height := 200;
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
UninitGifCtrl();
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp')
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
WizardForm.WizardBitmapImage.Align:=true;
InitGifCtrl();
GIF := NewGifbWnd(WizardForm.Handle, 10, 316, 140, 42);
//GifWndLoadFromFile(GIF, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\www_oszone_net.gif'));
WelcomeLabel1 := TLabel.Create(WizardForm);
WelcomeLabel1.Left := 150;
WelcomeLabel1.Top := 30;
WelcomeLabel1.Width := 310;
WelcomeLabel1.Height := 28;
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Color := clBlack;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := 150;
WelcomeLabel2.Top := 70;
WelcomeLabel2.Width := 310;
WelcomeLabel2.Height := 200;
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
end;
и
var
WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
procedure InitializeWizard();
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Align:=true;
WizardForm.WizardBitmapImage2.Align:=true;
WizardForm.WizardSmallBitmapImage.Align:=true;
WelcomeLabel1:=TLabel.Create(WizardForm);
WelcomeLabel1.Left:=ScaleX(150);
WelcomeLabel1.Top := ScaleY(15);
WelcomeLabel1.Width := ScaleX(320);
WelcomeLabel1.Height := ScaleY(75);
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
// WelcomeLabel1.Font.Style := [fsBold];
// WelcomeLabel1.Font.Name:='MS Sans Serif';
WelcomeLabel1.Font.Size := 14;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := ScaleX(150);
WelcomeLabel2.Top := ScaleY(90);
WelcomeLabel2.Width := ScaleX(320);
WelcomeLabel2.Height := ScaleY(200);
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Font.Size := 8;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
PageNameLabel := TLabel.Create(WizardForm);
PageNameLabel.Left := ScaleX(25);
PageNameLabel.Top := ScaleY(10);
PageNameLabel.Width := ScaleX(300);
PageNameLabel.Height := ScaleY(14);
PageNameLabel.AutoSize := False;
PageNameLabel.WordWrap := True;
PageNameLabel.Font.Color := clBlack;
PageNameLabel.Font.Style := [fsBold];
PageNameLabel.Transparent := True;
PageNameLabel.Parent := WizardForm.MainPanel;
PageDescriptionLabel := TLabel.Create(WizardForm);
PageDescriptionLabel.Left := ScaleX(40);
PageDescriptionLabel.Top := ScaleY(25);
PageDescriptionLabel.Width := ScaleX(475);
PageDescriptionLabel.Height := ScaleY(30);
PageDescriptionLabel.AutoSize := False;
PageDescriptionLabel.WordWrap := True;
PageDescriptionLabel.Font.Color := clBlack;
PageDescriptionLabel.Transparent := True;
PageDescriptionLabel.Parent := WizardForm.MainPanel;
FinishedHeadingLabel:=TLabel.Create(WizardForm);
FinishedHeadingLabel.Left := ScaleX(150);
FinishedHeadingLabel.Top := ScaleY(15);
FinishedHeadingLabel.Width := ScaleX(320);
FinishedHeadingLabel.Height := ScaleY(75);
FinishedHeadingLabel.AutoSize := False;
FinishedHeadingLabel.WordWrap := True;
FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
// FinishedHeadingLabel.Font.Style := [fsBold];
// FinishedHeadingLabel.Font.Name:='MS Sans Serif';
FinishedHeadingLabel.Font.Size := 14;
FinishedHeadingLabel.Transparent := True;
FinishedHeadingLabel.Parent := WizardForm.FinishedPage;
FinishedLabel:=TLabel.Create(WizardForm);
FinishedLabel.Left := ScaleX(150);
FinishedLabel.Top := ScaleY(90);
FinishedLabel.Width := ScaleX(320);
FinishedLabel.Height := ScaleY(200);
FinishedLabel.AutoSize := False;
FinishedLabel.WordWrap := True;
FinishedLabel.Font.Color := clBlack;
FinishedLabel.Font.Size := 8;
FinishedLabel.Transparent := True;
FinishedLabel.Parent := WizardForm.FinishedPage;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;
заранее спасибо
Tukash, пробуй...
const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;
VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;
FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;
CLR_INVALID = $FFFFFFFF;
function InitGifCtrl(): Boolean;
external 'initgifctrl@files:gifctrl.dll stdcall';
function UninitGifCtrl(): Boolean;
external 'uninitgifctrl@files:gifctrl.dll stdcall';
function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newgifwnd@files:gifctrl.dll stdcall';
function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean;
external 'gifwndloadfromfile@files:gifctrl.dll stdcall';
var
GIF: HWND;
WizardImage: TBitmapImage;
WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
FinishedLabel,PageNameLabel,PageDescriptionLabel: TLabel;
procedure DeinitializeSetup();
begin
// скрываем надписи
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
WizardForm.WizardBitmapImage.Align:=true;
// создаём надписи поверх рисунка
WelcomeLabel1 := TLabel.Create(WizardForm);
WelcomeLabel1.Left := 150;
WelcomeLabel1.Top := 30;
WelcomeLabel1.Width := 310;
WelcomeLabel1.Height := 28;
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Color := clBlack;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := 150;
WelcomeLabel2.Top := 70;
WelcomeLabel2.Width := 310;
WelcomeLabel2.Height := 200;
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
UninitGifCtrl();
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp')
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
WizardForm.WizardBitmapImage.Align:=true;
InitGifCtrl();
GIF := NewGifbWnd(WizardForm.Handle, 10, 316, 140, 42);
//GifWndLoadFromFile(GIF, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\www_oszone_net.gif'));
WelcomeLabel1 := TLabel.Create(WizardForm);
WelcomeLabel1.Left := 150;
WelcomeLabel1.Top := 30;
WelcomeLabel1.Width := 310;
WelcomeLabel1.Height := 28;
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Color := clBlack;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := 150;
WelcomeLabel2.Top := 70;
WelcomeLabel2.Width := 310;
WelcomeLabel2.Height := 200;
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Align:=true;
WizardForm.WizardBitmapImage2.Align:=true;
WizardForm.WizardSmallBitmapImage.Align:=true;
WelcomeLabel1:=TLabel.Create(WizardForm);
WelcomeLabel1.Left:=ScaleX(150);
WelcomeLabel1.Top := ScaleY(15);
WelcomeLabel1.Width := ScaleX(320);
WelcomeLabel1.Height := ScaleY(75);
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
// WelcomeLabel1.Font.Style := [fsBold];
// WelcomeLabel1.Font.Name:='MS Sans Serif';
WelcomeLabel1.Font.Size := 14;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := ScaleX(150);
WelcomeLabel2.Top := ScaleY(90);
WelcomeLabel2.Width := ScaleX(320);
WelcomeLabel2.Height := ScaleY(200);
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Font.Size := 8;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
PageNameLabel := TLabel.Create(WizardForm);
PageNameLabel.Left := ScaleX(25);
PageNameLabel.Top := ScaleY(10);
PageNameLabel.Width := ScaleX(300);
PageNameLabel.Height := ScaleY(14);
PageNameLabel.AutoSize := False;
PageNameLabel.WordWrap := True;
PageNameLabel.Font.Color := clBlack;
PageNameLabel.Font.Style := [fsBold];
PageNameLabel.Transparent := True;
PageNameLabel.Parent := WizardForm.MainPanel;
PageDescriptionLabel := TLabel.Create(WizardForm);
PageDescriptionLabel.Left := ScaleX(40);
PageDescriptionLabel.Top := ScaleY(25);
PageDescriptionLabel.Width := ScaleX(475);
PageDescriptionLabel.Height := ScaleY(30);
PageDescriptionLabel.AutoSize := False;
PageDescriptionLabel.WordWrap := True;
PageDescriptionLabel.Font.Color := clBlack;
PageDescriptionLabel.Transparent := True;
PageDescriptionLabel.Parent := WizardForm.MainPanel;
FinishedHeadingLabel:=TLabel.Create(WizardForm);
FinishedHeadingLabel.Left := ScaleX(150);
FinishedHeadingLabel.Top := ScaleY(15);
FinishedHeadingLabel.Width := ScaleX(320);
FinishedHeadingLabel.Height := ScaleY(75);
FinishedHeadingLabel.AutoSize := False;
FinishedHeadingLabel.WordWrap := True;
FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
// FinishedHeadingLabel.Font.Style := [fsBold];
// FinishedHeadingLabel.Font.Name:='MS Sans Serif';
FinishedHeadingLabel.Font.Size := 14;
FinishedHeadingLabel.Transparent := True;
FinishedHeadingLabel.Parent := WizardForm.FinishedPage;
FinishedLabel:=TLabel.Create(WizardForm);
FinishedLabel.Left := ScaleX(150);
FinishedLabel.Top := ScaleY(90);
FinishedLabel.Width := ScaleX(320);
FinishedLabel.Height := ScaleY(200);
FinishedLabel.AutoSize := False;
FinishedLabel.WordWrap := True;
FinishedLabel.Font.Color := clBlack;
FinishedLabel.Font.Size := 8;
FinishedLabel.Transparent := True;
FinishedLabel.Parent := WizardForm.FinishedPage;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;
спасибо A1EXXX ака Shepards)))
ака Shepards))) »
не пойму, причем здесь он???
Цитата Tukash:
ака Shepards))) »
не пойму, причем здесь он??? »
извеняюь обознался)))просто твой ник всего одной буквой отличается от ника моего знакомого, а за помощь спасибо все работает, только закрывается окно установки долго...
Tukash, в смысле, когда жмёшь "Завершить" или исталлятор запускается долго??? (такое у многих частенько бывает...) :)
grinda,
Вот наложение изоброжение на кнопки.
А также саме кнопки вложил. »
http://img260.imageshack.us/img260/3092/16467567.th.png (http://img260.imageshack.us/i/16467567.png/) вылезла такая ошибка, не знаете в чем проблема?
Tukash, в смысле, когда жмёшь "Завершить" или исталлятор запускается долго??? (такое у многих частенько бывает...) »
запускается, иногда вообще не запускается)))
grinda, попробовал скрипт - работает, судя по скрину - ругается на отсутствие точки с запятой... Какую версию Inno используешь - ANSI или Unicode??? Подобное бывает с Unicode-версией...
юникод, ща в анси попробую
Tukash, дай кусок скрипта, содержащий секцию [Files], думаю, это поправимо....
http://pic.ipicture.ru/uploads/090908/st1gZV64yV.jpg
Может кто нибудь выложить этот скрипт. Нигде не нашёл, заранее Спс
x-net,
[Files]
Source: fon.bmp; DestDir: {tmp}; Flags: dontcopy
[Code]
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;
with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;
WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;
WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;
A1EXXX, можно полностью все страницы вот так? и ссылка как на рисунке
Кнопки чёрные, и ставить дополнительно компоненты
x-net, есть готовый скрипт, где всё это реализовано (кроме кнопок, кажись, они отдельно есть) на примере игры [Prototype] (автор Shegorat). Если есть желание - пробуй, разбирайся!
(скрипт прикрепил...) ;)
#define MyAppName "GTA Vice City"
#define MyAppVerName "GTA Vice City"
#define MyAppPublisher "1C"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{7CCD30D0-3630-499F-B7B8-49D0FFF220A8}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
InfoBeforeFile=G:\readMe.txt
OutputDir=D:\22\GTA
OutputBaseFilename=setup
SetupIconFile=G:\Autorun.ico
Compression=lzma/ultra
SolidCompression=yes
SlicesPerDisk=1
DiskSliceSize=736000000
DiskClusterSize=4096
ReserveBytes=0
DiskSpanning=yes
WizardSmallImageFile=C:\WizardSmallImage.bmp
[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: currentuser; Description: "Установить для всех пользователей"; Flags: unchecked
Name: desktopicon; Description: "Создать значок на рабочем столе"
[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; StatusMsg: Установка DirectX®...;
FileName: "{src}\Redist\AdbeRdr.exe"; Description: "Установить Adobe Reader (Необходимо для Руководства пользователя)"; WorkingDir: "{src}\Redist"; Flags: postinstall shellexec skipifsilent runasoriginaluser
[Files]
Source: "D:\Games\GTA Vice City\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: C:\fon.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: C:\gifctrl.dll; Flags: dontcopy;
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{group}\Запустить игру"; FileName: "{app}\gta-vc.exe"; WorkingDir: "{app}"; IconFilename: "{app}\gta-vc.exe"
Name: "{group}\Сайт разработчиков игры"; FileName: "{app}\Rockstar.url"; WorkingDir: "{app}"
Name: "{group}\Сайт игры"; FileName: "{app}\gta-vc.url"; WorkingDir: "{app}"
Name: "{group}\Руководство по игре"; FileName: "{app}\GTA_VC_MAN_rus.pdf"; WorkingDir: "{app}"
Name: "{group}\Карта Vice City"; FileName: "{app}\GTA_VC_MAP_rus.pdf"; WorkingDir: "{app}"
Name: {userdesktop}\GTA Vice City; Filename: {app}\gta-vc.exe; WorkingDir: {app}\
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\1.00.00001"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "ExePath"; ValueData: "{app}\gta-vc.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "Installed"; ValueData: "1"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "UninstallPath"; ValueData: "{app}\unins000.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey
[CustomMessages]
rus.NameAndVersion=%1, версия %2
rus.AdditionalIcons=Дополнительные значки:
rus.CreateDesktopIcon=Создать значок на &Рабочем столе
rus.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
rus.ProgramOnTheWeb=Сайт %1 в Интернете
rus.UninstallProgram=Деинсталлировать %1
rus.LaunchProgram=Запустить %1
rus.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
rus.AssocingFileExtension=Связывание %1 с файлами %2...
const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;
VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;
FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;
CLR_INVALID = $FFFFFFFF;
function InitGifCtrl(): Boolean;
external 'initgifctrl@files:gifctrl.dll stdcall';
function UninitGifCtrl(): Boolean;
external 'uninitgifctrl@files:gifctrl.dll stdcall';
function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newgifwnd@files:gifctrl.dll stdcall';
function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean;
external 'gifwndloadfromfile@files:gifctrl.dll stdcall';
var
GIF: HWND;
WizardImage: TBitmapImage;
WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,
FinishedLabel,PageNameLabel,PageDescriptionLabel: TLabel;
procedure DeinitializeSetup();
begin
// скрываем надписи
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
// загружаем на форму рисунок
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
// растягиваем рисунок по всей форме, если он у вас уже такой какой вы хотите, то удалите эту строку
WizardForm.WizardBitmapImage.Align:=true;
// создаём надписи поверх рисунка
WelcomeLabel1 := TLabel.Create(WizardForm);
WelcomeLabel1.Left := 150;
WelcomeLabel1.Top := 30;
WelcomeLabel1.Width := 310;
WelcomeLabel1.Height := 28;
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Color := clBlack;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := 150;
WelcomeLabel2.Top := 70;
WelcomeLabel2.Width := 310;
WelcomeLabel2.Height := 200;
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent := WizardForm.WelcomePage;
UninitGifCtrl();
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('fon.bmp')
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
WizardForm.WizardBitmapImage.Align:=true;
InitGifCtrl();
GIF := NewGifbWnd(WizardForm.Handle, 10, 316, 140, 42);
//GifWndLoadFromFile(GIF, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\www_oszone_net.gif'));
WelcomeLabel1 := TLabel.Create(WizardForm);
WelcomeLabel1.Left := 150;
WelcomeLabel1.Top := 30;
WelcomeLabel1.Width := 310;
WelcomeLabel1.Height := 28;
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Style := [fsBold];
WelcomeLabel1.Font.Color := clBlack;
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
//WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := 150;
WelcomeLabel2.Top := 70;
WelcomeLabel2.Width := 310;
WelcomeLabel2.Height := 200;
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
//WelcomeLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
//WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Align:=true;
WizardForm.WizardBitmapImage2.Align:=true;
WizardForm.WizardSmallBitmapImage.Align:=true;
WelcomeLabel1:=TLabel.Create(WizardForm);
WelcomeLabel1.Left:=ScaleX(150);
WelcomeLabel1.Top := ScaleY(15);
WelcomeLabel1.Width := ScaleX(320);
WelcomeLabel1.Height := ScaleY(75);
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Font.Color := clBlack;
// здесь можно поиграть шрифтом
// WelcomeLabel1.Font.Style := [fsBold];
// WelcomeLabel1.Font.Name:='MS Sans Serif';
WelcomeLabel1.Font.Size := 14;
WelcomeLabel1.Transparent := True;
//WelcomeLabel1.Parent := WizardForm.WelcomePage;
WelcomeLabel2:=TLabel.Create(WizardForm);
WelcomeLabel2.Left := ScaleX(150);
WelcomeLabel2.Top := ScaleY(90);
WelcomeLabel2.Width := ScaleX(320);
WelcomeLabel2.Height := ScaleY(200);
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Font.Color := clBlack;
WelcomeLabel2.Font.Size := 8;
WelcomeLabel2.Transparent := True;
//WelcomeLabel2.Parent := WizardForm.WelcomePage;
PageNameLabel := TLabel.Create(WizardForm);
PageNameLabel.Left := ScaleX(25);
PageNameLabel.Top := ScaleY(10);
PageNameLabel.Width := ScaleX(300);
PageNameLabel.Height := ScaleY(14);
PageNameLabel.AutoSize := False;
PageNameLabel.WordWrap := True;
PageNameLabel.Font.Color := clBlack;
PageNameLabel.Font.Style := [fsBold];
PageNameLabel.Transparent := True;
//PageNameLabel.Parent := WizardForm.MainPanel;
PageDescriptionLabel := TLabel.Create(WizardForm);
PageDescriptionLabel.Left := ScaleX(40);
PageDescriptionLabel.Top := ScaleY(25);
PageDescriptionLabel.Width := ScaleX(475);
PageDescriptionLabel.Height := ScaleY(30);
PageDescriptionLabel.AutoSize := False;
PageDescriptionLabel.WordWrap := True;
PageDescriptionLabel.Font.Color := clBlack;
PageDescriptionLabel.Transparent := True;
//PageDescriptionLabel.Parent := WizardForm.MainPanel;
FinishedHeadingLabel:=TLabel.Create(WizardForm);
FinishedHeadingLabel.Left := ScaleX(150);
FinishedHeadingLabel.Top := ScaleY(15);
FinishedHeadingLabel.Width := ScaleX(320);
FinishedHeadingLabel.Height := ScaleY(75);
FinishedHeadingLabel.AutoSize := False;
FinishedHeadingLabel.WordWrap := True;
FinishedHeadingLabel.Font.Color := clBlack;
// здесь тоже можно поиграть шрифтом
// FinishedHeadingLabel.Font.Style := [fsBold];
// FinishedHeadingLabel.Font.Name:='MS Sans Serif';
FinishedHeadingLabel.Font.Size := 14;
FinishedHeadingLabel.Transparent := True;
//FinishedHeadingLabel.Parent := WizardForm.FinishedPage;
FinishedLabel:=TLabel.Create(WizardForm);
FinishedLabel.Left := ScaleX(150);
FinishedLabel.Top := ScaleY(90);
FinishedLabel.Width := ScaleX(320);
FinishedLabel.Height := ScaleY(200);
FinishedLabel.AutoSize := False;
FinishedLabel.WordWrap := True;
FinishedLabel.Font.Color := clBlack;
FinishedLabel.Font.Size := 8;
FinishedLabel.Transparent := True;
//FinishedLabel.Parent := WizardForm.FinishedPage;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
end;
A1EXXX весь выложил))) мало-ли))) если что особо не старайся уже начал по:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "GTA Vice City"
#define MyAppVerName "GTA Vice City"
#define MyAppPublisher "1C"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{7CCD30D0-3630-499F-B7B8-49D0FFF220A8}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
InfoBeforeFile=G:\readMe.txt
OutputDir=D:\22\GTA
OutputBaseFilename=setup
SetupIconFile=G:\Autorun.ico
Compression=lzma/ultra
SolidCompression=yes
SlicesPerDisk=1
DiskSliceSize=736000000
DiskClusterSize=4096
ReserveBytes=0
DiskSpanning=yes
WizardImageFile=C:\WizardImage.bmp
WizardSmallImageFile=C:\WizardSmallImage.bmp
[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: currentuser; Description: "Установить для всех пользователей"; Flags: unchecked
Name: desktopicon; Description: "Создать значок на рабочем столе"
[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; StatusMsg: Установка DirectX®...;
FileName: "{src}\Redist\AdbeRdr.exe"; Description: "Установить Adobe Reader (Необходимо для Руководства пользователя)"; WorkingDir: "{src}\Redist"; Flags: postinstall shellexec skipifsilent runasoriginaluser
[Files]
Source: "D:\Games\GTA Vice City\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{group}\Запустить игру"; FileName: "{app}\gta-vc.exe"; WorkingDir: "{app}"; IconFilename: "{app}\gta-vc.exe"
Name: "{group}\Сайт разработчиков игры"; FileName: "{app}\Rockstar.url"; WorkingDir: "{app}"
Name: "{group}\Сайт игры"; FileName: "{app}\gta-vc.url"; WorkingDir: "{app}"
Name: "{group}\Руководство по игре"; FileName: "{app}\GTA_VC_MAN_rus.pdf"; WorkingDir: "{app}"
Name: "{group}\Карта Vice City"; FileName: "{app}\GTA_VC_MAP_rus.pdf"; WorkingDir: "{app}"
Name: {userdesktop}\GTA Vice City; Filename: {app}\gta-vc.exe; WorkingDir: {app}\
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\1.00.00001"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "ExePath"; ValueData: "{app}\gta-vc.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "Installed"; ValueData: "1"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City\Installation"; ValueType: string; ValueName: "UninstallPath"; ValueData: "{app}\unins000.exe"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Rockstar Games\GTA Vice City"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey
[CustomMessages]
rus.NameAndVersion=%1, версия %2
rus.AdditionalIcons=Дополнительные значки:
rus.CreateDesktopIcon=Создать значок на &Рабочем столе
rus.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
rus.ProgramOnTheWeb=Сайт %1 в Интернете
rus.UninstallProgram=Деинсталлировать %1
rus.LaunchProgram=Запустить %1
rus.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
rus.AssocingFileExtension=Связывание %1 с файлами %2...
делать)))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.