Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

Как сделать оформление как у PROtanki

для начала прочти всю тему

Share this post


Link to post

Short link
Share on other sites

Как сделать оформление как у PROtanki

Берёшь фотошоп, китайскую версию инно (или официальную, но чекЛистБоксы делаешь через ботву), саму ботву... И работаешь.

Непонятно, что я написал? - Тогда берёшь примеры инно, читаешь форумы и изучаешь.

Share this post


Link to post

Short link
Share on other sites

Ну или короткий ответ выше :)

уж  лучше всё это вместе)) 

Share this post


Link to post

Short link
Share on other sites

народ подскажите если не трудно как в данном скрипте увеличить окно установщика ?  ту картинку что появляется до открытия установщика могу сделать и больше и меньше а вот сам установщик  в размерах ну никак не могу.

;#define Video
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
WizardImageFile=Fon.bmp
OutputBaseFilename=2

[Files]
Source: compiler:Dll Pack\IsPicture_for_all.dll; Flags: dontcopy
Source: Fon.bmp; Flags: dontcopy
#ifdef Video
Source: XVID\fon.avi; Flags: dontcopy
#endif


[Code]
//-----------------------------------------
procedure Initialize(AhWnd,BhWnd:hWnd);external 'Initialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Здесь указываем хендлы окон, на данный момент, лучше пока указывать
//  WizardForm.Handle - первым и MainForm.Handle вторым.
//-----------------------------------------
procedure XvidVideo(fn:String;Seth:string);external 'XvidVideo@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Эта процедура загружает фоновое avi-видео.
//  Seth  - задаем координаты через пробел в одинарных кавычках
// пример:   XvidVideo(ExpandConstant('{tmp}\fon.avi'), '351 201 236 132');
//-----------------------------------------
procedure Deinitialize;external 'Deinitialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
//    отменяет свзывание форм между собой, выгружает видео.

//-----------------------------------------
function NewFont(Height:Integer;thickness,italic,underline,strikeout:DWORD;name:String):hWnd;external 'NewFont@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Создает шрифты для замены стандартных. Необходима для борьбя с артефактами сглаживания.
//   Height,                    // высота шрифта
//   thickness,                // насыщенность шрифта
//   italic,                 // курсив
//   underline,               // Подчеркнутый
//   strikeout,               // Зачеркнутый
//   name                       // имя шрифта
//-----------------------------------------
procedure SplashWnd(FileName:PAnsiChar;Time,width,height:Integer);external 'SplashWnd@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Создает Splash-заставку
//   Прозрачность, пока, не поддерживается
//   FileName,                    // имя файла
//   Time,                      // скорость появления в миллисекундах
//   width,                     // ширина
//   height,                   // высота
procedure EndSplash(Time1,Time2:Integer);external 'EndSplash@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Закрываем Splash-заставку
//   Time1,                      // выжидание до закрытия в миллисекундах
//   Time,                      // скорость закрытия в миллисекундах
//-----------------------------------------
//-----------------------------------------

function GetSystemMetrics(nIndex:Integer):integer; external '[email protected] stdcall delayload';

const
   TfonColor = $000008; // Цвет фона $000008 - не изменять!
   TfontColor = $ffffff; // Цвет тeкста

#ifdef Video

#include "XVID\xvid.iss"
#endif
#include "WizardFormResise.iss"
Var Font1,Font2:hWnd;


function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('IsPicture_for_all.dll');
  ExtractTemporaryFile('fon.bmp');
  SplashWnd(ExpandConstant('{tmp}\fon.bmp'),1500,ScaleX(600),ScaleY(420));
#ifdef Video
    XvidInstall;
  ExtractTemporaryFile('fon.avi');
#endif
  EndSplash(1500,1000);
  Result:=True;
end;

procedure InitializeWizard();
begin
Font1:= NewFont(16,600,0,0,0,'Comic Sans MS');
Font2:= NewFont(24,900,0,0,0,'Tahoma');

