Go Back   FileForums > Game Backup > PC Games > PC Games - CD/DVD Conversions > Conversion Tutorials

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 19-01-2013, 11:12
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
New Font

Hello guys.

How can i use a new font (font.ttf) that i don´t have in my system, on the inno setup?

Example of font that i don´t have in my system.
http://www.1001freefonts.com/image.p...o%20The%20Hand

The script to this case is the same in the post # 138.

Thanks in advanced.
Reply With Quote
Sponsored Links
  #2  
Old 19-01-2013, 13:33
Razor12911's Avatar
Razor12911 Razor12911 is offline
Noob
 
Join Date: Jul 2012
Location: South Africa
Posts: 3,751
Thanks: 2,181
Thanked 11,210 Times in 2,309 Posts
Razor12911 is on a distinguished road
[Files]
Source: Font.ttf; DestDir: {tmp}; Flags: dontcopy;

[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif


const
FR_PRIVATE = $10;

function AddFontResource(lpszFilename:string;fl:dword;pdv:i nteger): Integer; external 'AddFontResourceEx{#A}@gdi32.dll stdcall';
function RemoveFontResource(lpszFilename:string;fl:dword;pd v:integer): BOOL; external 'RemoveFontResourceEx{#A}@gdi32.dll stdcall';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Font.ttf');
AddFontResource(ExpandConstant('{tmp}\Font.ttf'), FR_PRIVATE, 0);
end;

procedure DeinitializeSetup;
begin
RemoveFontResource(ExpandConstant('{tmp}\Font.ttf' ), FR_PRIVATE, 0);
end;

__________________________________________________ ______________

Glad could help with font.

Work on ANSI and UNICODE

Sorry for bad english.

Last edited by Razor12911; 19-01-2013 at 13:56.
Reply With Quote
  #3  
Old 19-01-2013, 14:02
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Quote:
Originally Posted by Razor12911 View Post
[Files]
Source: Font.ttf; DestDir: {tmp}; Flags: dontcopy;

[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif


const
FR_PRIVATE = $10;

function AddFontResource(lpszFilename:string;fl:dword;pdv:i nteger): Integer; external 'AddFontResourceEx{#A}@gdi32.dll stdcall';
function RemoveFontResource(lpszFilename:string;fl:dword;pd v:integer): BOOL; external 'RemoveFontResourceEx{#A}@gdi32.dll stdcall';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Font.ttf');
AddFontResource(ExpandConstant('{tmp}\Font.ttf'), FR_PRIVATE, 0);
end;

procedure DeinitializeSetup;
begin
RemoveFontResource(ExpandConstant('{tmp}\Font.ttf' ), FR_PRIVATE, 0);
end;

__________________________________________________ ______________

Glad could help with font.

Work on ANSI and UNICODE

Sorry for bad english.
Thank you very much for your response friend.
I will try use this code and return the result.
Reply With Quote
  #4  
Old 20-01-2013, 00:09
Razor12911's Avatar
Razor12911 Razor12911 is offline
Noob
 
Join Date: Jul 2012
Location: South Africa
Posts: 3,751
Thanks: 2,181
Thanked 11,210 Times in 2,309 Posts
Razor12911 is on a distinguished road
[Code]

var

Image1, Image2, Image3, Image4: Longint;

procedure InitializeWizard();
begin

h:=WizardForm.Handle;
Image1:=ImgLoad(h,ExpandConstant('{tmp}\1.jpg'),0, 0,600,400,True,True);
Image2:=ImgLoad(h,ExpandConstant('{tmp}\2.jpg'),0, 0,600,400,True,True);
Image3:=ImgLoad(h,ExpandConstant('{tmp}\3.jpg'),0, 0,600,400,True,True);
Image4:=ImgLoad(h,ExpandConstant('{tmp}\4.jpg'),0, 0,600,400,True,True);
ImgLoad(h,ExpandConstant('{tmp}\glass.png'),20,130 ,560,220,True,True);
ImgSetVisibility(Image1,False);
ImgSetVisibility(Image2,False);
ImgSetVisibility(Image3,False);
ImgSetVisibility(Image4,False);
ImgApplyChanges(WizardForm.Handle);
end;

procedure Components(CurPageID: Integer);
begin
ImgSetVisibility(Image1,False);
ImgSetVisibility(Image2,False);
ImgSetVisibility(Image3,False);
ImgSetVisibility(Image4,False);
case CurPageID of
wpWelcome:
begin
ImgSetVisibility(Image1,True);
end;
wpReady:
begin
ImgSetVisibility(Image2,True);
end;
wpInstalling:
begin
ImgSetVisibility(Image3,True);
end;
wpFinish:
begin
ImgSetVisibility(Image4,True);
end;
end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
Components(CurPageID);
ImgApplyChanges(WizardForm.Handle);
end;

Last edited by Razor12911; 20-01-2013 at 00:33.
Reply With Quote
  #5  
Old 20-01-2013, 09:37
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Quote:
Originally Posted by Razor12911 View Post
Ok. What else?
Can you give a example of glass button?
I want to change the button this instaler.
http://s9.postimage.org/pg8m175pb/Image_Setup.jpg

I wanto to learn these use two types of button:

Type 1:
http://s2.postimage.org/64jk9wgk9/button.png

Type 2:
http://advertboy.files.wordpress.com/2007/11/blue.jpg
Reply With Quote
  #6  
Old 23-01-2013, 07:23
Razor12911's Avatar
Razor12911 Razor12911 is offline
Noob
 
Join Date: Jul 2012
Location: South Africa
Posts: 3,751
Thanks: 2,181
Thanked 11,210 Times in 2,309 Posts
Razor12911 is on a distinguished road
Quote:
Originally Posted by Andre Jesus View Post
Can you give a example of glass button?
I want to change the button this instaler.
http://s9.postimage.org/pg8m175pb/Image_Setup.jpg

I wanto to learn these use two types of button:

Type 1:
http://s2.postimage.org/64jk9wgk9/button.png

Type 2:
http://advertboy.files.wordpress.com/2007/11/blue.jpg
here is example

[Files]
Source: buttons.png; DestDir: {tmp}; Flags: dontcopy

[Code]
var
hback, hnext, hcancel :Longint
ButtonFont: TFont;

procedure SetStateNewButtons;
begin

with WizardForm.BackButton do begin
BtnSetText(hBackBtn,PAnsiChar(Caption));
BtnSetVisibility(hBackBtn,Visible);
BtnSetEnabled(hBackBtn,Enabled);
end;

with WizardForm.NextButton do begin
BtnSetText(hNextBtn,PAnsiChar(Caption));
BtnSetVisibility(hNextBtn,Visible);
BtnSetEnabled(hNextBtn,Enabled);
end;

with WizardForm.CancelButton do begin
BtnSetText(hCancelBtn,PAnsiChar(Caption));
BtnSetVisibility(hCancelBtn,Visible);
BtnSetEnabled(hCancelBtn,Enabled);
end;
end;


procedure WizardFormBtnClick(hBtn:HWND);
var
Btn:TButton;
begin
case hBtn of
hCancelBtn: Btn:=WizardForm.CancelButton;
hNextBtn: Btn:=WizardForm.NextButton;
hBackBtn: Btn:=WizardForm.BackButton;
hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
end;
Btn.OnClick(Btn);
SetStateNewButtons;
BtnRefresh(hBtn);
end;

Procedure ButtonsTexture;
begin
ButtonFont:=TFont.Create;
ButtonFont.Name:='Arial';
ButtonFont.Size:=13;
ButtonFont.Color:=$FFFFFF;
with WizardForm.BackButton do begin
hBackBtn:=BtnCreate(WizardForm.Handle,Left-52,Top-65,Width+25,Height+16,ExpandConstant('{tmp}\button .png'),18,False);
BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallba ck(@WizardFormBtnClick,1));
BtnSetFont(hBackBtn,ButtonFont.Handle);
BtnSetFontColor(hBackBtn,$DAE369,$DAE369,$DAE369,$ B6B6B6);
BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
hNextBtn:=BtnCreate(WizardForm.Handle,Left-28,Top-65,Width+25,Height+16,ExpandConstant('{tmp}\button .png'),18,False);
BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallba ck(@WizardFormBtnClick,1));
BtnSetFont(hNextBtn,WFButtonFont.Handle);
BtnSetFontColor(hNextBtn,$DAE369,$DAE369,$DAE369,$ B6B6B6);
BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.CancelButton do begin
hCancelBtn:=BtnCreate(WizardForm.Handle,Left-223,Top-65,Width+25,Height+16,ExpandConstant('{tmp}\button .png'),18,False);
BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCall back(@WizardFormBtnClick,1));
BtnSetFont(hCancelBtn,ButtonFont.Handle);
BtnSetFontColor(hCancelBtn,$DAE369,$DAE369,$DAE369 ,$B6B6B6);
BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649)) ;
Width:=0;
Height:=0;
end;

