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

Reply
 
Thread Tools Display Modes
  #586  
Old 06-10-2023, 16:16
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,400 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Quote:
Originally Posted by audiofeel View Post
Preliminarily... failure at startup occurs only if the script is built on version 5.6.1. On version 6.2.2, I have not noticed any failures yet. I could be wrong . It is possible that something is wrong with my pc machine. Or I have a mistake in the script.
youtu.be


sorry for the delayed response; i've been quite busy these past few days and, to be honest, i haven't had a good night's sleep in two days.


it seems that the wGetLogicalDriveList function doesn't function as expected in InnoSetup v5.x. however, the FLogicalDrives class works reliably across all scenarios and has undergone thorough testing.


Code:
type
  FLogicalDrives = interface(IUnknown)
    '{73D9B3A3-6571-474E-B043-7DC8D3248538}'
    procedure FCreate;
    function Count: Integer;
    function CDriveIndex: Integer;
    function Letter(const Index: Integer): WideString;
    function LetterToIndex(const Letter: WideString): Integer;
    function IsRemovable(const Index: Integer): Boolean;
    function MediaType(const Index: Integer): Integer;
    function MediaTypeEx(const Index: Integer; out HealthStatus, Usage: Integer): Integer;
    function SpaceFreeMB(const Index: Integer): Integer;
    function SpaceAvailableMB(const Index: Integer): Integer;
    function SpaceTotalMB(const Index: Integer): Integer;
  end;

Code:
{ Drive Media Type }
const
  HDD_MEDIA_TYPE_UNKNOWN        = $0000;
  HDD_MEDIA_TYPE_USB            = $0001;
  HDD_MEDIA_TYPE_SD             = $0002;
  HDD_MEDIA_TYPE_HDD            = $0003;
  HDD_MEDIA_TYPE_SSD            = $0004;
  HDD_MEDIA_TYPE_SCM            = $0005;
  HDD_MEDIA_TYPE_NVMe           = $0006;

{ Drive Health }
const
  HDD_HEALTH_STATUS_HEALTHY     = $0000;
  HDD_HEALTH_STATUS_WARNING     = $0001;
  HDD_HEALTH_STATUS_UNHEALTHY   = $0002;
  HDD_HEALTH_STATUS_UNKNOWN     = $0005;

{ Drive Usage }
const
  HDD_USAGE_UNKWOWN             = $0000;
  HDD_USAGE_AUTO_SELECT         = $0001; // used for data storage.
  HDD_USAGE_MANUAL_SELECT       = $0002; // used if manually selected by an administrator at the time of virtual disk creation.
  HDD_USAGE_RETIRED             = $0004; // retired from use
  HDD_USAGE_CACHE               = $0005; // used as a cache for other devices.

Code:
  { LogicalDrives }
  LogicalDrives.FCreate;

  if LogicalDrives.Count > 0 then
  begin
    { ListBox }
    ListBox.FCreate(FMXForm.Handle);
    ListBox.SetBounds(NSX(32), NSY(53), NSX(297), NSY(249));
    ListBox.OnChange(@ListBoxOnChange);

    if ImgList.Count >= 2 then
      ListBox.ImageList(ImgList.Handle);

    { ListBox-Items }
    SetArrayLength(ListBoxItems, LogicalDrives.Count);

    ListBox.BeginUpdate;   // BeginUpdate
    for i := 0 to LogicalDrives.Count - 1 do
    begin
      ListBoxItems[i] := InitListBoxItemHandle;
      ListBoxItems[i].FCreate(ListBox.Handle);
      ListBoxItems[i].Text(LogicalDrives.Letter(i));

      if (ImgList.Count >= 2) then
      begin
        if (i = LogicalDrives.CDriveIndex) then  // C-Drive
          ListBoxItems[i].ImageIndex(0)
        else
          ListBoxItems[i].ImageIndex(1);
      end;

      ListBox.AddItem(ListBoxItems[i].Handle);
    end;
    ListBox.EndUpdate;     // EndUpdate
  end else
    MsgBox('"LogicalDrives" failded!', mbError, MB_OK);

.

Last edited by BLACKFIRE69; 14-07-2024 at 03:10.
Reply With Quote
The Following 4 Users Say Thank You to BLACKFIRE69 For This Useful Post:
audiofeel (06-10-2023), Behnam2018 (06-10-2023), ffmla (07-10-2023), hitman797 (06-10-2023)
Sponsored Links
  #587  
Old 07-10-2023, 04:01
audiofeel's Avatar
audiofeel audiofeel is online now
Registered User
 