#ifdef Video
if CanUseXvid then begin
    WizardForm.AutoScroll := False;
    WizardForm.ClientWidth:= ScaleX(600);
    WizardForm.ClientHeight:=ScaleY(420);
    WizardForm.Center;
    end
    WizardFormResise;
#endif

    WizardForm.WizardSmallBitmapImage.Hide;
    WizardForm.WizardBitmapImage2.Hide;
    WizardForm.DirEdit.AutoSelect:=False;
//-----------------------------------------

//-----------------------------------------
//---------------// не изменять!\\---------------\\
//   задаем цвет всем элементам,которые нам нужны.
    WizardForm.WelcomePage.Color:=TfonColor;// не изменять!
    WizardForm.FinishedPage.Color:=TfonColor;
    WizardForm.InnerPage.Color:=TfonColor;
    WizardForm.DirEdit.Color:=TfonColor;
    WizardForm.ReadyMemo.Color:=TfonColor;
    WizardForm.MainPanel.Color:=TfonColor;
//---------------// не изменять!\\---------------\\
//-----------------------------------------

//-----------------------------------------
//---------------//Применяем шрифт\\---------------\\
    WizardForm.Font.Handle:=Font1;
    WizardForm.WelcomeLabel1.Font.Handle := Font2;
    WizardForm.FinishedHeadingLabel.Font.Handle := Font2;
    WizardForm.PageNameLabel.Font.Handle := Font1;
    WizardForm.Font.Color:=TfontColor;
//---------------//Применяем шрифт\\---------------\\
//-----------------------------------------

//-----------------------------------------
//   Приделываем прозрачность к SelectDirBitmapImage
//   иначе, придется любоваться на красивый серый
//   квадратик вокруг изображения папки :)
    WizardForm.SelectDirBitmapImage.BackColor := clNone;
    WizardForm.SelectDirBitmapImage.ReplaceColor := clBtnFace;
//-----------------------------------------

//   скрываем изображение с финишной страницы
    WizardForm.WizardBitmapImage.Parent := MainForm;
    WizardForm.WizardBitmapImage.SetBounds(0, 0, WizardForm.ClientWidth, WizardForm.ClientHeight);
//-----------------------------------------
//-----------------------------------------
//   Запускаем в работу все, что приготовили:
//   указываем формы, с которыми будет работать длл-ка,
//-----------------------------------------
    Initialize(WizardForm.Handle,MainForm.Handle);
//-----------------------------------------
//  мультимедийные возможности - Фоновое видео
//-----------------------------------------
#ifdef Video
if CanUseXvid then
  XvidVideo(ExpandConstant('{tmp}\fon.avi'), '351 201 236 132');
#endif
//-----------------------------------------
end;

procedure DeinitializeSetup();
begin
//-----------------------------------------
//   Не забываем про Deinitialize
//   если не хотим разнообразных ошибок при выходе.
//-----------------------------------------
  Deinitialize;
//-----------------------------------------
#ifdef Video
  XvidUnInstall;
#endif
end;
 

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

народ подскажите если не трудно как в данном скрипте увеличить окно установщика ?  ту картинку что появляется до открытия установщика могу сделать и больше и меньше а вот сам установщик  в размерах ну никак не могу.

;#define Video
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
WizardImageFile=Fon.bmp
OutputBaseFilename=2

[Files]
Source: compiler:Dll Pack\IsPicture_for_all.dll; Flags: dontcopy
Source: Fon.bmp; Flags: dontcopy
#ifdef Video
Source: XVID\fon.avi; Flags: dontcopy
#endif