with WizardForm.DirBrowseButton do begin
hDirBrowseBtn:=BtnCreate(WizardForm.Handle,Left+15 0,Top+55,Width-40,Height+10,ExpandConstant('{tmp}\browse.png'),6, False);
BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnC allback(@WizardFormBtnClick,1));
BtnSetFont(hDirBrowseBtn,ButtonFont.Handle);
BtnSetFontColor(hDirBrowseBtn,$DAE369,$DAE369,$DAE 369,$B6B6B6);
BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(3264 9));
Width:=0;
Height:=0;
end;

with WizardForm.GroupBrowseButton do begin
hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,Left+ 150,Top+55,Width-40,Height+10,ExpandConstant('{tmp}\browse.png'),6, False);
BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,W rapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBt nCallback(@WizardFormBtnClick,1));
BtnSetFont(hGroupBrowseBtn,ButtonFont.Handle);
BtnSetFontColor(hGroupBrowseBtn,$DAE369,$DAE369,$D AE369,$B6B6B6);
BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32 649));
Width:=0;
Height:=0;
end;
end;

Last edited by Razor12911; 05-02-2013 at 05:45.
Reply With Quote
  #7  
Old 01-02-2013, 06:44
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Hello.

I know to load image .jpg on installer, like example below:

Code:
InnerNotebook.Hide;
OuterNotebook.Hide;