Join Date: Jan 2013
Location: Russia
Posts: 369
Thanks: 443
Thanked 856 Times in 311 Posts
audiofeel is on a distinguished road
Quote:
Originally Posted by BLACKFIRE69 View Post
sorry for the delayed response; i've been quite busy these past few days and, to be honest, i haven't had a good night's sleep in two days.

it seems that the wGetLogicalDriveList function doesn't function as expected in InnoSetup v5.x. however, the FLogicalDrives class works reliably across all scenarios and has undergone thorough testing.
.
Thanks for the hotfix. It seems that everything you need is working properly.

Last edited by audiofeel; 27-12-2023 at 11:06.
Reply With Quote
The Following 2 Users Say Thank You to audiofeel For This Useful Post:
ADMIRAL (11-10-2023), hitman797 (07-10-2023)
  #588  
Old 07-10-2023, 04:05
hitman797's Avatar
hitman797 hitman797 is offline
Registered User
 
Join Date: Feb 2013
Location: Algeria
Posts: 168
Thanks: 449
Thanked 182 Times in 118 Posts
hitman797 is on a distinguished road
System.SysUtils and System.IOUtils Unite:
Code:
procedure TForm8.Button1Click(Sender: TObject);
var
  i: Integer;
  hFileName: String;
  hDirArray, hFileArray: TStringDynArray;
begin
  ListBox1.Items.Clear;
  ListBox1.BeginUpdate;
  hFileName := 'C:\Windows';
  ListBox1.Items.Add(ExtractFileName(hFileName));
  hDirArray := TDirectory.GetDirectories(hFileName);
  for hFileName in hDirArray do
  begin
    ListBox1.Items.Add(ExtractFileName(hFileName));
  end;
{  hFileArray := TDirectory.GetFiles(hFileName);
  for hFileName in hFileArray do
  begin
    ListBox1.Items.Add(ExtractFileName(hFileName));
  end;  }
  ListBox1.EndUpdate;
end;
Attached Images
File Type: png Capture.PNG (129.8 KB, 123 views)
Attached Files
File Type: 7z Project8.7z (9.66 MB, 13 views)
Reply With Quote
The Following User Says Thank You to hitman797 For This Useful Post:
audiofeel (07-10-2023)
  #589  
Old 07-10-2023, 04:24
audiofeel's Avatar
audiofeel audiofeel is online now
Registered User
 
Join Date: Jan 2013
Location: Russia
Posts: 369
Thanks: 443
Thanked 856 Times in 311 Posts
audiofeel is on a distinguished road
Quote:
Originally Posted by hitman797 View Post
System.SysUtils and System.IOUtils Unite:
Code:
procedure TForm8.Button1Click(Sender: TObject);
var
  i: Integer;
  hFileName: String;
  hDirArray, hFileArray: TStringDynArray;
begin
  ListBox1.Items.Clear;
  ListBox1.BeginUpdate;
  hFileName := 'C:\Windows';
  ListBox1.Items.Add(ExtractFileName(hFileName));
  hDirArray := TDirectory.GetDirectories(hFileName);
  for hFileName in hDirArray do
  begin
    ListBox1.Items.Add(ExtractFileName(hFileName));
  end;
{  hFileArray := TDirectory.GetFiles(hFileName);
  for hFileName in hFileArray do
  begin
    ListBox1.Items.Add(ExtractFileName(hFileName));
  end;  }
  ListBox1.EndUpdate;
end;
Yes, it definitely falls more into the general style than the finished Foldertreeview and F StartMenuFolderTreeView. Foldertreeview and Foldstartmenufoldertreeview seem to be older already, like from Windows 98.
Reply With Quote
The Following User Says Thank You to audiofeel For This Useful Post:
hitman797 (07-10-2023)
  #590  
Old 07-10-2023, 06:52
hitman797's Avatar
hitman797 hitman797 is offline
Registered User
 
