#586
|
||||
|
||||
Quote:
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. |
The Following 4 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
Sponsored Links |
#587
|
||||
|
||||
Quote:
Last edited by audiofeel; 27-12-2023 at 11:06. |
#588
|
||||
|
||||
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; |
The Following User Says Thank You to hitman797 For This Useful Post: | ||
audiofeel (07-10-2023) |
#589
|
||||
|
||||
Quote:
|
The Following User Says Thank You to audiofeel For This Useful Post: | ||
hitman797 (07-10-2023) |
#590
|
||||
|
||||
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; |
#591
|
||||
|
||||
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:
Last edited by BLACKFIRE69; 07-10-2023 at 09:38. |
#592
|
||||
|
||||
Quote:
|
The Following User Says Thank You to audiofeel For This Useful Post: | ||
hitman797 (08-10-2023) |
#594
|
||||
|
||||
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. |
The Following 3 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
#595
|
||||
|
||||
Quote:
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; 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; 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 Code:
procedure ListBoxItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); Code:
function GetText: WideString; Last edited by hitman797; 08-10-2023 at 15:48. |
The Following User Says Thank You to hitman797 For This Useful Post: | ||
audiofeel (08-10-2023) |
#596
|
||||
|
||||
Quote:
i think you may not have noticed that FMXInno has already included these things. Quote:
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:
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; 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:
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); |
#597
|
|||
|
|||
Update first post please. I also ask you to mark the version that indicates this update.
|
The Following User Says Thank You to Tihiy_Don For This Useful Post: | ||
Behnam2018 (11-10-2023) |
#598
|
||||
|
||||
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; Code:
FMXImagelist.FCreate; if FMXImagelist.Count > 0 then begin ....... Last edited by audiofeel; 09-10-2023 at 00:05. |
The Following User Says Thank You to audiofeel For This Useful Post: | ||
hitman797 (09-10-2023) |
#599
|
||||
|
||||
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; Last edited by hitman797; 09-10-2023 at 12:50. |
The Following 2 Users Say Thank You to hitman797 For This Useful Post: | ||
audiofeel (09-10-2023), Behnam2018 (11-10-2023) |
#600
|
||||
|
||||
Quote:
in the next update of FMXInno, i'll add these missing properties. Quote:
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; |
The Following 3 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
Thread Tools | |
Display Modes | |
|
|
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 |