h:=WizardForm.Handle;
ImgLoad(h,ExpandConstant('{tmp}\1.jpg'),0,0,WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
ImgApplyChanges(WizardForm.Handle);
But i don´t know to load image on unistaller.
How can i load image .jpg on the uninstaller screen?

Sorry my bad english.

Last edited by Andre Jesus; 01-02-2013 at 06:46.
Reply With Quote
  #8  
Old 13-02-2013, 08:12
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Quote:
Originally Posted by Razor12911 View Post
here is example

[Files]
Source: buttons.png; DestDir: {tmp}; Flags: dontcopy

[Code]
var
hback, hnext, hcancel :Longint
ButtonFont: TFont;

procedure SetStateNewButtons;
begin

with WizardForm.BackButton do begin
BtnSetText(hBackBtn,PAnsiChar(Caption));
BtnSetVisibility(hBackBtn,Visible);
BtnSetEnabled(hBackBtn,Enabled);
end;

with WizardForm.NextButton do begin
BtnSetText(hNextBtn,PAnsiChar(Caption));
BtnSetVisibility(hNextBtn,Visible);
BtnSetEnabled(hNextBtn,Enabled);
end;

with WizardForm.CancelButton do begin
BtnSetText(hCancelBtn,PAnsiChar(Caption));
BtnSetVisibility(hCancelBtn,Visible);
BtnSetEnabled(hCancelBtn,Enabled);
end;
end;


procedure WizardFormBtnClick(hBtn:HWND);
var
Btn:TButton;
begin
case hBtn of
hCancelBtn: Btn:=WizardForm.CancelButton;
hNextBtn: Btn:=WizardForm.NextButton;
hBackBtn: Btn:=WizardForm.BackButton;
hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
end;
Btn.OnClick(Btn);
SetStateNewButtons;
BtnRefresh(hBtn);
end;

Procedure ButtonsTexture;
begin
ButtonFont:=TFont.Create;
ButtonFont.Name:='Arial';
ButtonFont.Size:=13;
ButtonFont.Color:=$FFFFFF;
with WizardForm.BackButton do begin
hBackBtn:=BtnCreate(WizardForm.Handle,Left-52,Top-65,Width+25,Height+16,ExpandConstant('{tmp}\button .png'),18,False);
BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallba ck(@WizardFormBtnClick,1));
BtnSetFont(hBackBtn,ButtonFont.Handle);
BtnSetFontColor(hBackBtn,$DAE369,$DAE369,$DAE369,$ B6B6B6);
BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
hNextBtn:=BtnCreate(WizardForm.Handle,Left-28,Top-65,Width+25,Height+16,ExpandConstant('{tmp}\button .png'),18,False);
BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallba ck(@WizardFormBtnClick,1));
BtnSetFont(hNextBtn,WFButtonFont.Handle);
BtnSetFontColor(hNextBtn,$DAE369,$DAE369,$DAE369,$ B6B6B6);
BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.CancelButton do begin
hCancelBtn:=BtnCreate(WizardForm.Handle,Left-223,Top-65,Width+25,Height+16,ExpandConstant('{tmp}\button .png'),18,False);
BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCall back(@WizardFormBtnClick,1));
BtnSetFont(hCancelBtn,ButtonFont.Handle);
BtnSetFontColor(hCancelBtn,$DAE369,$DAE369,$DAE369 ,$B6B6B6);
BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649)) ;
Width:=0;
Height:=0;
end;