Join Date: Feb 2013
Location: Algeria
Posts: 168
Thanks: 449
Thanked 182 Times in 118 Posts
hitman797 is on a distinguished road
Code:
procedure TDialogForm.Button1Click(Sender: TObject);
begin
  if length(Label1.Text) = 3 then
  begin
    CreateDir(Label1.Text+Edit1.Text);
    Label1.Text:= Label1.Text+Edit1.Text;
  end else begin
    CreateDir(Label1.Text+'\'+Edit1.Text);
    Label1.Text:= Label1.Text+'\'+Edit1.Text;
  end;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.FormCreate(Sender: TObject);
var
 hDriveArry: TStringDynArray;
 hDriveName: String;
begin
  ListBox1.Clear;
  ListBox1.BeginUpdate;
  hDriveArry:= TDirectory.GetLogicalDrives;
  for hDriveName in hDriveArry do
  begin
   ListBox1.Items.Add(hDriveName);
  end;
  ListBox1.EndUpdate;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.ListBox1ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
begin
  Label1.Text:= ListBox1.Items.Strings[ListBox1.ItemIndex];
  Timer1.Enabled:= True;
end;

procedure TDialogForm.ListBox2ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
begin
  if length(Label1.Text) = 3 then
  begin
    Label1.Text:= Label1.text+ListBox2.Items.Strings[ListBox2.ItemIndex];
  end else begin
    Label1.Text:= Label1.text+'\'+ListBox2.Items.Strings[ListBox2.ItemIndex];
  end;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.SpeedButton1Click(Sender: TObject);
begin
  Label1.Text:= 'C:\Windows';
  Timer1.Enabled:= True;
end;

procedure TDialogForm.SpeedButton2Click(Sender: TObject);
begin
  Label1.Text:= ExtractFileDir(Label1.Text);
  Timer1.Enabled:= True;
end;

procedure TDialogForm.Timer1Timer(Sender: TObject);
var
 hDirArry: TStringDynArray;
 hDirName: String;
begin
  ListBox2.Clear;
  ListBox2.BeginUpdate;
  hDirName:= Label1.Text;
  hDirArry:= TDirectory.GetDirectories(hDirName);
  for hDirName in hDirArry do
  begin
    ListBox2.Items.Add(ExtractFileName(hDirName));
  end;
  ListBox2.EndUpdate;
  Timer1.Enabled:= False;
end;
Attached Images
File Type: png Capture.PNG (20.5 KB, 116 views)
Attached Files
File Type: 7z Project9.7z (10.59 MB, 27 views)
Reply With Quote
The Following 2 Users Say Thank You to hitman797 For This Useful Post:
ADMIRAL (14-11-2023), audiofeel (08-10-2023)
  #591  
Old 07-10-2023, 09:29
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,400 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Question Testing

Testing:

guys, if any of you happen to have some free time and are using virtual machines other than VMware 17.x, could you please test this on them?











Quote:
Originally Posted by BLACKFIRE69 View Post
sorry for the delayed response; i've been quite busy these past few days and, to be honest, i haven't had a good night's sleep in two days.


it seems that the wGetLogicalDriveList function doesn't function as expected in InnoSetup v5.x. however, the FLogicalDrives class works reliably across all scenarios and has undergone thorough testing.


Code:
type
  FLogicalDrives = interface(IUnknown)
    '{73D9B3A3-6571-474E-B043-7DC8D3248538}'
    procedure FCreate;
    function Count: Integer;
    function CDriveIndex: Integer;
    function Letter(const Index: Integer): WideString;
    function LetterToIndex(const Letter: WideString): Integer;
    function IsRemovable(const Index: Integer): Boolean;
    function MediaType(const Index: Integer): Integer;
    function MediaTypeEx(const Index: Integer; out HealthStatus, Usage: Integer): Integer;
    function SpaceFreeMB(const Index: Integer): Integer;
    function SpaceAvailableMB(const Index: Integer): Integer;
    function SpaceTotalMB(const Index: Integer): Integer;
  end;

Code:
{ Drive Media Type }
const
  HDD_MEDIA_TYPE_UNKNOWN        = $0000;
  HDD_MEDIA_TYPE_USB            = $0001;
  HDD_MEDIA_TYPE_SD             = $0002;
  HDD_MEDIA_TYPE_HDD            = $0003;
  HDD_MEDIA_TYPE_SSD            = $0004;
  HDD_MEDIA_TYPE_SCM            = $0005;
  HDD_MEDIA_TYPE_NVMe           = $0006;

{ Drive Health }
const
  HDD_HEALTH_STATUS_HEALTHY     = $0000;
  HDD_HEALTH_STATUS_WARNING     = $0001;
  HDD_HEALTH_STATUS_UNHEALTHY   = $0002;
  HDD_HEALTH_STATUS_UNKNOWN     = $0005;

{ Drive Usage }
const
  HDD_USAGE_UNKWOWN             = $0000;
  HDD_USAGE_AUTO_SELECT         = $0001; // used for data storage.
  HDD_USAGE_MANUAL_SELECT       = $0002; // used if manually selected by an administrator at the time of virtual disk creation.
  HDD_USAGE_RETIRED             = $0004; // retired from use
  HDD_USAGE_CACHE               = $0005; // used as a cache for other devices.

Code:
  { LogicalDrives }
  LogicalDrives.FCreate;

  if LogicalDrives.Count > 0 then
  begin
    { ListBox }
    ListBox.FCreate(FMXForm.Handle);
    ListBox.SetBounds(NSX(32), NSY(53), NSX(297), NSY(249));
    ListBox.OnChange(@ListBoxOnChange);

    if ImgList.Count >= 2 then
      ListBox.ImageList(ImgList.Handle);

    { ListBox-Items }
    SetArrayLength(ListBoxItems, LogicalDrives.Count);

    ListBox.BeginUpdate;   // BeginUpdate
    for i := 0 to LogicalDrives.Count - 1 do
    begin
      ListBoxItems[i] := InitListBoxItemHandle;
      ListBoxItems[i].FCreate(ListBox.Handle);
      ListBoxItems[i].Text(LogicalDrives.Letter(i));

      if (ImgList.Count >= 2) then
      begin
        if (i = LogicalDrives.CDriveIndex) then  // C-Drive
          ListBoxItems[i].ImageIndex(0)
        else
          ListBoxItems[i].ImageIndex(1);
      end;

      ListBox.AddItem(ListBoxItems[i].Handle);
    end;
    ListBox.EndUpdate;     // EndUpdate
  end else
    MsgBox('"LogicalDrives" failded!', mbError, MB_OK);

.

Last edited by BLACKFIRE69; 07-10-2023 at 09:38.
Reply With Quote
The Following 2 Users Say Thank You to BLACKFIRE69 For This Useful Post:
audiofeel (07-10-2023), hitman797 (07-10-2023)
  #592  
Old 07-10-2023, 23:56
audiofeel's Avatar
audiofeel audiofeel is online now
Registered User
 
Join Date: Jan 2013
Location: Russia
Posts: 369
Thanks: 443
Thanked 856 Times in 311 Posts
audiofeel is on a distinguished road
Quote:
Originally Posted by hitman797 View Post
Code:
procedure TDialogForm.Button1Click(Sender: TObject);
begin
  if length(Label1.Text) = 3 then
  begin
    CreateDir(Label1.Text+Edit1.Text);
    Label1.Text:= Label1.Text+Edit1.Text;
  end else begin
    CreateDir(Label1.Text+'\'+Edit1.Text);
    Label1.Text:= Label1.Text+'\'+Edit1.Text;
  end;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.FormCreate(Sender: TObject);
var
 hDriveArry: TStringDynArray;
 hDriveName: String;
begin
  ListBox1.Clear;
  ListBox1.BeginUpdate;
  hDriveArry:= TDirectory.GetLogicalDrives;
  for hDriveName in hDriveArry do
  begin
   ListBox1.Items.Add(hDriveName);
  end;
  ListBox1.EndUpdate;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.ListBox1ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
begin
  Label1.Text:= ListBox1.Items.Strings[ListBox1.ItemIndex];
  Timer1.Enabled:= True;
end;

procedure TDialogForm.ListBox2ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
begin
  if length(Label1.Text) = 3 then
  begin
    Label1.Text:= Label1.text+ListBox2.Items.Strings[ListBox2.ItemIndex];
  end else begin
    Label1.Text:= Label1.text+'\'+ListBox2.Items.Strings[ListBox2.ItemIndex];
  end;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.SpeedButton1Click(Sender: TObject);
begin
  Label1.Text:= 'C:\Windows';
  Timer1.Enabled:= True;
end;

procedure TDialogForm.SpeedButton2Click(Sender: TObject);
begin
  Label1.Text:= ExtractFileDir(Label1.Text);
  Timer1.Enabled:= True;
end;

procedure TDialogForm.Timer1Timer(Sender: TObject);
var
 hDirArry: TStringDynArray;
 hDirName: String;
begin
  ListBox2.Clear;
  ListBox2.BeginUpdate;
  hDirName:= Label1.Text;
  hDirArry:= TDirectory.GetDirectories(hDirName);
  for hDirName in hDirArry do
  begin
    ListBox2.Items.Add(ExtractFileName(hDirName));
  end;
  ListBox2.EndUpdate;
  Timer1.Enabled:= False;
end;
I don't quite understand what the timer is for?
Reply With Quote
The Following User Says Thank You to audiofeel For This Useful Post:
hitman797 (08-10-2023)
  #593  
Old 08-10-2023, 02:03
hitman797's Avatar
hitman797 hitman797 is offline
Registered User
 
Join Date: Feb 2013
Location: Algeria
Posts: 168
Thanks: 449
Thanked 182 Times in 118 Posts
hitman797 is on a distinguished road
Quote:
Originally Posted by audiofeel View Post
I don't quite understand what the timer is for?
A timer is set to update the listbox when we change the path in the label.
Reply With Quote
The Following User Says Thank You to hitman797 For This Useful Post:
audiofeel (08-10-2023)
  #594  
Old 08-10-2023, 13:45
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,400 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Arrow FMXInno - Updates

FMXInno - Updates

Code:
FMXInno - Changes

1. Added new classes:
   - FTreeView
   - FTreeViewItem
   - FMenuBar
   - FMenuBarItem

2. FCheckboxTree - Removed the following properties:
   - procedure Selectable(FEnable: Boolean)
   - procedure RemoveBckgnd

3. Added some new functions.

4. Some improvements:
   - TitleBar
   - FForm

5. Bug Fixing.

TreeView + MainMenu:


Code:
{ MainMenu }
  PMenuBar.FCreate(FMXForm.Handle);
  PMenuBar.ImageList(ImgList.Handle);

  { Home }
  pMenuItem[1].FCreate(PMenuBar.Handle);
  pMenuItem[1].Text('Home');
  pMenuItem[1].ImageIndex(0);
  PMenuBar.AddItem(pMenuItem[1].Handle);

  pMenuItem[2].FCreate(pMenuItem[1].Handle);
  pMenuItem[2].Text('Open');
  pMenuItem[2].ShortCut(wGetShortCut(vkO, [ssCtrl]));
  pMenuItem[2].ImageIndex(1);
  pMenuItem[2].OnClick(@CommonOnClick);
  pMenuItem[1].AddItem(pMenuItem[2].Handle);

  ...
{ MainMenu }

Code:
{ TreeView 1 - Left }
  kTreeView.FCreate(FMXForm.Handle);
  kTreeView.SetBounds(NSX(40), NSY(120), NSX(249), NSY(329));
  kTreeView.ImageList(ImgList.Handle);

  kTreeViewItem[1].FCreate(kTreeView.Handle);     // User
  kTreeViewItem[1].ImageIndex(20);
  kTreeViewItem[1].Text(GetUserNameString);
  kTreeViewItem[1].Margins(NSX(-20),0,0,0);
  kTreeView.AddItem(kTreeViewItem[1].Handle);

  kTreeViewItem[2].FCreate(kTreeView.Handle);     // Desktop
  kTreeViewItem[2].ImageIndex(21);
  kTreeViewItem[2].Text('Desktop');
  kTreeViewItem[2].Margins(NSX(-20),0,0,0);
  kTreeView.AddItem(kTreeViewItem[2].Handle);

  ...
{ TreeView 1 - Left }

Code:
{ TreeView 2 - Right }
  mTreeView.FCreate(FMXForm.Handle);
  mTreeView.SetBounds(NSX(340), NSY(120), NSX(249), NSY(329));
  mTreeView.ShowCheckboxes(True);

  mTreeViewItem[1].FCreate(mTreeView.Handle);
  mTreeViewItem[1].StyledSettings([]);
  mTreeViewItem[1].FontSettings('Segoe UI', 12, AlRed, [fsBold, fsUnderline]);
  mTreeViewItem[1].Text('Come, Let''s Destroy Our World!');
  mTreeView.AddItem(mTreeViewItem[1].Handle);

  { Weapon Preset }
  mTreeViewItem[2].FCreate(mTreeViewItem[1].Handle);
  mTreeViewItem[2].StyledSettings([]);
  mTreeViewItem[2].FontSettings('Segoe UI', 12, AlBlue, [fsBold]);
  mTreeViewItem[2].Text('Weapon Preset');
  mTreeViewItem[1].AddItem(mTreeViewItem[2].Handle);

  mTreeViewItem[3].FCreate(mTreeViewItem[2].Handle);
  mTreeViewItem[3].Text('Soviet');
  mTreeViewItem[2].AddItem(mTreeViewItem[3].Handle);

  ...
{ TreeView 2 - Right }

.

Last edited by BLACKFIRE69; 14-07-2024 at 03:10.
Reply With Quote
The Following 3 Users Say Thank You to BLACKFIRE69 For This Useful Post:
audiofeel (08-10-2023), hitman797 (08-10-2023), Lord.Freddy (09-10-2023)
  #595  
Old 08-10-2023, 15:07
hitman797's Avatar
hitman797 hitman797 is offline
Registered User
 
Join Date: Feb 2013
Location: Algeria
Posts: 168
Thanks: 449
Thanked 182 Times in 118 Posts
hitman797 is on a distinguished road
Quote:
Originally Posted by BLACKFIRE69 View Post
FMXInno - Updates

Code:
FMXInno - Changes

1. Added new classes:
   - FTreeView
   - FTreeViewItem
   - FMenuBar
   - FMenuBarItem

2. FCheckboxTree - Removed the following properties:
   - procedure Selectable(FEnable: Boolean)
   - procedure RemoveBckgnd

3. Added some new functions.

4. Some improvements:
   - TitleBar
   - FForm

5. Bug Fixing.
.
Great job my friend, thank you.
Code:
procedure TDialogForm.Button1Click(Sender: TObject);
begin
  if length(Label1.Text) = 3 then
  begin
    CreateDir(Label1.Text+Edit1.Text);
    Label1.Text:= Label1.Text+Edit1.Text;
  end else begin
    CreateDir(Label1.Text+'\'+Edit1.Text);
    Label1.Text:= Label1.Text+'\'+Edit1.Text;
  end;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.FormCreate(Sender: TObject);
var
 hDriveArry: TStringDynArray;
 hDriveName: String;
begin
  ListBox1.Clear;
  ListBox1.BeginUpdate;
  hDriveArry:= TDirectory.GetLogicalDrives;
  for hDriveName in hDriveArry do
  begin
   ListBox1.Items.Add(hDriveName);
  end;
  ListBox1.EndUpdate;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.ListBox1ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
begin
  Label1.Text:= ListBox1.Items.Strings[ListBox1.ItemIndex];
  Timer1.Enabled:= True;
end;

procedure TDialogForm.ListBox2ItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
begin
  if length(Label1.Text) = 3 then
  begin
    Label1.Text:= Label1.text+ListBox2.Items.Strings[ListBox2.ItemIndex];
  end else begin
    Label1.Text:= Label1.text+'\'+ListBox2.Items.Strings[ListBox2.ItemIndex];
  end;
  Timer1.Enabled:= True;
end;

procedure TDialogForm.SpeedButton1Click(Sender: TObject);
begin
  Label1.Text:= 'C:\Windows';
  Timer1.Enabled:= True;
end;

procedure TDialogForm.SpeedButton2Click(Sender: TObject);
begin
  Label1.Text:= ExtractFileDir(Label1.Text);
  Timer1.Enabled:= True;
end;

procedure TDialogForm.Timer1Timer(Sender: TObject);
var
 hDirArry: TStringDynArray;
 hDirName: String;
begin
  ListBox2.Clear;
  ListBox2.BeginUpdate;
  hDirName:= Label1.Text;
  hDirArry:= TDirectory.GetDirectories(hDirName);
  for hDirName in hDirArry do
  begin
    ListBox2.Items.Add(ExtractFileName(hDirName));
  end;
  ListBox2.EndUpdate;
  Timer1.Enabled:= False;
end;
in innosetup we have this function.
Code:
function Length(S: String): Longint;
function CreateDir(const Dir: String): Boolean;
function RemoveDir(const Dir: String): Boolean;
//
function ExtractFileExt(const FileName: String): String;
function ExtractFileDir(const FileName: String): String;
function ExtractFilePath(const FileName: String): String;
function ExtractFileName(const FileName: String): String;
function ExtractFileDrive(const FileName: String): String;
//
function GetCurrentDir: String;
function SetCurrentDir(const Dir: String): Boolean;
function GetWinDir: String;
function GetSystemDir: String;
function GetSysWow64Dir: String;
function GetTempDir: String;
but we need to add this function:
System.IOUtils:
Code:
function TDirectory.GetFiles(const Path: string): TStringDynArray;
function TDirectory.GetDirectories(const Path: string): TStringDynArray;
function TDirectory.GetLogicalDrives: TStringDynArray;
TArrayOfString = array of String; in innosetup
ListBox:
Code:
procedure ListBoxItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
Label:
Code:
function GetText: WideString;
Attached Images
File Type: png Capture.PNG (35.2 KB, 103 views)

Last edited by hitman797; 08-10-2023 at 15:48.
Reply With Quote
The Following User Says Thank You to hitman797 For This Useful Post:
audiofeel (08-10-2023)
  #596  
Old 08-10-2023, 17:47
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,400 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Quote:
Originally Posted by hitman797 View Post
but we need to add this function:
System.IOUtils:
Code:
function TDirectory.GetFiles(const Path: string): TStringDynArray;
function TDirectory.GetDirectories(const Path: string): TStringDynArray;
function TDirectory.GetLogicalDrives: TStringDynArray;
TArrayOfString = array of String; in innosetup
ListBox:
Code:
procedure ListBoxItemClick(const Sender: TCustomListBox;
  const Item: TListBoxItem);
Label:
Code:
function GetText: WideString;


i think you may not have noticed that FMXInno has already included these things.


Quote:
Originally Posted by hitman797 View Post
Code:
function TDirectory.GetFiles(const Path: string): TStringDynArray;
Code:
var
  FindHandle: Longint;

begin
  FindHandle := pFindFiles('C:\Test01', '*.*', '', ffrkRelative, True, False);

  if FindHandle <> 0 then
  begin
    WinTB1.Text('Files: ' + IntToStr(pFileCount(FindHandle)));

    try
      for i:=0 to pFileCount(FindHandle)-1 do
        Memo.AddLine(pPickFile(FindHandle, i));
    finally
      pFindFree(FindHandle);
    end;
  end;
end;


Quote:
Originally Posted by hitman797 View Post
Code:
function TDirectory.GetDirectories(const Path: string): TStringDynArray;
Code:
var
  FindHandle: Longint;

begin
  FindHandle := pFindFiles('C:\Test01', '*', '', ffrkRelative, True, True);

  if FindHandle <> 0 then
  begin
    WinTB1.Text('Dirs: ' + IntToStr(pDirCount(FindHandle)));

    try
      for i:=0 to pDirCount(FindHandle)-1 do
        Memo.AddLine(pPickDir(FindHandle, i));
    finally
      pFindFree(FindHandle);
    end;
  end;
end;


Quote:
Originally Posted by hitman797 View Post
Code:
function TDirectory.GetLogicalDrives: TStringDynArray;
Code:
begin
  LogicalDrives.FCreate;

  if LogicalDrives.Count > 0 then
  begin
    for i := 0 to LogicalDrives.Count - 1 do
      Memo.AddLine(LogicalDrives.Letter(i));
  end else
    MsgBox('"LogicalDrives" failded!', mbError, MB_OK);
end;


Quote:
Originally Posted by hitman797 View Post
ListBox:
Code:
procedure ListBoxItemClick(const Sender: TCustomListBox; 
  const Item: TListBoxItem);
Code:
procedure ListBoxOnChange(Sender: TObject);
var
  i: integer;
  TargetLstItm: FListBoxItem;
begin
  if ListBox.GetItemIndex > -1 then
  begin
    for i := 0 to length(ListBoxItems)-1 do
      if Sender = TObject(ListBoxItems[i].GetObject) then
      begin
        TargetLstItm := ListBoxItems[i] as FListBoxItem;
        break;
      end;

    WinTB1.Text(TargetLstItm.GeText);
  end;
end;


ListBox.FCreate(FMXForm.Handle);
ListBox.SetBounds(NSX(32), NSY(53), NSX(297), NSY(249));
ListBox.OnChange(@ListBoxOnChange);
Reply With Quote
The Following 2 Users Say Thank You to BLACKFIRE69 For This Useful Post:
audiofeel (08-10-2023), hitman797 (09-10-2023)
  #597  
Old 08-10-2023, 23:21
Tihiy_Don Tihiy_Don is offline
Registered User
 
Join Date: Mar 2023
Location: Los Angeles Lakers
Posts: 42
Thanks: 89
Thanked 23 Times in 16 Posts
Tihiy_Don is on a distinguished road
Update first post please. I also ask you to mark the version that indicates this update.
Reply With Quote
The Following User Says Thank You to Tihiy_Don For This Useful Post:
Behnam2018 (11-10-2023)
  #598  
Old 09-10-2023, 00:02
audiofeel's Avatar
audiofeel audiofeel is online now
Registered User
 
Join Date: Jan 2013
Location: Russia
Posts: 369
Thanks: 443
Thanked 856 Times in 311 Posts
audiofeel is on a distinguished road
slideshow FMX

Someone show an example of how to make a slideshow with an unknown (that is, the initial number of images can be any but not less than one) number of images. The user decided to use only 7 slides instead of 12, the script does not give an error and continues to work. I found something like this on the web .... like "FImagelist.Count"is . But here's how to do it all I do not output.
Now I use it like this, through a timer.
Code:
for i:= 1 to 10 do
  begin
    FMXTabItem[i].FCreateEx(FMXTabControl[1].Handle);
    FMXImage[i].FCreate(FMXTabItem[i].Handle);
    FMXImage[i].Align(Client);
    SImg:= 'img' + IntToStr(i) + '.jpg';
    FMXImage[i].LoadPicture(ExtractAndLoad(SImg), wmTileStretch);
  end;
I guess that's about like this
Code:
  FMXImagelist.FCreate;
  if FMXImagelist.Count > 0 then
  begin
.......

Last edited by audiofeel; 09-10-2023 at 00:05.
Reply With Quote
The Following User Says Thank You to audiofeel For This Useful Post:
hitman797 (09-10-2023)
  #599  
Old 09-10-2023, 12:45
hitman797's Avatar
hitman797 hitman797 is offline
Registered User
 
Join Date: Feb 2013
Location: Algeria
Posts: 168
Thanks: 449
Thanked 182 Times in 118 Posts
hitman797 is on a distinguished road
FLabel:
function GetText: WideString; don't work.
FTimer:
function GetObject: LongInt;
FFloatAnimation:
function GetObject: LongInt;

Code:
procedure OnTimer6(Sender: TObject);
var
  i: Integer;
  FindHandle: Longint;
begin
  FindHandle:= pFindFiles(FMXLabel[197].GetText, '*', '', ffrkRelative, False, True);
  if FindHandle <> 0 then
  begin
    SetArrayLength(ListBoxItems, pDirCount(FindHandle));
    FMXListBox[3].BeginUpdate;
    try
      for i:= 0 to pDirCount(FindHandle) -1 do
      begin
      ListBoxItems[i]:= InitListBoxItemHandle;
      ListBoxItems[i].FCreate(FMXListBox[3].Handle);
      ListBoxItems[i].Text(ExtractFileName(pPickDir(FindHandle, i)));
      FMXListBox[3].AddItem(ListBoxItems[i].Handle);
      end;
    finally
    pFindFree(FindHandle);
    FMXListBox[3].EndUpdate;
end;
  FMXTimer[6].Enabled(False);
end;
end;
Attached Images
File Type: png Capture.png (568.5 KB, 89 views)

Last edited by hitman797; 09-10-2023 at 12:50.
Reply With Quote
The Following 2 Users Say Thank You to hitman797 For This Useful Post:
audiofeel (09-10-2023), Behnam2018 (11-10-2023)
  #600  
Old 09-10-2023, 22:52
BLACKFIRE69's Avatar
BLACKFIRE69 BLACKFIRE69 is offline
Registered User
 
Join Date: Mar 2019
Location: In the Hell
Posts: 670
Thanks: 471
Thanked 2,400 Times in 544 Posts
BLACKFIRE69 is on a distinguished road
Quote:
Originally Posted by hitman797 View Post
FLabel:
function GetText: WideString; don't work.
FTimer:
function GetObject: LongInt;
FFloatAnimation:
function GetObject: LongInt;

in the next update of FMXInno, i'll add these missing properties.



Quote:
Originally Posted by hitman797 View Post
Code:
procedure OnTimer6(Sender: TObject);
var
  i: Integer;
  FindHandle: Longint;
begin
  FindHandle:= pFindFiles(FMXLabel[197].GetText, '*', '', ffrkRelative, False, True);
  if FindHandle <> 0 then
  begin
    SetArrayLength(ListBoxItems, pDirCount(FindHandle));
    FMXListBox[3].BeginUpdate;
    try
      for i:= 0 to pDirCount(FindHandle) -1 do
      begin
      ListBoxItems[i]:= InitListBoxItemHandle;
      ListBoxItems[i].FCreate(FMXListBox[3].Handle);
      ListBoxItems[i].Text(ExtractFileName(pPickDir(FindHandle, i)));
      FMXListBox[3].AddItem(ListBoxItems[i].Handle);
      end;
    finally
    pFindFree(FindHandle);
    FMXListBox[3].EndUpdate;
end;
  FMXTimer[6].Enabled(False);
end;
end;


try this way...


Code:
procedure OnTimer6(Sender: TObject);
var
  ...
begin
  FindHandle:= pFindFiles(FMXLabel[197].GetText, '*', '', ffrkOnlyName, False, True);
  if FindHandle <> 0 then
  begin
    ...
    try
      for i:= 0 to pDirCount(FindHandle) -1 do
      begin
      ...
      ListBoxItems[i].Text(pPickDir(FindHandle, i));
      ...
      end;
    finally
    ...
end;
  ...
end;
end;
Reply With Quote
The Following 3 Users Say Thank You to BLACKFIRE69 For This Useful Post:
audiofeel (10-10-2023), Behnam2018 (11-10-2023), hitman797 (10-10-2023)
Reply

Thread Tools
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
Windows Fluent Effects Standalone API - InnoSetup / VCL / FXM BLACKFIRE69 Conversion Tutorials 0 15-11-2023 18:35
Windows Phone Installer similar to razor12911's original design? Kitsune1982 Conversion Tutorials 0 02-07-2020 14:04
INDEX - Conversion Tutorial Index Razor12911 Conversion Tutorials 5 11-06-2020 03:05
Frequently Asked Questions Joe Forster/STA PC Games - Frequently Asked Questions 0 29-11-2005 10:48



All times are GMT -7. The time now is 16:43.


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