[Code]
//-----------------------------------------
procedure Initialize(AhWnd,BhWnd:hWnd);external 'Initialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Здесь указываем хендлы окон, на данный момент, лучше пока указывать
//  WizardForm.Handle - первым и MainForm.Handle вторым.
//-----------------------------------------
procedure XvidVideo(fn:String;Seth:string);external 'XvidVideo@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Эта процедура загружает фоновое avi-видео.
//  Seth  - задаем координаты через пробел в одинарных кавычках
// пример:   XvidVideo(ExpandConstant('{tmp}\fon.avi'), '351 201 236 132');
//-----------------------------------------
procedure Deinitialize;external 'Deinitialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
//    отменяет свзывание форм между собой, выгружает видео.

//-----------------------------------------
function NewFont(Height:Integer;thickness,italic,underline,strikeout:DWORD;name:String):hWnd;external 'NewFont@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Создает шрифты для замены стандартных. Необходима для борьбя с артефактами сглаживания.
//   Height,                    // высота шрифта
//   thickness,                // насыщенность шрифта
//   italic,                 // курсив
//   underline,               // Подчеркнутый
//   strikeout,               // Зачеркнутый
//   name                       // имя шрифта
//-----------------------------------------
procedure SplashWnd(FileName:PAnsiChar;Time,width,height:Integer);external 'SplashWnd@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Создает Splash-заставку
//   Прозрачность, пока, не поддерживается
//   FileName,                    // имя файла
//   Time,                      // скорость появления в миллисекундах
//   width,                     // ширина
//   height,                   // высота
procedure EndSplash(Time1,Time2:Integer);external 'EndSplash@{tmp}\IsPicture_for_all.dll stdcall delayload';
//  Закрываем Splash-заставку
//   Time1,                      // выжидание до закрытия в миллисекундах
//   Time,                      // скорость закрытия в миллисекундах
//-----------------------------------------
//-----------------------------------------

function GetSystemMetrics(nIndex:Integer):integer; external '[email protected] stdcall delayload';

const
   TfonColor = $000008; // Цвет фона $000008 - не изменять!
   TfontColor = $ffffff; // Цвет тeкста

#ifdef Video

#include "XVID\xvid.iss"
#endif
#include "WizardFormResise.iss"
Var Font1,Font2:hWnd;


function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('IsPicture_for_all.dll');
  ExtractTemporaryFile('fon.bmp');
  SplashWnd(ExpandConstant('{tmp}\fon.bmp'),1500,ScaleX(600),ScaleY(420));
#ifdef Video
    XvidInstall;
  ExtractTemporaryFile('fon.avi');
#endif
  EndSplash(1500,1000);
  Result:=True;
end;

procedure InitializeWizard();
begin
Font1:= NewFont(16,600,0,0,0,'Comic Sans MS');
Font2:= NewFont(24,900,0,0,0,'Tahoma');

#ifdef Video
if CanUseXvid then begin
    WizardForm.AutoScroll := False;
    WizardForm.ClientWidth:= ScaleX(600);
    WizardForm.ClientHeight:=ScaleY(420);
    WizardForm.Center;
    end
    WizardFormResise;
#endif

    WizardForm.WizardSmallBitmapImage.Hide;
    WizardForm.WizardBitmapImage2.Hide;
    WizardForm.DirEdit.AutoSelect:=False;
//-----------------------------------------

//-----------------------------------------
//---------------// не изменять!\\---------------\\
//   задаем цвет всем элементам,которые нам нужны.
    WizardForm.WelcomePage.Color:=TfonColor;// не изменять!
    WizardForm.FinishedPage.Color:=TfonColor;
    WizardForm.InnerPage.Color:=TfonColor;
    WizardForm.DirEdit.Color:=TfonColor;
    WizardForm.ReadyMemo.Color:=TfonColor;
    WizardForm.MainPanel.Color:=TfonColor;
//---------------// не изменять!\\---------------\\
//-----------------------------------------

//-----------------------------------------
//---------------//Применяем шрифт\\---------------\\
    WizardForm.Font.Handle:=Font1;
    WizardForm.WelcomeLabel1.Font.Handle := Font2;
    WizardForm.FinishedHeadingLabel.Font.Handle := Font2;
    WizardForm.PageNameLabel.Font.Handle := Font1;
    WizardForm.Font.Color:=TfontColor;