with WizardForm.DirBrowseButton do begin
hDirBrowseBtn:=BtnCreate(WizardForm.Handle,Left+15 0,Top+55,Width-40,Height+10,ExpandConstant('{tmp}\browse.png'),6, False);
BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnC allback(@WizardFormBtnClick,1));
BtnSetFont(hDirBrowseBtn,ButtonFont.Handle);
BtnSetFontColor(hDirBrowseBtn,$DAE369,$DAE369,$DAE 369,$B6B6B6);
BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(3264 9));
Width:=0;
Height:=0;
end;

with WizardForm.GroupBrowseButton do begin
hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,Left+ 150,Top+55,Width-40,Height+10,ExpandConstant('{tmp}\browse.png'),6, False);
BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,W rapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBt nCallback(@WizardFormBtnClick,1));
BtnSetFont(hGroupBrowseBtn,ButtonFont.Handle);
BtnSetFontColor(hGroupBrowseBtn,$DAE369,$DAE369,$D AE369,$B6B6B6);
BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32 649));
Width:=0;
Height:=0;
end;
end;
Razor 12911.

Thank you man, but don´t work.
Can you please revised the script? I think that problem is in var:

Code:
var
hback, hnext, hcancel :Longint
Reply With Quote
  #9  
Old 04-02-2013, 04:41
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Quote:
Originally Posted by Razor12911 View Post
[Files]
Source: Font.ttf; DestDir: {tmp}; Flags: dontcopy;