//---------------//Применяем шрифт\\---------------\\
//-----------------------------------------

//-----------------------------------------
//   Приделываем прозрачность к SelectDirBitmapImage
//   иначе, придется любоваться на красивый серый
//   квадратик вокруг изображения папки :)
    WizardForm.SelectDirBitmapImage.BackColor := clNone;
    WizardForm.SelectDirBitmapImage.ReplaceColor := clBtnFace;
//-----------------------------------------

//   скрываем изображение с финишной страницы
    WizardForm.WizardBitmapImage.Parent := MainForm;
    WizardForm.WizardBitmapImage.SetBounds(0, 0, WizardForm.ClientWidth, WizardForm.ClientHeight);
//-----------------------------------------
//-----------------------------------------
//   Запускаем в работу все, что приготовили:
//   указываем формы, с которыми будет работать длл-ка,
//-----------------------------------------
    Initialize(WizardForm.Handle,MainForm.Handle);
//-----------------------------------------
//  мультимедийные возможности - Фоновое видео
//-----------------------------------------
#ifdef Video
if CanUseXvid then
  XvidVideo(ExpandConstant('{tmp}\fon.avi'), '351 201 236 132');
#endif
//-----------------------------------------
end;

procedure DeinitializeSetup();
begin
//-----------------------------------------
//   Не забываем про Deinitialize
//   если не хотим разнообразных ошибок при выходе.
//-----------------------------------------
  Deinitialize;
//-----------------------------------------
#ifdef Video
  XvidUnInstall;
#endif
end;
 

Через встроенный редактор формы в Инно все делается растягивается и сжимается вся форма и что в ней!

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

кто нибудь может объяснить про скины? в скачанном "Inno Setup 5"  в папке  " Dll Examples \ IsSkinEx [3.0.0.2] "   есть скрипт  " Example "  

ну это пример это понятно. после того как компильнешь его в папке  "Output" появляется соответствующий инсталлятор. но почему когда заменяешь " Tiger.cjstyles "  на любой другой ничего не работает? просто появляется стандартный инстал. я в этом скрипте везде и названия менял и местами все менял  ничего не помогает. в чем проблема подскажите пожалуйста если не трудно)

 

вот сам скрипт 

#ifdef UNICODE
  #define A "W"
  #define SKinDll    "ISSkinExW.dll"
#else
  #define A "A"
  #define SKinDll    "ISSkinExA.dll"
#endif

#define SKin    "Tiger.cjstyles"
#define SKinIni "NormalBlack.ini"

[Setup]
AppName=My prog
AppVerName=My prog
DefaultDirName={pf}\My prog