[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif


const
FR_PRIVATE = $10;

function AddFontResource(lpszFilename:string;fl:dword;pdv:i nteger): Integer; external 'AddFontResourceEx{#A}@gdi32.dll stdcall';
function RemoveFontResource(lpszFilename:string;fl:dword;pd v:integer): BOOL; external 'RemoveFontResourceEx{#A}@gdi32.dll stdcall';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Font.ttf');
AddFontResource(ExpandConstant('{tmp}\Font.ttf'), FR_PRIVATE, 0);
end;

procedure DeinitializeSetup;
begin
RemoveFontResource(ExpandConstant('{tmp}\Font.ttf' ), FR_PRIVATE, 0);
end;

__________________________________________________ ______________

Glad could help with font.

Work on ANSI and UNICODE

Sorry for bad english.
Thank you again man.

This was the result:
1.jpg
Reply With Quote
  #10  
Old 04-02-2013, 06:17
Razor12911's Avatar
Razor12911 Razor12911 is offline
Noob
 
Join Date: Jul 2012
Location: South Africa
Posts: 3,751
Thanks: 2,181
Thanked 11,210 Times in 2,309 Posts
Razor12911 is on a distinguished road
Quote:
Originally Posted by Andre Jesus View Post
Thank you again man.

This was the result:
Attachment 5560
Mhhm, awesome. Hide progressbar and install a new progressbar with .png via PBProc
Reply With Quote
  #11  
Old 05-02-2013, 02:17
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Quote:
Originally Posted by Razor12911 View Post
Mhhm, awesome. Hide progressbar and install a new progressbar with .png via PBProc
Great suggestion.
I will try to do this.

This is complete? (see #158).

Thanks.

Last edited by Andre Jesus; 05-02-2013 at 02:19.
Reply With Quote
  #12  
Old 05-02-2013, 05:11
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
I'm having a problem with the music during installation.
If the operating system volume is at 30%, when I run the installer, it automatically goes to 100%.
Could you suggest a code that does not affect the volume of operating system?

This is the code I'm using:
Code:
#include "botva2.iss"
#include "BASS_Module.iss"

procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('Music.mp3');

  BASS_Init(ExpandConstant('{tmp}\Music.mp3'))
  BASS_CreateOnOffButton(ExpandConstant('{tmp}\MusicButton.png'), 20, 320, 36, 36, 4)
end;

procedure DeinitializeSetup();
begin
  BASS_DeInit;
  gdipShutdown
end;
Thanks in advance.

Last edited by Andre Jesus; 05-02-2013 at 05:13.
Reply With Quote
  #13  
Old 05-02-2013, 05:22
Razor12911's Avatar
Razor12911 Razor12911 is offline
Noob
 
Join Date: Jul 2012
Location: South Africa
Posts: 3,751
Thanks: 2,181
Thanked 11,210 Times in 2,309 Posts
Razor12911 is on a distinguished road
check in bass script. It is best if you use 100 instead of another number.

this usually happens if you are using windows xp
Reply With Quote
  #14  
Old 05-02-2013, 05:46
Razor12911's Avatar
Razor12911 Razor12911 is offline
Noob
 
Join Date: Jul 2012
Location: South Africa
Posts: 3,751
Thanks: 2,181
Thanked 11,210 Times in 2,309 Posts
Razor12911 is on a distinguished road
Quote:
Originally Posted by Andre Jesus View Post
Great suggestion.
I will try to do this.

This is complete? (see #158).

Thanks.
Post #158

Test it.
Reply With Quote
  #15  
Old 09-02-2013, 11:11
Andre Jesus's Avatar
Andre Jesus Andre Jesus is offline
Registered User
 
Join Date: Jun 2012
Location: Brazil
Posts: 70
Thanks: 11
Thanked 0 Times in 0 Posts
Andre Jesus is on a distinguished road
Quote:
Originally Posted by Razor12911 View Post
Mhhm, awesome. Hide progressbar and install a new progressbar with .png via PBProc
Can you please show an example?
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
INNO TROUBLESHOOT - Tutorials and Answers about INNO Setup REV0 Conversion Tutorials 129 21-05-2021 05:51
INNO TUTORIAL - Using Unicode and ANSI Versions of INNO Setup REV0 Conversion Tutorials 51 26-03-2015 06:57
Frequently Asked Questions Joe Forster/STA PC Games - Frequently Asked Questions 0 29-11-2005 09:48



All times are GMT -7. The time now is 10:53.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com