[Files]
Source: compiler:Dll Pack\{#SKinDll}; DestDir: {app}; Flags: ignoreversion
Source: {#SKin}; DestDir: {app}; Flags: ignoreversion

[code]
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external '[email protected] stdcall';
procedure LoadSkin(lpszPath, lpszIniFileName: string); external 'LoadSkin@{tmp}\{#SKinDll} stdcall delayload setuponly';
procedure UnloadSkin(); external 'UnloadSkin@{tmp}\{#SKinDll} stdcall delayload setuponly';
procedure LoadSkinU(lpszPath, lpszIniFileName: string); external 'LoadSkin@{tmp}\{#SKinDll} stdcall delayload uninstallonly';
procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\{#SKinDll} stdcall delayload uninstallonly';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('{#SKinDll}');
  ExtractTemporaryFile('{#SKin}');
  LoadSkin(ExpandConstant('{tmp}\{#SKin}'), '{#SKinIni}');
  Result:=True;
end;

procedure DeinitializeSetup();
begin
  UnloadSkin;
  WizardForm.Free;
end;

function InitializeUninstall(): Boolean;
begin
  FileCopy(ExpandConstant('{app}\{#SKinDll}'), ExpandConstant('{tmp}\{#SKinDll}'), False);
  FileCopy(ExpandConstant('{app}\{#SKin}'), ExpandConstant('{tmp}\{#SKin}'), False);
  LoadSkinU(ExpandConstant('{tmp}\{#SKin}'), '{#SKinIni}');
  DeleteFile(ExpandConstant('{app}\{#SKinDll}'));
  DeleteFile(ExpandConstant('{app}\{#SKin}'));
  Result:=True;
end;

procedure DeinitializeUninstall();
begin
	UnloadSkinU;
end;

 

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites
#define SKinIni "NormalBlack.ini"

В каждом стиле внутри свой "конфиг".

Share this post


Link to post

Short link
Share on other sites
#define SKinIni "NormalBlack.ini"

В каждом стиле внутри свой "конфиг".

а где этот конфиг? даже в этом примере ( как видно по фотке что я выложил выше ) в этой папке нет файла с расширением .ini ?  кроме того что он просто написан в конфиге. 

 

Share this post


Link to post

Short link
Share on other sites

а где этот конфиг? даже в этом примере ( как видно по фотке что я выложил выше ) в этой папке нет файла с расширением .ini ?  кроме того что он просто написан в конфиге. 

 

 

Антивирь мог скушать.

P.S. В ветке есть примеры использования других шаблонов с другой библиотекой под inno. И самое главное, как сказал Kotyarko_O, поставьте китайскую расширенную версию инно, иначе многие возможности многих скриптов у Вас по просту не будут работать.

Share this post


Link to post

Short link
Share on other sites

Антивирь мог скушать.

P.S. В ветке есть примеры использования других шаблонов с другой библиотекой под inno. И самое главное, как сказал Kotyarko_O, поставьте китайскую расширенную версию инно, иначе многие возможности многих скриптов у Вас по просту не будут работать.

китайская расширенная эта та что тут в начале форума выложена да? она то у меня и стоит))) а антивиря у меня давно нет)))  просто как я понял сами скины в нём и не работают)) 

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

Внутри стиля лежат.

я что то не вижу их)) или я не там смотрю)) но ни одного файла с расширением ini. ни в той что на фотке ни в других папках что на фотке нет))) 

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

@ЛОМ, можно использовать скины и без ини-конфига.

'Код:'

#define SKinDll "ISSkinExW.dll"
#define SKin "Tiger.cjstyles"

[Setup]
AppName=My prog
AppVerName=My prog
DefaultDirName={pf}\My prog

[Files]
Source: {#SKinDll}; DestDir: {app}; Flags: ignoreversion
Source: {#SKin}; DestDir: {app}; Flags: ignoreversion

[Code]
Procedure LoadSkin(lpszPath, lpszIniFileName: string); external 'LoadSkin@files:{#SKinDll} stdcall delayload setuponly';
Procedure UnloadSkin(); external 'UnloadSkin@files:{#SKinDll} stdcall delayload setuponly';
Procedure LoadSkinU(lpszPath, lpszIniFileName: string); external 'LoadSkin@{tmp}\{#SKinDll} stdcall delayload uninstallonly';
Procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\{#SKinDll} stdcall delayload uninstallonly';

Function InitializeSetup(): Boolean;
begin
 ExtractTemporaryFile('{#SKin}');
 LoadSkin(ExpandConstant('{tmp}\{#SKin}'), '');
 Result := True;
end;

Procedure DeinitializeSetup();
begin
 UnloadSkin();
 WizardForm.Free;
end;

Function InitializeUninstall(): Boolean;
begin
 FileCopy(ExpandConstant('{app}\{#SKinDll}'), ExpandConstant('{tmp}\{#SKinDll}'), False);
 FileCopy(ExpandConstant('{app}\{#SKin}'), ExpandConstant('{tmp}\{#SKin}'), False);
 LoadSkinU(ExpandConstant('{tmp}\{#SKin}'), '');
 DeleteFile(ExpandConstant('{app}\{#SKinDll}'));
 DeleteFile(ExpandConstant('{app}\{#SKin}'));
 Result:=True;
end;

Procedure DeinitializeUninstall();
begin
 UnloadSkinU();
end;

При этом используйте IsSkinEx, а не IsSkin.

И не стоит использовать скин в деинсталляторе - он там нафиг не нужен.

Edited by Kotyarko_O
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@ЛОМ, можно использовать скины и без ини-конфига.

'Код:'

#define SKinDll "ISSkinExW.dll"
#define SKin "Tiger.cjstyles"

[Setup]
AppName=My prog
AppVerName=My prog
DefaultDirName={pf}\My prog

[Files]
Source: {#SKinDll}; DestDir: {app}; Flags: ignoreversion
Source: {#SKin}; DestDir: {app}; Flags: ignoreversion

[Code]
Procedure LoadSkin(lpszPath, lpszIniFileName: string); external 'LoadSkin@files:{#SKinDll} stdcall delayload setuponly';
Procedure UnloadSkin(); external 'UnloadSkin@files:{#SKinDll} stdcall delayload setuponly';
Procedure LoadSkinU(lpszPath, lpszIniFileName: string); external 'LoadSkin@{tmp}\{#SKinDll} stdcall delayload uninstallonly';
Procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\{#SKinDll} stdcall delayload uninstallonly';

Function InitializeSetup(): Boolean;
begin
 ExtractTemporaryFile('{#SKin}');
 LoadSkin(ExpandConstant('{tmp}\{#SKin}'), '');
 Result := True;
end;

Procedure DeinitializeSetup();
begin
 UnloadSkin();
 WizardForm.Free;
end;

Function InitializeUninstall(): Boolean;
begin
 FileCopy(ExpandConstant('{app}\{#SKinDll}'), ExpandConstant('{tmp}\{#SKinDll}'), False);
 FileCopy(ExpandConstant('{app}\{#SKin}'), ExpandConstant('{tmp}\{#SKin}'), False);
 LoadSkinU(ExpandConstant('{tmp}\{#SKin}'), '');
 DeleteFile(ExpandConstant('{app}\{#SKinDll}'));
 DeleteFile(ExpandConstant('{app}\{#SKin}'));
 Result:=True;
end;

Procedure DeinitializeUninstall();
begin
 UnloadSkinU();
end;

При этом используйте IsSkinEx, а не IsSkin.

И не стоит использовать скин в деинсталляторе - он там нафиг не нужен.

СПАСИБО!!! да просто интересно было почему не работает  ( хотя для начинающих вроде меня для инсталлятора можно ведь пользовать?! ))))  КАК только попробовал твой скрипт всё заработало!!! там который пример скрипта ваще не пашет! а с твоим только так!!! еще раз СПАСИБО!!! )))

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

 

 

я не там смотрю

Внутри файла. Хотя уже всё равно.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

елки палки!! никак не могу найти. ведь было же где то. подскажите как сделать в установщике две страницы с  выбором  [Components].  слишком много на одну страницу.

Share this post


Link to post

Short link
Share on other sites
ЛОМ, on 30 Jun 2016 - 02:27, said:

елки палки!! никак не могу найти. ведь было же где то. подскажите как сделать в установщике две страницы с  выбором  [Components].  слишком много на одну страницу.

 

В теме есть это и обсуждалось....

Edited by Nowik1971

Share this post


Link to post

Short link
Share on other sites

В теме есть это и обсуждалось....

знаю! просто не помню где же это точно было)) вот терь с начала читаю всё)))

Share this post


Link to post

Short link
Share on other sites

 

 

вот терь с начала читаю всё)
Учитесь пользоваться поиском.
Всего-то нужно подумать над ключом поиска. Например, могут подойти: TNewCheckListBox, AddCheckBox \ AddRadionButton.

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...