View Full Version : FMXInno - Windows Fluent Design Installer UI for Inno
XH75819116
27-05-2023, 22:31
What is the reason for my newbie getting stuck when exiting
XH75819116
27-05-2023, 22:33
Seeking guidance from the leader
tayeb1992
10-06-2023, 01:23
What is the reason for my newbie getting stuck when exiting.
Seeking guidance from the leader
Download the full source code from the first post.
FMXInno + FMXInnoSkia - Final Release [2023-Apr-21].7z (https://fileforums.com/attachment.php?attachmentid=34449&d=1682187368)
BLACKFIRE69
11-06-2023, 09:30
Google's Bard AI for FMXInno
i've got a solid shot at integrating the Google's Bard AI into the FMXInno plugin. i'm really curious to know what you think about it. would you be interested in having the Bard AI as a feature of the FMXInno plugin?
Tihiy_Don
11-06-2023, 10:59
Google's Bard AI for FMXInno
i've got a solid shot at integrating the Google's Bard AI into the FMXInno plugin. i'm really curious to know what you think about it. would you be interested in having the Bard AI as a feature of the FMXInno plugin?
not interesting.
tayeb1992
14-06-2023, 00:09
Developer suggestions:
Hi BLACKFIRE69, thank you for everything you've added to this library.
If the following components are added, it will be great.
Feature of the FMXInno plugin:
TabControl: TTabControl;
TabItem: TTabItem;
ActionList: TActionList;
ChangeTabAction: TChangeTabAction;
NextTabAction: TNextTabAction;
PreviousTabAction: TPreviousTabAction;
GridLayout: TGridLayout;
Viewport3D: TViewport3D;
Layer3D: TLayer3D;
XH75819116
14-06-2023, 18:36
Download the full source code from the first post.
FMXInno + FMXInnoSkia - Final Release [2023-Apr-21].7z (https://fileforums.com/attachment.php?attachmentid=34449&d=1682187368)
I have found the problem and can solve it by adding just one code, but without the source code, I don't know why?
Tihiy_Don
16-06-2023, 01:04
Is it possible to remove border that is shown around the CheckboxTree?
tayeb1992
16-06-2023, 06:33
Is it possible to remove border that is shown around the CheckboxTree?
Remove border in the styles using Bitmap Style Designer in Delphi.
Tihiy_Don
25-06-2023, 22:23
Add the ability to overlay the video background on the form when creating it, by analogy with the image.
Hi Audiofeel,
Thank you for sharing these amazing installers. However, I've found that while running the setup.exe files, for some a white screen initially loads followed by the content of the installer (attached in screenshot), which I feel can be annoying sometime. Is there any way we can bypass or fix?
Hi audiofeel,
Tried this and worked like a charm. I saw the changes and was able to even fix couple of other installers shared by you. However, I was unable to fix the same in Redshank Installer. FMXForm.FCreateImageForm was throwing an exception when trying to run setup.exe of Redshank Installer. Any recommendations?
Hi audiofeel,
I'm an inch away from completing work on Redshank installer, and just need a last favor. Thank you for the DLL and its working fine as of now, but there seems to be few issues. The .exe file runs fine when in the 'Output' Folder, but as soon as you move it the to a different directory, the defender blocks it completely from running. Tried turning off the Real-time scan and protection and all the other workarounds, but the defender keeps blocking the app. Any fix for that?
Also what version of InnoSetup would be the most compatible with the Installers you shared?
Tihiy_Don
03-07-2023, 22:46
Running the script from the compiler always gives a white window, even for a short interval, but it does. Therefore, it is better to run the compiled file separately not from Inno setup.
-------------------------
Updated FMXInno.dll and FMXInnoHandle.iss module to the latest version + minor script changes for compatibility. ISArcEx is no longer needed for unpacking, it is sewn inside. Hope this helps. Inno 5.5.1.ee2 (u)(build 121216) is suitable for compilation.
Sorry, but with this script there is one more issue:
The installer doesn't close (gets stuck) after there is an IsArcError or Missing Files Window Pop-up
I'm fine with this script. I can't repeat the mistake that occurs to you. Publish the source file here.
Hi audiofeel,
Well, please refer the files. To reproduce the issue:
1. The required files in the Output are obviously missing. So, start the installer normally and navigate to Installation tab. It will show you some error like: Required Files Missing.
2. Try to close it and quit the installer. It doesn't happen. Hard close using Task Manager.
3. Now, open the installer again and try to quit at any point of time. It doesn't close.
Let me know if you're able to refer this link:
https://www.mediafire.com/file/ohrzl0fsg5zu6fd/Redshank_Updated.zip/file
I know there can be some issue with my code. But, if you can help me, I'll learn from you
Did you recompile the script, or just used the setup.exe from the link I shared?
try this
TitleBarBtn[1].Enabled(True)
I tried the new script as well. Thanks for the fix. Please check this video to understand the issue.
[Edit]: I cannot be posting link here. Please check your DM.
When this happens, even if you now restart the installer again and try to quit, it doesn't. The page is just stuck.
There is still an issue with the defender blocking the setup.exe in some cases with Trojan:Win32/Bearfoos.A!ml
Even if you cannot help me in this, I'm fine. It's alright. Thank you for your time and effort already. :)
Hi Everyone,
I along with Audiofeel (https://fileforums.com/member.php?u=202825) have been working on a Redshank v2 Installer Script. Many thanks and grateful to Audiofeel for helping me out with bugs and issues, while upgrading.
This v2 includes:
- MD5 verification support
- FMX Fluent UI and adjusted alignment
- Credits section
- About Game Pop-up
- Color Customization
- srep+lolz extraction support (thanks to sc00t3r (https://fileforums.com/member.php?u=247290)) and -mx extraction support
- Better selective components installation
- Speed of data transfer display on Installation Page
https://www.mediafire.com/file/h0rlghoujzblxrl/Redshank_v2.zip/file
I've just started and if you want can support me by subscribing to my Youtube channel.
https://www.youtube.com/@RandomGamertags
It would be better if it was an original installer with an original design;)
I know :(. But to learn, I started working on an upgrade. I've an idea. Soon with your help, we'll be implementing it ;)
ravikant
22-07-2023, 07:56
Is it possible for you to make a diskspan plugin for your custom scripts
What compression are you trying to extract using DiskSpan GUI that you want to extract from installer?
ravikant
26-07-2023, 05:57
What compression are you trying to extract using DiskSpan GUI that you want to extract from installer?
I want to make backup of my games and store it each game series having a different type of installer
Behnam2018
26-07-2023, 19:44
Hello, I run the script, it doesn't give any action, the setup doesn't run, it's Windows 7:(
BLACKFIRE69
27-07-2023, 06:52
FMXInno v1.0.0.2 - Cumulative Updates [2023-July-27]
(*) The FMXInno_Fluent_API has been upgraded from v1.0 to v2.0.
- The following systems are now supported.
1. Windows 7
2. Windows 8 / 8.1
3. Windows 10
4. Windows 11
5. Windows 12 (Upcoming)
- Note: Ensure your scripts are up-to-date since the "EnableFluent" function
within "FluentApi.dll" has been modified.
(*) Integrated Blend2d - 2D Vector Graphic Engine, to advanced users.
(*) Updated ChatGPT.
- Support extended to the following models.
1. gpt-3.5-turbo
2. gpt-3.5-turbo-0613
3. gpt-3.5-turbo-16k
4. gpt-4
5. gpt-4-0613
6. gpt-4-32k
(*) Added the capability to create Gradient Forms.
- Customizable.
(*) New properties have been introduced into the Form class.
- procedure ChangeFluentTheme(const FDark: Boolean);
- procedure ChangeFluentColor(const VCLColor: TColor);
- procedure PauseFormUpdateOnMove(FValue: Boolean);
- procedure PauseFluentEffectsOnDeacive(FValue: Boolean);
- procedure Invalidate;
(*) Added Global Animator for FMXForm.
- Ex: FMXForm.AnimateFloatWait(ARect.Handle, 'Position.X', NSX(400), 1.2, atInOut, itBack);
(*) Added DiskList blueprint.
- Customizable.
(*) Added percentage indicator for ThinProgressBar class.
- Customizable.
(*) Added StopWatch class.
(*) Added Math class.
(*) New properties have been introduced into the following classes.
1. WinMacTitleBar class.
2. DynamicTiles class.
3. SideMenuItem class.
4. Fluent Dir/Start Browse class.
(*) Added a pair of new functions.
1. function wIsDriveRemovable(const DriveLetter: WideString): Boolean;
2. function wGetDriveMediaType(const DriveLetter: WideString): Integer;
- Return Type:
1. UNKNOWN
2. HDD
3. SSD
4. SCM
(*) Updated BlendOnMove.
(*) Updated CmdOut.
(*) Updated XHashEx.
(*) Several additional improvements and bug fixes.
The first post has been updated.
.
crachlow
28-07-2023, 13:04
@BlackFire69. Here we are faced with such a problem. When packing using the 4x4 method, IsArcEx , when unpacking archives is canceled, it closes abruptly without showing the completion page. And with many other cls, the same thing happens. Could you see how to solve this problem
crachlow
29-07-2023, 13:38
Link to example https://youtu.be/f1n4cadWCvc
BLACKFIRE69
29-07-2023, 22:53
@BlackFire69. Here we are faced with such a problem. When packing using the 4x4 method, IsArcEx , when unpacking archives is canceled, it closes abruptly without showing the completion page. And with many other cls, the same thing happens. Could you see how to solve this problem
Link to example https://youtu.be/f1n4cadWCvc
could you test this?
.
crachlow
30-07-2023, 00:18
Thanks to @BlackFire69 for the prompt response. So far everything seems to be working as it should. I still have a couple of questions, but for later.
https://youtu.be/eMo9Mo53UH0
crachlow
30-07-2023, 01:49
@BlackFire69. In continuation of the same topic question. In the task manager, after unpacking is canceled or its emergency termination, incomplete processes from cls remain that continue their work, while consuming memory quite well. Maybe it is possible to solve this issue somehow?
https://youtu.be/IvkcMEwYrbA
BLACKFIRE69
30-07-2023, 05:15
@BlackFire69. In continuation of the same topic question. In the task manager, after unpacking is canceled or its emergency termination, incomplete processes from cls remain that continue their work, while consuming memory quite well. Maybe it is possible to solve this issue somehow?
https://youtu.be/IvkcMEwYrbA
for my system, this update is working as expected(xtool+srep+lolz) (though untested on non-English systems). if you encounter issues, please manually terminate all tasks.
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM xtool.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrCode);
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM cls-lolz_x64.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrCode);
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM cls-srep_x64.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrCode);
.
crachlow
30-07-2023, 08:33
@BlackFire69. Thanks for the emergency fix.
https://youtu.be/q2jW1hAfZ_s
BLACKFIRE69
31-07-2023, 22:05
FMXInno Dev
can you perform a test with the given conditions and let me know if the scaling is accurate or not?
1. in 2k..8k monitors.
2. with Higher DPI values.
.
Tihiy_Don
31-07-2023, 23:19
I'm really looking forward to the functionality of playing videos in the background of the installer window. This means the installer window, similar to the background image of the form to make a background video of the form. So that the elements can be placed on top of the video background.
BLACKFIRE69
01-08-2023, 03:14
The first result (unfortunately, it cannot be called reliable, since we used just screen scaling as a high-resolution emulation).
On the form type "FCreateImageForm" - the result is just fine, except that "FWinTitleBar" refuses to scale on this form type (only on this form type) and looks small. Now for the cons. The form always appears in the upper left corner of the screen and not in the center as it should. ""Toggle CheckBox" scaled a little wrong, the bottom space is a little hidden and they look smudged.
@audiofeel,
don't go beyond that. the given DLL file is not completed and is in development stage. so just tell me about the given example (_TestSpace.iss).
BLACKFIRE69
01-08-2023, 08:07
FMXInno Update - 2023-July-31
* Updated to the Hotfix-02.
* Added new property for the FMXForm.
- procedure CanvasQuality(FCanvasQuality: TCanvasQuality);
* Updated ISArcEx.
- CurrentFile in the callback function won't be empty.
The first post has been updated.
BLACKFIRE69
02-08-2023, 13:23
Update available!
* Some improvements.
.
BLACKFIRE69
05-08-2023, 00:41
#BLACKFIRE69
You have added a check for "OnClick" in "FToggleCheckBox". I guess it doesn't work properly. I want to create a "FToggleCheckBox" as a "FRadioButton" (so that each time I don't pick up a style file, but just paint "FToggleCheckBox"). I can not. In my opinion, the check for "OnClick" does not work.
sorry, my mistake. ;)
furthermore, comment out the following lines.
procedure CommonOnClick(Sender: TObject);
begin
case Sender of
TObject(Chck[1].GetObject):
if Chck[1].IsChecked then
begin
//Chck[1].SetChecked(False);
Chck[2].SetChecked(True);
end else
begin
//Chck[1].SetChecked(True);
Chck[2].SetChecked(False);
end;
TObject(Chck[2].GetObject):
if Chck[2].IsChecked then
begin
//Chck[2].SetChecked(False);
Chck[1].SetChecked(True);
end else
begin
//Chck[2].SetChecked(True);
Chck[1].SetChecked(False);
end;
end;
end;
.
Hello, I am new to repackaging and inno setup, how should I use your plug-in? I downloaded it and tried to run the script, but the following error always popped up. It is an error in the [code] section of the FMXInnoHandle.iss script. Excuse me. How to solve it? In addition, I am using Windows7, does this have something to do with the system?
https://postimg.cc/5j6K7BSg
ravikant
12-08-2023, 04:10
Hello, I am new to repackaging and inno setup, how should I use your plug-in? I downloaded it and tried to run the script, but the following error always popped up. It is an error in the [code] section of the FMXInnoHandle.iss script. Excuse me. How to solve it? In addition, I am using Windows7, does this have something to do with the system?
https://postimg.cc/5j6K7BSg
Use a custom script based on fmxinno
BLACKFIRE69
13-08-2023, 10:44
Developer suggestions:
Hi BLACKFIRE69, thank you for everything you've added to this library.
If the following components are added, it will be great.
Feature of the FMXInno plugin:
TabControl: TTabControl;
TabItem: TTabItem;
ActionList: TActionList;
ChangeTabAction: TChangeTabAction;
NextTabAction: TNextTabAction;
PreviousTabAction: TPreviousTabAction;
GridLayout: TGridLayout;
Viewport3D: TViewport3D;
Layer3D: TLayer3D;
the following classes are now included.
* Viewports:
TViewport3D
* 3D Scene:
TCamera
TLight
TDummy
* 3D Layers:
TLayout3D
TBufferLayer3D
TSolidLayer3D
TImage3D
TLayer3D
TTextLayer3D
* 3D Shapes
TPlane
TDisk
TCube
TSphere
TCylinder
TRoundCube
TCone
TGrid3D
TText3D
TRectangle3D
TEllipes3D
* Controls
TTabControl
TTabItem
* Materials
TColorMaterialSource
TTextureMaterialSource
TLightMaterialSource
.
BLACKFIRE69
14-08-2023, 23:08
FMXInno: Puzzle (Dragging Example)
.
crachlow
18-08-2023, 13:07
@BLACKFIRE69
I understand that the scale function is in the process of being finalized and tested ... but could you at least temporarily fix this bug. When the user changes the desktop scale from the recommended system (i.e. 100%) then "FFolderTreeView" floats away and is not visible. This appeared on the latest dll.
--
But the good old "FDirBrowse" feels much better. And it scales correctly. Somehow it even became a shame for "FFluentDirBrowse".
Another quirk. If you hold the window with the mouse on a scale of 150 and try to move it, miracles happen. The window moves like a living thing across the screen.
hitman797
18-08-2023, 14:07
FMXInno SlideShow Example using:
FMXForm: FForm;
FMXTAB: FTabControl;
FMXTIMER: FTimer;
FMXITEM: array [1..20] of FTabItem;
FMXRECT: array [1..20] of FRectangle;
hitman797
18-08-2023, 23:49
@hitman797
:o Let's make the code a little smaller. It does not affect anything in my opinion except for the size of the script file. O = Optimization
var
SSImg: String;
i: Integer;
begin
for i:= 1 to 20 do
begin
FMXITEM[i].FCreateEx(FMXTAB.Handle);
FMXRECT[i].FCreate(FMXITEM[i].Handle);
FMXRECT[i].Align(Client);
SSImg:= 'Background' + IntToStr(i) + '.jpg';
FMXRECT[i].FillPicture(ExtractAndLoad(SSImg), wmTileStretch);
end;
:confused: Is it possible to place various other objects on top of the slide show? Won't they float with the picture?
Other component can be added by adding TabControl2
and Handle TabControl2 in FMXForm.
and add objects to TabControl2.
hitman797
19-08-2023, 13:01
FMXInno Viewport 3D Example using:
FMXForm: FForm;
FMXTAB: array [1..4] of FTabControl;
FMXEDIT: FEdit;
FMXViewport3D: FViewport3D;
FMXLayer3D: array [1..2] of FLayer3D;
FMXFloatAnimation: array [1..4] of FFloatAnimation;
FMXButton: array [1..4] of FButton;
@BLACKFIRE69
HI, BLACKFIRE69
Thank you for the update.
Can you add BringToFront to "FLayer3D".
hitman797
20-08-2023, 12:10
Form1: TForm;
Viewport3D1: TViewport3D;
Layer3D1: TLayer3D;
FloatAnimation1: TFloatAnimation;
Layer3D2: TLayer3D;
FloatAnimation2: TFloatAnimation;
object FloatAnimation1: TFloatAnimation
Enabled = True
Duration = 1
Loop = True
PropertyName = 'RotationAngle.X'
StartValue = 0
StopValue = 180
OnProcess = FloatAnimation1Process
end
object FloatAnimation2: TFloatAnimation
Enabled = True
Duration = 1
Loop = True
PropertyName = 'RotationAngle.X'
StartValue = 180
StopValue = 360
OnProcess = FloatAnimation2Process
end
procedure TForm3.FloatAnimation1Process(Sender: TObject);
begin
Layer3D2.BringToFront;
end;
procedure TForm3.FloatAnimation2Process(Sender: TObject);
begin
Layer3D1.BringToFront;
end;
hitman797
24-08-2023, 02:34
Example-DiskList.iss
var
FMXLabel : FLabel;
procedure FMXInnoInit;
begin
FMXLabel := InitLabelHandle;
end;
procedure FMXDesigning;
begin
FMXLabel.FCreate(FMXForm.Handle, '');
if wGetDriveMediaType('D') = 1 then
begin
FMXLabel.Text('UNKNOWN');
end;
if wGetDriveMediaType('D') = 2 then
begin
FMXLabel.Text('HDD');
end;
if wGetDriveMediaType('D') = 3 then
begin
FMXLabel.Text('SSD');
end;
if wGetDriveMediaType('D') = 4 then
begin
FMXLabel.Text('SCM');
end;
FMXLabel.Left(50);
FMXLabel.Top(50);
FMXLabel.FontSetting('Segoe UI', 16, ALBlack);
end;
crachlow
24-08-2023, 08:33
You didn't look at the constants.
const
HDD_MEDIA_TYPE_UNKNOWN = $0000;
HDD_MEDIA_TYPE_HDD = $0003;
HDD_MEDIA_TYPE_SSD = $0004;
HDD_MEDIA_TYPE_SCM = $0005;
https://i.ibb.co/HC1cpzn/2023-08-24-202555.png
crachlow
24-08-2023, 08:40
Something went wrong. does not correctly determine the type of disk
And in general, you are not going to manually register the disks that may be in the system?
hitman797
24-08-2023, 08:59
You didn't look at the constants.
const
HDD_MEDIA_TYPE_UNKNOWN = $0000;
HDD_MEDIA_TYPE_HDD = $0003;
HDD_MEDIA_TYPE_SSD = $0004;
HDD_MEDIA_TYPE_SCM = $0005;
https://i.ibb.co/HC1cpzn/2023-08-24-202555.png
var
FMXLabel : FLabel;
procedure FMXInnoInit;
begin
FMXLabel := InitLabelHandle;
end;
procedure FMXDesigning;
begin
FMXLabel.FCreate(FMXForm.Handle, '');
if wGetDriveMediaType('D') = 0 then
begin
FMXLabel.Text('UNKNOWN');
end;
if wGetDriveMediaType('D') = 3 then
begin
FMXLabel.Text('HDD');
end;
if wGetDriveMediaType('D') = 4 then
begin
FMXLabel.Text('SSD');
end;
if wGetDriveMediaType('D') = 5 then
begin
FMXLabel.Text('SCM');
end;
FMXLabel.Left(50);
FMXLabel.Top(50);
FMXLabel.FontSetting('Segoe UI', 16, ALBlack);
end;
var
FMXLabel : FLabel;
procedure FMXInnoInit;
begin
FMXLabel := InitLabelHandle;
end;
procedure FMXDesigning;
begin
FMXLabel.FCreate(FMXForm.Handle, '');
case wGetDriveMediaType('D') of
0: FMXLabel.Text('UNKNOWN');
3: FMXLabel.Text('HDD');
4: FMXLabel.Text('SSD');
5: FMXLabel.Text('SCM');
end;
FMXLabel.Left(50);
FMXLabel.Top(50);
FMXLabel.FontSetting('Segoe UI', 16, ALBlack);
end;
crachlow
24-08-2023, 10:45
and if like this? even better...
procedure DiskListOnChange(Sender: TObject);
var
S: String;
begin
S := DirEdt.GetText;
StringChange(S, ExtractFileDrive(S), DiskList.GetSelectedDisk);
DirEdt.Text(S);
case wGetDriveMediaType(S) of
0: FMXLabel.Text('Unknown');
3: FMXLabel.Text('HDD');
4: FMXLabel.Text('SSD');
5: FMXLabel.Text('SCM');
end;
end;
Well, what did you do?
crachlow
24-08-2023, 11:55
It's bad that usb does not recognize.
BLACKFIRE69
26-08-2023, 14:16
Update available!
@BLACKFIRE69
I understand that the scale function is in the process of being finalized and tested ... but could you at least temporarily fix this bug. When the user changes the desktop scale from the recommended system (i.e. 100%) then "FFolderTreeView" floats away and is not visible. This appeared on the latest dll.
--
But the good old "FDirBrowse" feels much better. And it scales correctly. Somehow it even became a shame for "FFluentDirBrowse".
the FluentApi v2.0 update was responsible for this problem, however, it has been successfully addressed and fixed.
https://i.ibb.co/r6dv6gN/01.gif
FMXInno Viewport 3D Example using:
@BLACKFIRE69
HI, BLACKFIRE69
Thank you for the update.
Can you add BringToFront to "FLayer3D".
this update brings more properties to classes, and that includes this one too.
NOTE:
This update involves modifications to certain functions/procedures, which might require adjustments to current scripts.
https://i.ibb.co/2WhFn28/00.png
https://i.ibb.co/VTNMGC0/01.png
const
HDD_MEDIA_TYPE_UNKNOWN = $0000;
HDD_MEDIA_TYPE_HDD = $0003;
HDD_MEDIA_TYPE_SSD = $0004;
HDD_MEDIA_TYPE_SCM = $0005;
It's bad that usb does not recognize.
Ok, let's update the wGetDriveMediaType function.
function wGetDriveMediaType(const DriveLetter: WideString): Integer;
function wGetDriveMediaTypeEx(const DriveLetter: WideString;
out HealthStatus, Usage: Integer): Integer;
{ 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.
the first post has been updated.
.
#Script1.iss
when i already installed the first game The next game will be on the same drive as the first game installed.
https://i.imgur.com/aq8niZC.jpg
@macut18 yes i currently use this script for my Repacks and you cant install 2 games with it in the same spot as it will do that.. but i just install one test it and then remove it..
ScOOt3r
It doesn't completely fix it, but it's a little better
The problem was solved, thank you very much. :)
hitman797
27-08-2023, 04:34
Somebody....I need help
You need to hide the buttons - AboutTabControl.TabPosition(tpNone);
But at the same time, my other custom buttons behave strangely, which are not related to this - AboutTabBtn[1]
If you specify like this - AboutTabControl.TabPosition(tpDots);
Then everything is fine, but I need to hide the dots
AboutTabControl.FCreate(AboutPage.Handle);
AboutTabControl.SetBounds(100, 130, 1046, 448);
AboutTabControl.TabPosition(tpNone);
for i:= 1 to 3 do
begin
AboutTabItem[i].FCreateEx(AboutTabControl.Handle);
AboutLbl[i].FCreate(AboutTabItem[i].Handle);
AboutLbl[i].FontSetting('{#Font}', VCLFontSizeToFMX(22), ALWhiteSmoke);
AboutLbl[i].TextSetting(False, txCenter, txCenter);
AboutLbl[i].SetBounds(0, 18, 1046, 24)
AboutMemo[i].FCreate(AboutTabItem[i].Handle, True);
AboutMemo[i].SetBounds(28, 59, 1017, 358);
AboutMemo[i].FontSetting('{#Font}', VCLFontSizeToFMX2(12), ALWhiteSmoke);
AboutMemo[i].WordWrap(True);
AboutMemo[i].ReadOnly(True);
AboutMemo[i].ScrollAnimation(True);
end;
AboutLbl[1].Text(AnsiUppercase('About Game'));
AboutLbl[2].Text(AnsiUppercase('About Repack'));
AboutLbl[3].Text(AnsiUppercase('Credits'));
AboutMemo[1].AddLine(CnvtToWStr(S1));
AboutMemo[2].AddLine(CnvtToWStr(S2));
AboutMemo[3].AddLine(CnvtToWStr(S3));
AboutTabBtn[1].FCreate(AboutTabControl.Handle);
AboutTabBtn[1].SetBounds(572, 590, 50, 30);
AboutTabBtn[1].FillColor({#Color1});
AboutTabBtn[1].StrokeColor({#Color2});
AboutTabBtn[1].StrokeSetting(1.0, scFlat, sdSolid, sjMiter);
AboutTabBtn[1].CornerStyle(16, 16, [tcTopLeft, tcBottomLeft], ctBevel);
AboutTabBtnLbl[1].FCreate(AboutTabBtn[1].Handle);
AboutTabBtnLbl[1].Text(#$E938);
AboutTabBtnLbl[1].Align(Client)
AboutTabBtnLbl[1].AutoSize(True);
AboutTabBtnLbl[1].TextSetting(False, txCenter, txCenter);
AboutTabBtnLbl[1].FontSetting('Segoe MDL2 Assets', 14, ALBlack);
AboutTabBtnLbl[1].OnMouseEnter(@CommonMouseEnter);
AboutTabBtnLbl[1].OnMouseLeave(@CommonMouseLeave);
AboutTabBtnLbl[1].OnClick(@CommonOnClick);
AboutTabBtn[2].FCreate(AboutTabControl.Handle);
AboutTabBtn[2].SetBounds(622, 590, 50, 30);
AboutTabBtn[2].FillColor({#Color1});
AboutTabBtn[2].StrokeColor({#Color2});
AboutTabBtn[2].StrokeSetting(1.0, scFlat, sdSolid, sjMiter);
AboutTabBtn[2].CornerStyle(16, 16, [tcTopRight, tcBottomRight], ctBevel);
AboutTabBtnLbl[2].FCreate(AboutTabBtn[2].Handle);
AboutTabBtnLbl[2].Text(#$E937);
AboutTabBtnLbl[2].Align(Client)
AboutTabBtnLbl[2].AutoSize(True);
AboutTabBtnLbl[2].TextSetting(False, txCenter, txCenter);
AboutTabBtnLbl[2].FontSetting('Segoe MDL2 Assets', 14, ALBlack);
AboutTabBtnLbl[2].OnMouseEnter(@CommonMouseEnter);
AboutTabBtnLbl[2].OnMouseLeave(@CommonMouseLeave);
AboutTabBtnLbl[2].OnClick(@CommonOnClick);
hitman797
27-08-2023, 06:14
@hitman797
Thanks for the support. This did not solve the problem, (the buttons you pointed to AboutTabControl) they move along with AboutTabItem[i]. For now, I just increased the width and hid the dots under my buttons.
https://youtu.be/c802o9WLJDE?si=RL6W_PkPQK2Uzite
you need 2 TabControl
add 1 TabItem in TabControl1
and add the buttons in TabItem in TabControl1.
in TabControl2 add TabItem[i] in TabItem[i] add Memo[i].
crachlow
27-08-2023, 08:35
Dear Blackfire69. Could you clarify about FUserInfo. As you wrote in the examples, this is not quite suitable, at least for Windows 11. Unknown is displayed in it. If this function defines only the administrator from under the built-in account, and the user from the user group, then this is not entirely correct, probably. I tried to determine by type sid like this
var
UserSidType: Integer;
s1 : String;
...............................
s1 := Copy(UserInfo.SID,42,3)+Copy(UserInfo.SID,45,1);
UserSidType := StrToInt(s1);
if UserSidType > 1000 then
UserSidType := 1001 ;
// SUserType
case UserSidType of
500: UserTypeStr := 'Administrator';
1001: UserTypeStr := 'Standard User';
else
UserTypeStr := 'Unknown';
end;
But @audiofeel says it doesn't work, or it works intermittently.
And if the user, administrator rights? Whereas? Could you clarify this issue.
crachlow
27-08-2023, 09:31
Maybe it's because of the localization of the system?
https://i.ibb.co/58rbxkp/2023-08-27-175746.png
BLACKFIRE69
28-08-2023, 00:35
Dear Blackfire69. Could you clarify about FUserInfo. As you wrote in the examples, this is not quite suitable, at least for Windows 11. Unknown is displayed in it. If this function defines only the administrator from under the built-in account, and the user from the user group, then this is not entirely correct, probably. I tried to determine by type sid like this
But @audiofeel says it doesn't work, or it works intermittently.
And if the user, administrator rights? Whereas? Could you clarify this issue.
Maybe it's because of the localization of the system?
i just updated it. it may work.
...
I just changed the form to 'FCreateBlankForm'. A white square appeared again at startup, but without a glitch in 'FTabControl'.
this 'white square' issue can be bypassed. however, after doing so, you'll need to call 'FMXForm.Show' following the 'FMXDesigning' procedure; otherwise, it won't display anything. if this solution works for you, i'll implement this fix in the next update.
(the DLL file in the example is in developer mode, so please refrain from using it in the main stream.)
if i specify the changes in the code:
procedure InitializeWizard();
begin
...
FMXDesigning;
// New - FMXInnoDev.dll: [2023-08-28]
Page1.Visible(False);
Page2.Visible(False);
Page3.Visible(False);
Page4.Visible(False);
Page5.Visible(False);
FMXForm.Show;
//
...
end;
procedure CurPageChanged(CurPageID: Integer);
begin
...
if CurPageID = wpWelcome then
begin
...
if FMXFirstRun then
begin
FMXFirstRun := false;
// New
//Page1.AnimDelay(0.5);
//
end else
Page1.AnimDelay(0);
...
end;
...
end;
.
crachlow
28-08-2023, 08:05
I meant that the same file shows a different result. My account is Microsoft and in the Administrators group.
User Unknown (https://youtu.be/fGpFdJaOYVM?si=3yQ8LgDznl0_90fQ)
I guess that
case IsAdminLoggedOn of
0: UserTypeStr := 'Group Users';
1: UserTypeStr := 'Group Administrators';
and GetUserNameString;
from innosetup works more correctly. In Russian localization UserInfo.UserType, and maybe in others, does not work at all, it is also difficult to determine by sid, because sid will be different in different localizations.
BLACKFIRE69
28-08-2023, 16:23
I guess that
case IsAdminLoggedOn of
0: UserTypeStr := 'Group Users';
1: UserTypeStr := 'Group Administrators';
from innosetup works more correctly.
{Setup]
...
PrivilegesRequired=admin ---> 'Admin' (IsAdminLoggedOn is True)
PrivilegesRequired=lowest ---> 'Standard' (IsAdminLoggedOn is False)
hitman797
29-08-2023, 01:24
Does anyone have the black and white 'Windows11' style in 'FMXInno' that works really and correctly? I found a couple of styles. One is very good (displays the Switch and CheckBox in the correct size, and not small like other options). But unfortunately it has 'Right Border and LeftBorder' (I can't edit it in text style.) . That is, there will be artifacts around the edges.
:rolleyes:
Windows 10 for FMX
FMX Styles (https://delphistyles.com/fmx/index.html)
Windows 11 for VCL
VCL Styles (https://delphistyles.com/vcl/index.html)
hitman797
29-08-2023, 03:18
Well, I saw that. 39 bucks for styles? It's not for us
There is no style for Windows 11 for FMX only Windows 10.
crachlow
30-08-2023, 00:20
{Setup]
...
PrivilegesRequired=admin ---> 'Admin' (IsAdminLoggedOn is True)
PrivilegesRequired=lowest ---> 'Standard' (IsAdminLoggedOn is False)
I didn't understand much. In the first case, Privileged= require elevated rights (via the User Account Management dialog box) to perform the installation. In the second IsAdminLoggedOn=Returns True if the user who started the installer/uninstaller is a member of the local Administrators group
https://i.ibb.co/qkTghLR/2023-08-30-124000.png
https://i.ibb.co/bbzydjt/2023-08-30-124232.png
https://i.ibb.co/Sv5fvDg/2023-08-30-124405.png
PrivilegesRequired=admin ---> 'Admin' (IsAdminLoggedOn is True)
PrivilegesRequired=lowest ---> 'Standard' (IsAdminLoggedOn is False)
it's not the same
BLACKFIRE69
30-08-2023, 23:33
FMXInno - Updates : [2023-August-31]
* Added TImageList.
* Added TSpeedButton.
* Added TCornorButton.
* Added TMultiView.
* Added TShadowTextClassic.
* Added new functions.
* Added new properties.
* Included the fix for the 'white-square' issue during loading.
- Don't forget to call the 'FMXForm.Show' after the 'FMXDesigning' procedure.
* Fixed DrawFrame.
* Some improvements and bug fixes.
------------------------------------------------------------------------------------------------------------------------------
@BLACKFIRE69, I don't follow your project very much, but I have a question.
Is it possible to define shadows in the labels and define a position for them with respect to the text like in CIU?
If you still don't have support for this, it would be interesting to have X and Y options to move the shadow with a default value of 1px position in relation to left and Top, or parameters for X and Y position for the shadow, with the default position being the shadow exactly in the position of the text.
procedure ShadowSetting(FColor: Integer; FOpacity, FSoftness: Single; FPosX, FPosY: Integer);
now we've the 'TShadowTextClassic' class, which allows users to change the position(X, Y) of the shadow.
procedure Shadow(FColor: TAlphaColor; OffsetX, OffsetY: Single);
------------------------------------------------------------------------------------------------------------------------------
@BLACKFIRE69
Thanks for the update. Please answer, Can you make it so that you can take the icons from the system and not take them with you. By simply specifying the file index and icon, as is possible for any file on the system. And for displaying disks, and for displaying buttons "close the window", "minimize the window" and for many others. If not, then I'm just passing by.
i've added three new functions to help accomplish this.
function wGetSysDefaultIcons(const Src: WideString; SHLIcoSize: Cardinal; const Buffer: PAnsiChar; var Count: Cardinal): Integer;
function wGetSysDefaultIcons2(const Src, OutImgFile: WideString; SHLIcoSize: Cardinal): Boolean;
function wGetSysDefaultIconsSize(const Src: WideString; SHLIcoSize: Cardinal): Integer;
these functions allow you to extract icons in different sizes as listed below.
const
SHL_ICO_SZ_LARGE = $0000; // 32x32 pixels.
SHL_ICO_SZ_SMALL = $0001; // 16x16 pixels.
SHL_ICO_SZ_EXTRALARGE = $0002; // 48x48 pixels.
SHL_ICO_SZ_SYSSMALL = $0003; // SM_CXSMICON x SM_CYSMICON pixels.
SHL_ICO_SZ_JUMBO = $0004; // 256x256 pixels. (Windows Vista and later.)
here 'Src' could be a file, directory or desktop shortcut (.lnk).
you'll find an example for this in the attachment
at the moment, if i extract icons from a windows ResDll using an index, then those icon files will only be '32x32' in maximum size. so let's use above functions.
Example:
{ GetSysDefaultIcons }
if wGetLogicalDriveList(ADrvLst, CDrvIdx) then
begin
ASrc[1] := ADrvLst[CDrvIdx];
ASrc[2] := ADrvLst[Length(ADrvLst) -1];
end else
begin
ASrc[1] := 'C:\';
if wIsDriveValid('D:\') then ASrc[2] := 'D:\'
else if wIsDriveValid('E:\') then ASrc[2] := 'E:\'
else if wIsDriveValid('F:\') then ASrc[2] := 'F:\'
else if wIsDriveValid('G:\') then ASrc[2] := 'G:\'
end;
ASrc[3] := 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe';
ASrc[4] := 'C:\Users\' + AddBackslash(GetUserNameString) + 'Desktop';
ASrc[5] := 'C:\Users\' + AddBackslash(GetUserNameString) + 'Downloads';
ASrc[6] := 'C:\Users\' + AddBackslash(GetUserNameString) + 'Documents';
P := 0; Q := 0;
for i := 1 to C_RANGE do
begin
if i = (C_RANGE div 2) + 1 {i =4} then
begin
P := 0; Q := 160;
end;
AImage[i].FCreate(FMXForm.Handle);
AImage[i].SetBounds(NSX(P + 80), NSY(Q + 80), NSX(100), NSY(100));
#ifdef AMethod1 /* Extract SysDefaultIcons into a Buffer, then load them into AImage[i] */
ImgSize[i] := wGetSysDefaultIconsSize(ASrc[i], SHL_ICO_SZ_JUMBO);
if ImgSize[i] <> -1 then
begin
SetLength(Buffer[i], ImgSize[i]);
if wGetSysDefaultIcons(ASrc[i], SHL_ICO_SZ_JUMBO, Buffer[i], Count[i]) <> -1 then
AImage[i].LoadPictureFromBuffer(Buffer[i], Count[i], wmTileStretch);
end;
#else /* Extract SysDefaultIcons into the TmpDir, then load them into AImage[i] */
ImgFile[i] := ExpandConstant('{tmp}\') + IntToStr(i) + '.png';
if wGetSysDefaultIcons2(ASrc[i], ImgFile[i], SHL_ICO_SZ_JUMBO) then
begin
AImage[i].LoadPicture(ImgFile[i], wmTileStretch);
end;
#endif
P := P + 150;
end;
{ GetSysDefaultIcons }
'LoadImgFromBuffer' is only supported by the 'FImage' control. Other controls will get this support in future updates.
------------------------------------------------------------------------------------------------------------------------------
MultiView. Needed sometimes. beautiful and modern thing, it's a pity that it is not in FMXInno...:(
the 'TMultiView' class has been added. an example for this could be found in the attachment.
The first post has been updated.
.
BLACKFIRE69
31-08-2023, 01:05
HotFix: 01
- Fixed for Windows 10 Users.
.
@Mr.BlackFire69
There seems to be few issues that might need your attention:
1. If you open the Directory Dialog Box second time, the fluent effect is disabled at certain sections (Please find the photo at the link)
Can we make the Directory box editable?
2. Padding and margins are not working on FMemo. I want the content inside FMemo to be padded at certain distance which doesn't seem to be working
3. There is also one issue with the FToggleCheckbox. IsPressed is not working.
4. Can you also enable OnChange method on FToggleCheckbox? This will be similar to FCheckbox Event. Onclick gives me before Event. It gives me the previous value before clicking. I need after Event, like after changing the toggle value of Checkbox what is the current value?
5. Is there a way to bring the Video file in the background and display text over it?
hitman797
31-08-2023, 08:46
5. Is there a way to bring the Video file in the background and display text over it?
use FTabControl
// TabControl
type
FTabControl = interface(IUnknown)
'{4E174B91-AFAC-42FC-A740-450E6F17B9B3}'
function FCreate(FParent: TFmxObject): ITabControl;
procedure SetBounds(FLeft, FTop, FWidth, FHeight: Single);
procedure HitTest(FValue: Boolean);
procedure SetActiveTabWithTransition(const ATab: ITabItem; const ATransition: TTabTransition; const ADirection: TTabTransitionDirection);
procedure SetActiveTabWithTransitionAsync(const ATab: ITabItem; const ATransition: TTabTransition; const ADirection: TTabTransitionDirection; const AOnFinish: TNotifyEvent);
procedure FinishCurrentTabTransition;
function FindVisibleTab(var Index: Integer; const FindKind: TFindKind): Boolean;
function FindVisibleTab2(const FindKind: TFindKind): Integer;
procedure GoToActiveTab;
function GotoVisibleTab(Index: Integer; ATransition: TTabTransition; const ADirection: TTabTransitionDirection): Boolean;
function Next(ATransition: TTabTransition; const ADirection: TTabTransitionDirection): Boolean;
function Previous(ATransition: TTabTransition; const ADirection: TTabTransitionDirection): Boolean;
function First(ATransition: TTabTransition; const ADirection: TTabTransitionDirection): Boolean;
function Last(ATransition: TTabTransition; const ADirection: TTabTransitionDirection): Boolean;
function Delete(const Index: Integer): Boolean;
function HasActiveTab: Boolean;
procedure UpdateTabBarButtons;
function TabCount: Integer;
function TransitionRunning: Boolean;
procedure Align(FAlign: TAlignLayout);
function ActiveTab: ITabItem;
function ActiveTabIndex: Integer;
function GetTabItem(AIndex: Integer): ITabItem;
procedure Enabled(FEnabled: Boolean);
procedure CanFocus(FValue: Boolean);
procedure Height(FHeight: Single);
procedure Margins(FLeft, FTop, FRight, FBottom: Single);
procedure Padding(FLeft, FTop, FRight, FBottom: Single);
procedure Opacity(FOpacity: Single);
procedure Position(X, Y: Single);
procedure RotationAngle(FAngle: Single);
procedure Scale(X, Y: Single);
procedure TabHeight(FHeight: Single);
procedure TabStop(FValue: Boolean);
procedure TabPosition(FTabPosition: TTabPosition);
procedure Visible(FVisible: Boolean);
procedure Width(FWidth: Single);
procedure SetFocus;
procedure ResetFocus;
procedure AutoCapture(FValue: Boolean);
procedure DisableFocusEffect(FValue: Boolean);
procedure UpdateEffects;
procedure BeginUpdate;
procedure EndUpdate;
procedure RecalcSize;
procedure RecalcEnabled;
procedure RecalcOpacity;
procedure RecalcUpdateRect;
procedure RecalcAbsolute;
procedure Repaint;
procedure AddObject(const AObject: TFmxObject);
procedure InsertObject(Index: Integer; const AObject: TFmxObject);
procedure RemoveObject(const AObject: TFmxObject);
procedure RemoveObject2(Index: Integer);
function ContainsObject(const AObject: TFmxObject): Boolean;
procedure ExchangeObjects(const AObject1, AObject2: TFmxObject);
procedure DeleteChildren;
function IsChild(AObject: TFmxObject): Boolean;
function ChildrenCount: Integer;
procedure BringToFront;
procedure SendToBack;
procedure BringChildToFront(Child: TFmxObject);
procedure SendChildToBack(Child: TFmxObject);
function IsEquals(AObject: TObject): Boolean;
procedure SetTag(Tag: Integer);
procedure SetHint(const FText: WideString);
function GetTabHeight: Single;
function GetOpacity: Single;
function GetVisible: Boolean;
function GetHeight: Single;
function GetWidth: Single;
function GetPressed: Boolean;
function GetAutoCapture: Boolean;
function GetDisableFocusEffect: Boolean;
function GetMouseOver: Boolean;
function GetObject: LongInt;
function GetTag: Integer;
function GetParent: Longint;
procedure OnClick(Event: TNotifyEvent);
procedure OnMouseDown(Event: TMouseEventF);
procedure OnMouseMove(Event: TMouseMoveEventF);
procedure OnMouseUp(Event: TMouseEventF);
procedure OnMouseEnter(Event: TNotifyEvent);
procedure OnMouseLeave(Event: TNotifyEvent);
procedure OnMouseWheel(Event: TMouseWheelEvent);
procedure OnResize(Event: TNotifyEvent);
procedure OnResized(Event: TNotifyEvent);
procedure OnActivate(Event: TNotifyEvent);
procedure OnDeactivate(Event: TNotifyEvent);
procedure OnCanFocus(Event: TCanFocusEvent);
procedure OnKeyDown(Event: TKeyEvent);
procedure OnKeyUp(Event: TKeyEvent);
function Handle: TFmxObject;
procedure Free;
end;
hitman797
31-08-2023, 08:54
Can we make the Directory box editable?
use FFolderTreeView / FStartMenuFolderTreeView
// Folder TreeView
type
FFolderTreeView = Interface(IUnknown)
'{22193C2C-6109-4625-92A3-6CECE9A56348}'
procedure FCreate(hHandle: HWND; FLeft, FTop, FWidth, FHeight: Integer; const ADir: WideString);
procedure NewFolder(const Folder: WideString);
procedure ChangeDirectory(const ADir: WideString);
procedure OnChange(FEvent: TNotifyEvent);
function GetCurrrentDir: WideString;
procedure Left(FLeft: Integer);
procedure Top(FTop: Integer);
procedure Width(FWidth: Integer);
procedure Height(FHeight: Integer);
procedure Hide;
procedure Show;
function GetObject: Longint;
function HandleHWND: HWND;
procedure Free;
End;
// StartMenu Folder TreeView
type
FStartMenuFolderTreeView = Interface(IUnknown)
'{22193C2C-6109-4625-92A3-6CECE9A56348}'
procedure FCreate(hHandle: HWND; FLeft, FTop, FWidth, FHeight: Integer; const ADir: WideString);
procedure NewFolder(const Folder: WideString);
procedure ChangeDirectory(const ADir: WideString);
procedure OnChange(FEvent: TNotifyEvent);
function GetCurrrentDir: WideString;
procedure Left(FLeft: Integer);
procedure Top(FTop: Integer);
procedure Width(FWidth: Integer);
procedure Height(FHeight: Integer);
procedure Hide;
procedure Show;
function GetObject: Longint;
function HandleHWND: HWND;
procedure Free;
End;
BLACKFIRE69
31-08-2023, 08:58
@Mr.BlackFire69
1. If you open the Directory Dialog Box second time, the fluent effect is disabled at certain sections (Please find the photo at the link)
anything can cause this to happen; i don't know exactly what. maybe try changing the canvas quality.
FMXForm.CanvasQuality(cqHighPerformance);
this also changes the canvas quality of the other forms (Dir/Start/Custom).
Can we make the Directory box editable?
done.
2. Padding and margins are not working on FMemo. I want the content inside FMemo to be padded at certain distance which doesn't seem to be working
everything is ok inside the dll. maybe there's something wrong with firemonkey.
3. There is also one issue with the FToggleCheckbox. IsPressed is not working.
fixed.
4. Can you also enable OnChange method on FToggleCheckbox? This will be similar to FCheckbox Event. Onclick gives me before Event. It gives me the previous value before clicking. I need after Event, like after changing the toggle value of Checkbox what is the current value?
done.
new property:
procedure OnChange(Event: TNotifyEvent);
5. Is there a way to bring the Video file in the background and display text over it?
there's no way until now.
This doesn't fix it. It's happening same in the WPI Corepack.iss file you created and shared initially on the same forum. let me know, if it can help if I share the installer script?
DirBrowseDlg.FCreate('Select Install Directory', WizardForm.DirEdit.Text, True, False, 0.35, 0);
DirBrowseDlg.TextFontSettings('Bellefair Regular', VCLFontSizeToFMX2(14), {#Color});
anything can cause this to happen; i don't know exactly what. maybe try changing the canvas quality.
FMXForm.CanvasQuality(cqHighPerformance);
@Blackfire69
When trying to edit the directory box, weird things are happening. Like it's not proper like FEdit.
Backspace to delete does something else.
Moving the cursor to a location and editing edit something else completely.
I posted my Directory creation code in the post above. Let me know if I'm doing something wrong. Can you please check?
Can we make the Directory box editable?
done.
hitman797
01-09-2023, 10:36
@BLACKFIRE69
mr BLACKFIRE69! I need your help. My kung fu is useless here. You have added 3d objects to the module. Is it possible to add 3d page animation in this scenario?@BLACKFIRE69
CAN YOU FIX pjScreen IN FLayer3D?
FMXLayer3D[1].FCreate(FMXViewport3D.Handle);
FMXLayer3D[1].Align(Client);
//FMXLayer3D[1].Projection(pjScreen);
FMXLayer3D[1].Transparency(True);
FMXLayer3D[1].FillColor(ALNull);
//
FMXLayer3D[2].FCreate(FMXViewport3D.Handle);
FMXLayer3D[2].Align(Client);
//FMXLayer3D[2].Projection(pjScreen);
FMXLayer3D[2].Transparency(True);
FMXLayer3D[2].FillColor(ALNull);
Thanks for that advice earlier, I implemented the same on my installer. I just wanted to know if padding was not working or I was doing it wrong. Thanks to @Blackfire69 for clarification.
DirBrowseDlg.EditFontSettings('Bellefair Regular', VCLFontSizeToFMX2(14), {#Color});
inside FMemo itself, you can only align text to the left or center and right.
procedure TextHorzAlign(HorzAlign: TTextAlign);
TTextAlign = (txCenter, txLeading, txTrailing);
create 'FMEMO' with no background. Annotate it to 'FRectangle' and move it wherever you want. (or my translator translates the wrong thing)
BLACKFIRE69
02-09-2023, 00:24
i'm working on an update. some users have mentioned that the installer appears too small at higher DPI values. can you guys test this on higher DPI settings and let me know how it looks and if it has the correct scaling? :)
Attachment:
BLACKFIRE69
02-09-2023, 09:07
I don't have a full test (just zoom 150%). Everything is fine. The problem is only with "FFluentDirBrowse"
now it should work.
.
BLACKFIRE69
05-09-2023, 09:56
@BLACKFIRE69
The progress bar always shows 97-99% after unpacking (no errors) . What and where did I do wrong again? Part of the code below
function ProgressCallback(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB: integer; DiskName, CurrentFile, TimeStr1, TimeStr2, TimeStr3, Speed: WideString): longword;
begin
Page3PB.SetValue(OverallPct, 1000);
-----------------
Page3PB.FCreate(Page3.Handle, 64, 166, 671, 36, {#StyleColor}, $6C030303, False);
Page3PB.Curve(4.0, 4.0);
Page3PB.StrokeColor(ALNull);
Page3PB.StrokeSetting(1.6, scRound, sdSolid, sjMiter);
Page3PB.StrokeColorBack(ALMedGray);
Page3PB.StrokeSettingBack(0.8, scRound, sdSolid, sjMiter);
Page3PB.Opacity(0.9);
Page3PB.FillGradient({#StyleColor}, ALMediumspringgreen, gsLinear);
Page3PB.FillGradientLinearAngle(45);
Page3PB.FillGradientAnimSetting(atOut, 1.2, 0, False, True, True);
Page3PB.FillGradientAnimInterpolationType(itCircul ar);
Page3PB.FillGradientAnimColors({#StyleColor}, ALMediumspringgreen, ALMediumspringgreen, {#StyleColor});
Page3PB.FillGradientAnimEnable(True);
the new update will fix this.
BLACKFIRE69
05-09-2023, 10:21
FMXInno - Updates : [2023-September-05]
This is a quality update fix for FMXInno on August 31.
* Fixed for higher DPI values.
* Updated IsOSMatched for Windows 11 23H2 (Sun Valley 3) update.
- if IsOsMatched(B_WIN11_23H2) then ...
* Updated FluentAPI v2.0.
* Updated ISArcEx.
* Other quality improvements and bug fixes.
NOTE:
* Effective from this update onward, InnoSetup v5.6.1 or a newer version is required.
-------------------------------------------------------------------------------------------------------------------------------------------
FMXInno - Updates : [2023-August-31]
* Added TImageList.
* Added TSpeedButton.
* Added TCornorButton.
* Added TMultiView.
* Added TShadowTextClassic.
* Added new functions.
* Added new properties.
* Included the fix for the 'white-square' issue during loading.
- Don't forget to call the 'FMXForm.Show' after the 'FMXDesigning' procedure.
* Fixed DrawFrame.
* Some improvements and bug fixes.
------------------------------------------------------------------------------------------------------------------------------
@BLACKFIRE69, I don't follow your project very much, but I have a question.
Is it possible to define shadows in the labels and define a position for them with respect to the text like in CIU?
If you still don't have support for this, it would be interesting to have X and Y options to move the shadow with a default value of 1px position in relation to left and Top, or parameters for X and Y position for the shadow, with the default position being the shadow exactly in the position of the text.
procedure ShadowSetting(FColor: Integer; FOpacity, FSoftness: Single; FPosX, FPosY: Integer);
now we've the 'TShadowTextClassic' class, which allows users to change the position(X, Y) of the shadow.
procedure Shadow(FColor: TAlphaColor; OffsetX, OffsetY: Single);
------------------------------------------------------------------------------------------------------------------------------
@BLACKFIRE69
Thanks for the update. Please answer, Can you make it so that you can take the icons from the system and not take them with you. By simply specifying the file index and icon, as is possible for any file on the system. And for displaying disks, and for displaying buttons "close the window", "minimize the window" and for many others. If not, then I'm just passing by.
i've added three new functions to help accomplish this.
function wGetSysDefaultIcons(const Src: WideString; SHLIcoSize: Cardinal; const Buffer: PAnsiChar; var Count: Cardinal): Integer;
function wGetSysDefaultIcons2(const Src, OutImgFile: WideString; SHLIcoSize: Cardinal): Boolean;
function wGetSysDefaultIconsSize(const Src: WideString; SHLIcoSize: Cardinal): Integer;
these functions allow you to extract icons in different sizes as listed below.
const
SHL_ICO_SZ_LARGE = $0000; // 32x32 pixels.
SHL_ICO_SZ_SMALL = $0001; // 16x16 pixels.
SHL_ICO_SZ_EXTRALARGE = $0002; // 48x48 pixels.
SHL_ICO_SZ_SYSSMALL = $0003; // SM_CXSMICON x SM_CYSMICON pixels.
SHL_ICO_SZ_JUMBO = $0004; // 256x256 pixels. (Windows Vista and later.)
here 'Src' could be a file, directory or desktop shortcut (.lnk).
you'll find an example for this in the attachment
at the moment, if i extract icons from a windows ResDll using an index, then those icon files will only be '32x32' in maximum size. so let's use above functions.
Example:
{ GetSysDefaultIcons }
if wGetLogicalDriveList(ADrvLst, CDrvIdx) then
begin
ASrc[1] := ADrvLst[CDrvIdx];
ASrc[2] := ADrvLst[Length(ADrvLst) -1];
end else
begin
ASrc[1] := 'C:\';
if wIsDriveValid('D:\') then ASrc[2] := 'D:\'
else if wIsDriveValid('E:\') then ASrc[2] := 'E:\'
else if wIsDriveValid('F:\') then ASrc[2] := 'F:\'
else if wIsDriveValid('G:\') then ASrc[2] := 'G:\'
end;
ASrc[3] := 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe';
ASrc[4] := 'C:\Users\' + AddBackslash(GetUserNameString) + 'Desktop';
ASrc[5] := 'C:\Users\' + AddBackslash(GetUserNameString) + 'Downloads';
ASrc[6] := 'C:\Users\' + AddBackslash(GetUserNameString) + 'Documents';
P := 0; Q := 0;
for i := 1 to C_RANGE do
begin
if i = (C_RANGE div 2) + 1 {i =4} then
begin
P := 0; Q := 160;
end;
AImage[i].FCreate(FMXForm.Handle);
AImage[i].SetBounds(NSX(P + 80), NSY(Q + 80), NSX(100), NSY(100));
#ifdef AMethod1 /* Extract SysDefaultIcons into a Buffer, then load them into AImage[i] */
ImgSize[i] := wGetSysDefaultIconsSize(ASrc[i], SHL_ICO_SZ_JUMBO);
if ImgSize[i] <> -1 then
begin
SetLength(Buffer[i], ImgSize[i]);
if wGetSysDefaultIcons(ASrc[i], SHL_ICO_SZ_JUMBO, Buffer[i], Count[i]) <> -1 then
AImage[i].LoadPictureFromBuffer(Buffer[i], Count[i], wmTileStretch);
end;
#else /* Extract SysDefaultIcons into the TmpDir, then load them into AImage[i] */
ImgFile[i] := ExpandConstant('{tmp}\') + IntToStr(i) + '.png';
if wGetSysDefaultIcons2(ASrc[i], ImgFile[i], SHL_ICO_SZ_JUMBO) then
begin
AImage[i].LoadPicture(ImgFile[i], wmTileStretch);
end;
#endif
P := P + 150;
end;
{ GetSysDefaultIcons }
'LoadImgFromBuffer' is only supported by the 'FImage' control. Other controls will get this support in future updates.
------------------------------------------------------------------------------------------------------------------------------
MultiView. Needed sometimes. beautiful and modern thing, it's a pity that it is not in FMXInno...:(
the 'TMultiView' class has been added. an example for this could be found in the attachment.
The first post has been updated.
.
BLACKFIRE69
10-09-2023, 11:41
@blackfire69 Will you be able to add a line equalizer (which really reacts to music playback, and not a dummy?) How about in the Foobar2000 player.
Using vis_classic.dll or something else?
yes, it can be done with the 'XBass' plugin. i'll give it a try if i get some free time.
When user lands on Directory Page, currently there was no option to change the Game Name.
Consider for example, The game name is 'The Last of Us: Remake Part 1' and user wants to change it to 'The Last of Us' and install there, it was restricted on FEdit.
Attaching code snippet where the user will now have ability to do that:
Page2Edit.FCreate(Page2.Handle);
Page2Edit.SetBounds(NSSX(100), NSSY(190), NSSX(520), NSSY(35));
Page2Edit.FontSetting('{#FontName}', VCLFontSizeToFMX2(13), ALGainsBoro);
Page2Edit.CanFocus(True);
Page2Edit.Enabled(True);
Page2Edit.Text(MinimizePathName(WizardForm.DirEdit .Text, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
Page2Edit.OnTyping(@BrowseEditOnChange);
procedure BrowseEditOnChange(Sender: TObject);
var
PrevDrive, CurrentDrive: String;
begin
PrevDrive := ExtractFileDrive(WizardForm.DirEdit.Text);
CurrentDrive := ExtractFileDrive(Page2Edit.GetText);
// Set the installation path to the edited text value
WizardForm.DirEdit.Text := Page2Edit.GetText;
if PrevDrive <> CurrentDrive then
DirUpdateProc(nil);
end;
Let me know if any of you face issues.
@Blackfire69
1. Please acknowledge this issue when trying to use Edit on Directory section:
https://fileforums.com/showpost.php?p=502225&postcount=471
2. Installation speed is still not smooth. When transitioning from, say suppose Data-01 to Data-02, it still drops after a certain point of time. For eg: At Data-01 if it was 64mb/s, when extracting Data-02 it refreshes (resets) and becomes 12mb/s after some time.
Not sure if it helps, but save the previous/average installation speed and when the disk transition happens, do (prev installation speed+ current callback speed)/2 (like take average)
BLACKFIRE69
11-09-2023, 04:48
@blackfire69 Will you be able to add a line equalizer (which really reacts to music playback, and not a dummy?) How about in the Foobar2000 player.
Using vis_classic.dll or something else?
updated the 'XBass' plugin, and it now includes a new function named 'xbassAddSpectrum'. you can utilize this function to meet your expectations.
additionally, please use the 'XBass' external plugin (.dll) since using the internal 'XBass' can lead to conflicts with 'FireMonkey'.
@blackfire69
1.-About the window collapse animation...(MinimizeWindowCustomAnimated). Some users claim that on weak and not very powerful PCs, this option is performed with a delay and jerks. There may even be a collapse of the form. I couldn't repeat it. And to be honest, I don't care about this option (everyone can turn it on or off by themselves). But still review my script, maybe I did something wrong?
2.-It was also noticed that if the type of form is selected (FCreateImageForm), then the form does not return to its normal state after folding, but turns into a small rectangle (I attach a screenshot). Maybe it's my jamb (look through my script and maybe you'll find an error).
'MinimizeWindowCustomAnimated' now uses a different effect, meaning the old one has been replaced.
additionally, remember the following:
1. since this is just an effect, you need to call 'pMinimizeWindow' to do the actual minimization.
2. it does not support 'FCreateImageForm'. some of the features in the 'FMXInno' plugin shouldn't be there officially, so i had to use some tricks to integrate them. this may cause compatibility issues.
type
TMinimizeAnimPos = (mapTop, mapBottom, mapLeft, mapRight);
function MinimizeWindowCustomAnimated(MinimizeAnimPos: TMinimizeAnimPos): Boolean;
.
@BlackFire69
FProgressBar will always require a custom theme file to set up color and look. I was trying this with FThinProgressBar and the only thing I need is Orientation. Is it possible to add it to FThinProgressBar?
The reason to choose it over ProgressBar is to be able to custom code based on Color and be independent of styling. Like make it even Color Gradient.
updated the 'XBass' plugin, and it now includes a new function named 'xbassAddSpectrum'. you can utilize this function to meet your expectations.
additionally, please use the 'XBass' external plugin (.dll) since using the internal 'XBass' can lead to conflicts with 'FireMonkey'.
.
BLACKFIRE69
11-09-2023, 07:59
@BlackFire69
FProgressBar will always require a custom theme file to set up color and look. I was trying this with FThinProgressBar and the only thing I need is Orientation. Is it possible to add it to FThinProgressBar?
The reason to choose it over ProgressBar is to be able to custom code based on Color and be independent of styling. Like make it even Color Gradient.
replaced 'FProgressBar' with 'FThinProgressBar'
.
@BlackFire69 Thank you FThinprogressBar update. I have one little question though.
Is there a way where we can show pop-up box over a FVideoPlayer. If not, is it possible for you to make it (as I have some amazing idea). If yes, can you show me a test code with it.
Attaching a photo as an example for what I want it look like.
A Video playing in the background instead of photo, and a pop-up display to show some information on top of it.
crachlow
11-09-2023, 13:28
There the video is displayed on the panel, and only then there are inscriptions.
Tihiy_Don
11-09-2023, 21:54
I ask you to observe backward compatibility or write what types of variables you changed in the libraries. Since I am now trying to update the script for a new library and get a lot of errors.
In some functions, you have changed the type from integer to single. I ask you to indicate this, since it is problematic to observe compatibility when updating the library.
BLACKFIRE69
11-09-2023, 22:10
I ask you to observe backward compatibility or write what types of variables you changed in the libraries. Since I am now trying to update the script for a new library and get a lot of errors.
In some functions, you have changed the type from integer to single. I ask you to indicate this, since it is problematic to observe compatibility when updating the library.
adding backward compatibility can be a drawback in many cases. so, we should embrace the latest.
NOTE:
This update involves modifications to certain functions/procedures, which might require adjustments to current scripts.
https://i.ibb.co/2WhFn28/00.png
https://i.ibb.co/VTNMGC0/01.png
@audiofeel
I'm playing a video using FVideoPlayer in the background of a FCustomPage. I want to display a FPopupBox over this FCustomPage. I want to know if it can be made possible.
Perhaps you need to play video through a third-party dll. This script at least has text over the video.
BLACKFIRE69
12-09-2023, 07:47
FMXInno Update - [2023-Sep-12]
* Added new functions.
* Disabled runtime integrity checks.
* Fixed DirBrowse Edit.
* Updated FCreate* functions.
* Updated 'MinimizeWindowCustomAnimated' for ImageForms.
* Updated 'XBass' (internal/external).
* Updated 'ISArcEx' (internal/external).
* Removed lzma2 algorithm and used the lowest compression level.
- FinalSize(old): 2.86 MB
- FinalSize(new): 3.41 MB
{ PowerPlan ID }
const
USER_PP_POWER_SAVER = $0002;
USER_PP_BALANCED = $0004;
USER_PP_HIGH_PERFORMANCE = $0006;
USER_PP_ULTIMATE_PERFORMANCE = $0008;
USER_PP_UNKNOWN = $0001;
function wPowerPlanGetActivePlan: Byte;
function wPowerPlanExist(const PowerPlanID: Byte): Boolean;
function wPowerPlanSetOrCreate(const PowerPlanID: Byte): Boolean;
var
CurActivePowerPlanID: Byte;function InitializeSetup(): Boolean;
begin
CurActivePowerPlanID := wPowerPlanGetActivePlan;
if (CurActivePowerPlanID = USER_PP_POWER_SAVER) or // Power saver
(CurActivePowerPlanID = USER_PP_BALANCED) or // Balanced
(CurActivePowerPlanID = USER_PP_UNKNOWN) then // Unknown (optional)
begin
if (not wPowerPlanSetOrCreate(USER_PP_HIGH_PERFORMANCE)) then // High performance
MsgBox('High performance powerplan error.', mbError, MB_OK);
end;
FMXInnoInit;
Result := True;
end;
procedure DeinitializeSetup();
begin
wPowerPlanSetOrCreate(CurActivePowerPlanID);
FMXInnoShutDown;
end;
-----------------------------------------------------------------------------------------------------------------------
@blackfire69
MinimizeWindowCustomAnimated).
It was also noticed that if the type of form is selected (FCreateImageForm), then the form does not return to its normal state after folding, but turns into a small rectangle (I attach a screenshot). Maybe it's my jamb (look through my script and maybe you'll find an error).
'MinimizeWindowCustomAnimated' has been fixed for 'ImageForms'.
-----------------------------------------------------------------------------------------------------------------------
@Blackfire69
1. Please acknowledge this issue when trying to use Edit on Directory section:
https://fileforums.com/showpost.php?p=502225&postcount=471
fixed.
-----------------------------------------------------------------------------------------------------------------------
2. Installation speed is still not smooth. When transitioning from, say suppose Data-01 to Data-02, it still drops after a certain point of time. For eg: At Data-01 if it was 64mb/s, when extracting Data-02 it refreshes (resets) and becomes 12mb/s after some time.
Not sure if it helps, but save the previous/average installation speed and when the disk transition happens, do (prev installation speed+ current callback speed)/2 (like take average)
1. 'ISArcEx' only calculates the current extraction speed for the current archive.
2. 'ISArcExReduceCalcAccuracy' has been updated.
- procedure ISArcExReduceCalcAccuracy(Factor: Byte);
- Factor: 1-5 (default = 1).
.
XH75819116
12-09-2023, 19:34
win10 21h1 FMXForm:= InitFormHandle unresponsive
BLACKFIRE69
12-09-2023, 20:54
win10 21h1 FMXForm:= InitFormHandle unresponsive
i don't have Windows 10 21H1 at the moment, but it's working fine on Windows 10 22H2 (even on a virtual machine).
screenshot:
.
Hi! What about rounding out the shape?
I want to use "FMXForm.FCreateNormal(WizardForm.Handle);" so that I can put any image on top of the form and it will be rounded.
On the screenshots you can see it perfectly well, everything turns out using this:
function SetWindowRgn(hWnd: HWND; hRgn: LongWord; bRedraw: BOOL): Integer;
external '
[email protected] stdcall';
SetWindowRgn(FMXForm.Handle, FormRegion, True);
But then the form and FMX live separately, i.e. the FMX layer moves on the WizardForm form.
SetWindowRgn works only with "FMXForm.FCreateNormal", I want to have the same view for all systems (from Win7 to 11) and have the ability to set parameters of form rounding.
BLACKFIRE69
13-09-2023, 08:17
@BLACKFIRE69
Is it impossible to get an icon to display by the icon index?
wGetSysDefaultIcons2
something like this...
%SystemRoot%\System32\SHELL32.dll, -123
maximum size will be 32x32. if this is ok to you, let me know.
.
BLACKFIRE69
13-09-2023, 09:59
Disappointment. The size is too small. But still this function is useful in future cases as in the screenshot below.
how about now?
.
hitman797
13-09-2023, 17:03
do you remember when we did the metro install? now the necessary objects have been added, but I don't understand everything. can you show an example
MultiView, SpeedBtn etc.
Metro Installer
BLACKFIRE69
14-09-2023, 07:23
@BLACKFIRE69
Is it impossible to get an icon to display by the icon index?
wGetSysDefaultIcons2
something like this...
%SystemRoot%\System32\SHELL32.dll, -123
{ ResIconSize }
const
RIS_SMALL = $0001; // 16 x 16
RIS_MEDIUM = $0002; // 32 x 32
RIS_LARGE = $0003; // 48 x 48
RIS_EXTRA_LARGE = $0004; // 64 x 64
RIS_EXTRA_EXTRA_LARGE = $0005; // 128 x 128
RIS_JUMBO = $0006; // 256 x 256
function wGetSysDefaultIconsFromResLib(const AModule: WideString;
AIndex, RISIcoSize: Cardinal; const Buffer: PAnsiChar; var Count: Cardinal): Integer;
function wGetSysDefaultIconsFromResLib2(const AModule, AOutFile: WideString;
AIndex, RISIcoSize: Cardinal): Boolean;
function wGetSysDefaultIconsSizeFromResLib(const AModule: WideString;
AIndex, RISIcoSize: Cardinal): Integer;
{ GetSysDefaultIcons }
AModule := 'C:\Windows\SystemResources\imageres.dll.mun';
AIndex[1] := 31; // C-Drive
AIndex[2] := 27; // OtherDrvs
AIndex[3] := 103; // Music
AIndex[4] := 105; // Desktop
AIndex[5] := 175; // Donwloads
AIndex[6] := 107; // Documents
P := 0; Q := 0;
for i := 1 to C_RANGE do
begin
if i = (C_RANGE div 2) + 1 {i =4} then
begin
P := 0; Q := 160;
end;
AImage[i].FCreate(FMXForm.Handle);
AImage[i].SetBounds(NSX(P + 130), NSY(Q + 80), NSX(100), NSY(100));
#ifdef AMethod1 /* Extract SysDefaultIcons into a Buffer, then load them into AImage[i] */
ImgSize[i] := wGetSysDefaultIconsSizeFromResLib(AModule, AIndex[i], RIS_EXTRA_EXTRA_LARGE);
if ImgSize[i] <> -1 then
begin
SetLength(Buffer[i], ImgSize[i]);
if wGetSysDefaultIconsFromResLib(AModule, AIndex[i], RIS_EXTRA_EXTRA_LARGE, Buffer[i], Count[i]) <> -1 then
AImage[i].LoadPictureFromBuffer(Buffer[i], Count[i], wmTileStretch);
end;
#else /* Extract SysDefaultIcons into the TmpDir, then load them into AImage[i] */
ImgFile[i] := ExpandConstant('{tmp}\') + IntToStr(i) + '.png';
if wGetSysDefaultIconsFromResLib2(AModule, ImgFile[i], AIndex[i], RIS_EXTRA_EXTRA_LARGE) then
begin
AImage[i].LoadPicture(ImgFile[i], wmTileStretch);
end;
#endif
P := P + 150;
end;
{ GetSysDefaultIcons }
.
BLACKFIRE69
14-09-2023, 08:49
I have a question. Five buttons, four of which are "Align Top" and the fifth "Align Bottom". Why does the fourth button come in second place?
Delphi/FMX: How to add a dynamically created top-aligned component (https://stackoverflow.com/questions/62259407/delphi-fmx-how-to-add-a-dynamically-created-top-aligned-component-under-all-pre)
.
Jahan1373
14-09-2023, 20:12
Metro Installer
Hello brother, please give the complete script, where should I download it, thanks
BLACKFIRE69
15-09-2023, 05:29
@BLACKFIRE69 How to avoid animation jerks when pointing the pointer at different objects with the same task? I didn't come up with anything better, as in the code below. Everything goes smoothly but with only one object (animation).
TObject(PanelBtnClick[1].GetObject), TObject(PanelBtnClick[2].GetObject), TObject(PanelBtnClick[3].GetObject),
TObject(PanelBtnClick[4].GetObject), TObject(PanelBtnClick[5].GetObject), TObject(LeftPanel.GetObject):
begin
FMXForm.AnimateFloatDelay(LeftPanel.Handle, 'Width', NSX(280), 0.5, 0.2,
atInOut, itBack);
end;
If you make an array as in the example below, there will still be jerks between objects (animation).
procedure CommonMouseEnter(Sender: TObject);
var
i: Integer;
begin
i := -1;
case Sender of
TObject(Btn[1].GetObject): i := 1;
TObject(Btn[2].GetObject): i := 2;
TObject(Btn[3].GetObject): i := 3;
TObject(Btn[4].GetObject): i := 4;
TObject(Btn[5].GetObject): i := 5;
end;
if i <> -1 then
Btn[i].FontSetting('{#MyFont2Name}', NS(52), VCLColorToFMXColor($EEEE00));
end;
i'm not sure. could you provide an example or explain further?
BLACKFIRE69
15-09-2023, 05:51
FMXInno - Updates: 2023-Sep-15
The latest version has been added to the first post.
BLACKFIRE69
15-09-2023, 06:04
Ok!
here is everything I had enough for)))
if you are talking about Custom MultiView, you need to plan it out a bit more thoroughly than this.
.
BLACKFIRE69
15-09-2023, 06:43
if you are talking about Custom MultiView, you need to plan it out a bit more thoroughly than this.
.
screenshot:
.
@Blackfire69
If you have some time, can you please work on enabling some component over FVideoPlayer (like even FPopUpBox) will also be fine.
You can check this post for the requirement I'm asking for.
https://fileforums.com/showpost.php?p=502426&postcount=493
hitman797
15-09-2023, 11:57
Is it necessary for OnEnter?
OnMouseEnter is Trigger to start animation.
OnMouseLeave is Trigger to Reverse animation.
You can use OnClick.
BLACKFIRE69
19-09-2023, 04:19
FMXInno Moments Updates: [2023-September-19]
What's New:
* Added 'FSplashAnimated' with Sounds.
* Updated 'FUserInfo'.
* Updated 'ChatGPT':
- The example has been updated.
- Added a simple output.
* Updated 'ISArcEx':
- 'ISArcExReduceCalcAccuracy' is now straightforward.
- The range of the factor has increased from 5 to 10 (1-10).
- Factor = 1 means it delays the calculations of RemainingTime and Speeds by 0.25 seconds.
- Factor = 2 -> delay by 0.50 seconds.
- Factor = 3 -> delay by 0.75 seconds.
- Factor = 4 -> delay by 1.00 seconds.
- And so on.
The first post has been updated.
.
BLACKFIRE69
21-09-2023, 05:23
@BLACKFIRE69
CAN YOU FIX pjScreen IN FLayer3D?
FMXLayer3D[1].FCreate(FMXViewport3D.Handle);
FMXLayer3D[1].Align(Client);
//FMXLayer3D[1].Projection(pjScreen);
FMXLayer3D[1].Transparency(True);
FMXLayer3D[1].FillColor(ALNull);
//
FMXLayer3D[2].FCreate(FMXViewport3D.Handle);
FMXLayer3D[2].Align(Client);
//FMXLayer3D[2].Projection(pjScreen);
FMXLayer3D[2].Transparency(True);
FMXLayer3D[2].FillColor(ALNull);
@hitman797,
there's no need for any fixes with the Projection; it's working perfectly as intended.
however, please keep in mind that you should call Projection(pjScreen) before Align(Client) to ensure proper functionality.
For additional information, please refer to this: Creating a 2D Interface in a 3D App (FireMonkey 3D) (https://docwiki.embarcadero.com/RADStudio/Sydney/en/Creating_a_2D_Interface_in_a_3D_Application_(FireM onkey_3D_Tutorial))
.
Masquerade
21-09-2023, 05:25
Can't wait for someone to make a sick scene-style demo using this software :cool:
hitman797
21-09-2023, 06:10
Developer suggestions:
Hi BLACKFIRE69, thank you for making example for 3D animation.
I really appreciate the work you bring to this forum thank you.
Feature of the FMXInno plugin:
GridLayout: TGridLayout;
ComboColorBox: TComboColorBox;
ListBox: TListBox;
hitman797
22-09-2023, 08:22
Form:
FMXForm[1].FormShow(@FormShow);
FMXForm[1].FormCreate(@FormCreate);
FMXForm[1].FormKeyDown(@FormKeyDown);
GridLayout:
FMXGridLayout[1].FCreate(FMXTabItem[3].Handle);
FMXGridLayout[1].Align(Client);
FMXGridLayout[1].ItemHeight(168);
FMXGridLayout[1].ItemWidth(224);
FMXGridLayout[1].Orientation(Horizontal);
FMXGridLayout[1].Margins(91, 72, 91, 72);
FMXGridLayout[1].Height(336);
FMXGridLayout[1].Width(672);
ComboColorBox:
FMXComboColorBox[1].FCreate(FMXLayout[3].Handle);
FMXComboColorBox[1].Align(Client);
FMXComboColorBox[1].CanFocus(False);
FMXComboColorBox[1].FillColor(ALWhite);
FMXComboColorBox[1].Margins(0, 8, 0, 8);
FMXComboColorBox[1].Height(24);
FMXComboColorBox[1].Width(48);
FMXComboColorBox[1].OnChange(@OnChange);
Layer3D:
FMXLayer3D[1].StyleLookup('backgroundstyle');
Layout:
FMXLayout[1].Position(X, Y);
Rectangle:
FMXRectangle[1].Position(X, Y);
Label:
FMXLabel[1].Position(X, Y);
BLACKFIRE69
22-09-2023, 17:14
Following classes have been added.
* Standard:
- TListBox
* Layout:
- TGridLayout
- TFlowLayout
- TScaledLayout
* Colors:
- TComboColorBox
.
hitman797
22-09-2023, 18:21
Following classes have been added.
* Standard:
- TListBox
* Layout:
- TGridLayout
- TFlowLayout
- TScaledLayout
* Colors:
- TComboColorBox
.
@BLACKFIRE69,
Thanks for the update, great job, we can complete the installer.
Some suggestions:
Form:
FMXForm[1].FormShow(@FormShow);
FMXForm[1].FormCreate(@FormCreate);
FMXForm[1].FormKeyDown(@FormKeyDown);
ComboColorBox:
FMXComboColorBox[1].CanFocus(False);
FMXComboColorBox[1].GetObject;
Layer3D:
FMXLayer3D[1].StyleLookup('backgroundstyle');
Layout:
FMXLayout[1].Position(X, Y);
Rectangle:
FMXRectangle[1].Position(X, Y);
Label:
FMXLabel[1].Position(X, Y);
BLACKFIRE69
23-09-2023, 04:11
FMXInno Updates - [2023-Sep-23]
* Added a quality update to the first post. Please check it out.
@BLACKFIRE69,
Thanks for the update, great job, we can complete the installer.
Some suggestions:
Form:
FMXForm[1].FormShow(@FormShow);
FMXForm[1].FormCreate(@FormCreate);
FMXForm[1].FormKeyDown(@FormKeyDown);
ComboColorBox:
FMXComboColorBox[1].CanFocus(False);
FMXComboColorBox[1].GetObject;
Layer3D:
FMXLayer3D[1].StyleLookup('backgroundstyle');
Layout:
FMXLayout[1].Position(X, Y);
Rectangle:
FMXRectangle[1].Position(X, Y);
Label:
FMXLabel[1].Position(X, Y);
done.
hitman797
23-09-2023, 11:28
Thanks Gift 2024 3 Page done.
hitman797
24-09-2023, 08:00
why don't you resort to this form? more like the original
four pages done thank you @audiofeel for the advice.
hitman797
24-09-2023, 12:16
If we take your script as a basis and add FComboColorBox activation to it when you activate the FComboColorBox for the first time, it does not appear where it was intended Why??
I think the problem is in the arrangement.
hitman797
24-09-2023, 13:46
The design is 100 percent complete..
hitman797
24-09-2023, 16:00
great job. nerves of steel. there is no completion page. I once did something similar...
Thank you @audiofeel, the animation and color has been added.
hitman797
25-09-2023, 14:37
@BLACKFIRE69
Show an example of how to change the color of objects on the fly, as in the example below? FReactangle(FillColor.Stroke.Color). I can't do it with FColorbox.I can't do it. The color changes if you only touch the object.
var
UIColour: array of TAlphaColor = [$B93A4955, $FF202B2F, $FFC0233C];
procedure TForm1.ComboColorBox1Change(Sender: TObject);
var
I, J: Integer;
begin
if ComboColorBox1 = Sender then
J := 0;
if ComboColorBox2 = Sender then
J := 1;
if ComboColorBox3 = Sender then
J := 2;
for I := 0 to ComponentCount - 1 do
begin
if (Components[I] is TShape) then
begin
if TShape(Components[I]).TagString = J.ToString then
TShape(Components[I]).Fill.Color := TComboColorBox(Sender).Color;
if TShape(Components[I]).TagString = (J + Length(UIColour)).ToString then
TShape(Components[I]).Stroke.Color := TComboColorBox(Sender).Color;
end;
UIColour[J] := TComboColorBox(Sender).Color;
end;
end;
see this, change the color of objects on the fly.
FMXColorAnimation[1].StopAtCurrent;
FMXColorAnimation[1].SetColors(FMXComboColorBox[2].GetColor, FMXComboColorBox[1].GetColor);
FMXColorAnimation[1].Start;
FMXArc[2].StrokeColor(FMXComboColorBox[3].GetColor);
FMXCircle[5].StrokeColor(FMXComboColorBox[3].GetColor);
FMXRectangle[87].FillColor(FMXComboColorBox[3].GetColor);
hitman797
25-09-2023, 15:52
add Finished Page.
//FMXTabItem[10].IsSelected(True);
//FMXLabel[12].Text('Start installation');
//FMXLabel[13].Text(#$E184);
FMXTabItem[11].IsSelected(True);
FMXLabel[12].Text('Finished');
FMXLabel[13].Text(#$E10A);
fix FMXRectangle[90]
FMXRectangle[90].CornerStyle(10, 10, [tcTopLeft, tcTopRight, tcBottomLeft, tcBottomRight], ctRound);
hitman797
25-09-2023, 16:27
if you change all the ctRound with ctInnerRound.
this what lock like.
hitman797
25-09-2023, 21:35
when the installation really goes into error, the animation of the last page does not seem very successful, but it is better than without it.
move all the objects in the FMXTabItem[11] to FMXTabItem[4].
FMXTabItem[11] in FMXLayer3D[2].
FMXTabItem[4] in FMXLayer3D[1].
hitman797
26-09-2023, 08:06
I. very interesting, but nothing is clear
-------
II. above in the posts you wrote that you may need to rearrange the procedures and then the ColorBox will appear where necessary. I finally found this place. you need to Align(Right); remove to the end.
-------
III. you need to think something about calculating the size of the components. we are not on the components page. probably do something like that. I don't know...
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if TCheckBox(Sender).Checked then sum3:=sum3+TCheckBox(Sender).Tag/100 else
sum3:=sum3-TCheckBox(Sender).Tag/100;
end;
[Component0]
Name=Core files
Size=30000
[Component1]
Name=Need For Speed Underground
Size=30000
[Component2]
Name=Need For Speed Underground 2
Size=30000
[Component3]
Name=Need For Speed Most Wanted 05'
Size=30000
[Component4]
Name=Need For Speed Carbon
Size=30000
[Component5]
Name=Need For Speed Pro Street
Size=30000
[Component6]
Name=Need For Speed Undercover
Size=30000
[Component7]
Name=Need For Speed Shift
Size=30000
[Component8]
Name=Need For Speed Hot Pursuit
Size=30000
[Component9]
Name=Need For Speed The Run
Size=30000
[Component10]
Name=Need For Speed Shift 2 Unleashed
Size=30000
[Component10]
Name=Need For Speed Most Wanted 12'
Size=30000
[Component11]
Name=Need For Speed Rivals
Size=30000
[Component12]
Name=Need For Speed 15'
Size=30000
function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean;
function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint;
function GetIniString(const Section, Key, Default, Filename: String): String;
hitman797
26-09-2023, 08:15
Developer suggestions:
Hi @BLACKFIRE69, can you add this class to FMXInno.
thank you.
Feature of the FMXInno plugin:
TMemIniFile = class(TCustomIniFile)
MemIniFile:= TMemIniFile.Create('setup.ini');
TRegistry = class(TObject)
Registry:= TRegistry.Create(KEY_READ);
function GetIniString(Section, Key, Default: string; Ini: TMemIniFile): string;
function GetIniBoolean(Section, Key: string; Default: Boolean;
Ini: TMemIniFile): Boolean;
function GetIniFloat(Section, Key: string; Default: Single;
Ini: TMemIniFile): Single;
function GetIniInteger(Section, Key: string; Default: Integer;
Ini: TMemIniFile): Integer;
function GetIniColor(Section, Key: string; Default: TAlphaColor;
Ini: TMemIniFile): TAlphaColor;
procedure SetIniString(Section, Key, Default: string; Ini: TMemIniFile): string;
procedure SetIniBoolean(Section, Key: string; Default: Boolean;
Ini: TMemIniFile): Boolean;
procedure SetIniFloat(Section, Key: string; Default: Single;
Ini: TMemIniFile): Single;
procedure SetIniInteger(Section, Key: string; Default: Integer;
Ini: TMemIniFile): Integer;
procedure SetIniColor(Section, Key: string; Default: TAlphaColor;
Ini: TMemIniFile): TAlphaColor;
BLACKFIRE69
26-09-2023, 11:07
Developer suggestions:
Hi @BLACKFIRE69, can you add this class to FMXInno.
thank you.
Feature of the FMXInno plugin:
TMemIniFile = class(TCustomIniFile)
MemIniFile:= TMemIniFile.Create('setup.ini');
TRegistry = class(TObject)
Registry:= TRegistry.Create(KEY_READ);
function GetIniString(Section, Key, Default: string; Ini: TMemIniFile): string;
function GetIniBoolean(Section, Key: string; Default: Boolean;
Ini: TMemIniFile): Boolean;
function GetIniFloat(Section, Key: string; Default: Single;
Ini: TMemIniFile): Single;
function GetIniInteger(Section, Key: string; Default: Integer;
Ini: TMemIniFile): Integer;
function GetIniColor(Section, Key: string; Default: TAlphaColor;
Ini: TMemIniFile): TAlphaColor;
procedure SetIniString(Section, Key, Default: string; Ini: TMemIniFile): string;
procedure SetIniBoolean(Section, Key: string; Default: Boolean;
Ini: TMemIniFile): Boolean;
procedure SetIniFloat(Section, Key: string; Default: Single;
Ini: TMemIniFile): Single;
procedure SetIniInteger(Section, Key: string; Default: Integer;
Ini: TMemIniFile): Integer;
procedure SetIniColor(Section, Key: string; Default: TAlphaColor;
Ini: TMemIniFile): TAlphaColor;
{ Ini }
function ReadIniStr(const Section, Key, Default, FileName: WideString): WideString;
external 'ReadIniStr@files:FMXInno.dll stdcall delayload';
function WriteIniStr(const Section, Key, Value, FileName: WideString): Boolean;
external 'WriteIniStr@files:FMXInno.dll stdcall delayload';
{ ReadReg }
function pReadRegStr(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): WideString;
external 'pReadRegStr@files:FMXInno.dll stdcall delayload';
function pReadRegInt(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): Integer;
external 'pReadRegInt@files:FMXInno.dll stdcall delayload';
function pReadRegBool(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): Boolean;
external 'pReadRegBool@files:FMXInno.dll stdcall delayload';
function pReadRegDouble(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): Double;
external 'pReadRegDouble@files:FMXInno.dll stdcall delayload';
hitman797
26-09-2023, 13:15
{ Ini }
function ReadIniStr(const Section, Key, Default, FileName: WideString): WideString;
external 'ReadIniStr@files:FMXInno.dll stdcall delayload';
function WriteIniStr(const Section, Key, Value, FileName: WideString): Boolean;
external 'WriteIniStr@files:FMXInno.dll stdcall delayload';
{ ReadReg }
function pReadRegStr(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): WideString;
external 'pReadRegStr@files:FMXInno.dll stdcall delayload';
function pReadRegInt(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): Integer;
external 'pReadRegInt@files:FMXInno.dll stdcall delayload';
function pReadRegBool(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): Boolean;
external 'pReadRegBool@files:FMXInno.dll stdcall delayload';
function pReadRegDouble(const RootKey: Integer; const Key, Name: WideString; CreateNew: Boolean): Double;
external 'pReadRegDouble@files:FMXInno.dll stdcall delayload';
Thank you for the replay.
hitman797
26-09-2023, 17:13
does not work. most likely, this will not work in TAG.
done with Timer.
press Ctrl + D to show color combo box.
FMXBass: array [1..2] of IXBass;
FMXCPU: array [1..2] of FCpuUsage;
FMXRAM: array [1..2] of FRamUsage;
FMXDISK: array [1..2] of FDiskUsage;
FMXGPU: array [1..2] of FGPUInfo;
FMXINFO: array [1..2] of FOSInfo;
BLACKFIRE69
28-09-2023, 14:00
Can 't this code be shortened somehow ?
procedure OnChange(Sender: TObject);
begin
case Sender of
TObject(FMXComboColorBox[1].GetObject):
begin
FMXRectangle[97].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[7].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[8].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[9].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[10].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[11].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[12].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[13].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[14].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[15].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[16].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[17].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[18].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[20].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[21].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[22].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[23].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[24].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[35].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[36].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[37].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[38].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[39].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[50].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[51].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[52].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[53].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[54].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[62].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[63].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[64].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[65].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[66].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[75].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[84].FillColor(FMXComboColorBox[1].GetColor);
FMXArc[1].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[85].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[86].FillColor(FMXComboColorBox[1].GetColor);
FMXRectangle[93].FillColor(FMXComboColorBox[1].GetColor);
end;
var
MyArr: array of Integer;
procedure [B]FMXInnoInit;
var
I: Integer;
begin
SetArrayLength(MyArr, 38);
for I := 0 to 37 do
begin
case I of
0..11 : MyArr[i] := 7 + I; // 7..18
12..16 : MyArr[i] := 20 + (I - 12); // 20..24
17..21 : MyArr[i] := 35 + (I - 17); // 35..39
22..26 : MyArr[i] := 50 + (I - 22); // 50..54
27..31 : MyArr[i] := 62 + (I - 27); // 62..66
32 : MyArr[32] := 75; // 75
33..35 : MyArr[i] := 84 + (I - 33); // 84..86
36 : MyArr[36] := 93; // 93
37 : MyArr[37] := 97; // 97
end;
end;
end;
procedure OnChange(Sender: TObject);
var
I: Integer;
begin
case Sender of
TObject(FMXComboColorBox[1].GetObject):
begin
FMXArc[1].FillColor(FMXComboColorBox[1].GetColor);
for I := Low(MyArr) to High(MyArr) do
FMXRectangle[MyArr[I]].FillColor(FMXComboColorBox[1].GetColor);
end;
end;
end;
hitman797
29-09-2023, 15:14
Sorry, I forgot to mention that there are three colorbox and three colors .
var
MyArr: array of Integer;
procedure FMXInnoInit;
var
I: Integer;
begin
SetArrayLength(MyArr, 38);
for I := 0 to 37 do
begin
case I of
I=(0..11) : MyArr[i] := 7 + I; // 7..18 // 7 + 11 = 18;
I=(12..16) : MyArr[i] := 20 + (I - 12); // 20..24 // 20 + (16 - 12)= 24;
I=(17..21) : MyArr[i] := 35 + (I - 17); // 35..39 // 35 + (21 - 17)= 39;
I=(22..26) : MyArr[i] := 50 + (I - 22); // 50..54 // 50 + (26 - 22)= 54;
I=(27..31) : MyArr[i] := 62 + (I - 27); // 62..66 // 62 + (31 - 27)= 66;
I=(32) : MyArr[32] := 75; // 75 // 75;
I=(33..35) : MyArr[i] := 84 + (I - 33); // 84..86 // 84 + (35 - 33)= 86;
I=(36) : MyArr[36] := 93; // 93 // 93;
I=(37) : MyArr[37] := 97; // 97 // 97;
end;
end;
end;
procedure OnChange(Sender: TObject);
var
I: Integer;
begin
case Sender of
TObject(FMXComboColorBox[1].GetObject):
begin
FMXArc[1].FillColor(FMXComboColorBox[1].GetColor);
for I := Low(MyArr) to High(MyArr) do
FMXRectangle[MyArr[I]].FillColor(FMXComboColorBox[1].GetColor);
end;
end;
end;
hitman797
02-10-2023, 01:19
Developer suggestions:
Hi @BLACKFIRE69, can you add GetText of FLabel class to FMXInno.
thank you.
FLabel:
function GetText: WideString;
BLACKFIRE69
02-10-2023, 23:53
@BLACKFIRE69
Is there any way to get a list of disks in a listbox? I don't quite understand how to do this. The example with the combobox does not fit.
procedure GetDisks;
var
w: dword;
Root: string;
i, DiskType: integer;
begin
w:= GetLogicalDrives;
Root:= '#:\';
for i:= 0 to 24 do
begin
Root[1]:= Chr(Ord('A') + i);
if (W and (1 shl i)) > 0 then
if (GetDriveType(PAnsiChar(Root)) = DRIVE_FIXED) then
Edit1Combo.AddItem(Root);
end;
Edit1Combo.SetItemIndex(0);
end;
it's not a big deal.
var
...
mListBox : FListBox;
mListBoxItem: array of FListBoxItem;
...
procedure FMXInnoInit;
begin
...
mListBox := InitListBoxHandle;
...
end;
procedure InitializeWizard();
begin
...
FMXDesigning;
FMXForm.Show;
mListBox.SetItemIndex(2); // i-1
...
end;
procedure ListBoxOnChange(Sender: TObject);
begin
if mListBox.GetItemIndex > -1 then
WinTB1.Text('Selected Drive: [' + mListBox.GetItemText(mListBox.GetItemIndex) + ']');
end;
procedure FMXDesigning;
var
i, CDrvIdx: Integer;
ADrvLst: TArrWStr;
begin
...
if not wGetLogicalDriveList(ADrvLst, CDrvIdx) then
begin
Log('"wGetLogicalDriveList" failed!');
MsgBox('"wGetLogicalDriveList" failed!', mbError, MB_OK);
// try another way.
end;
{ ListBox }
mListBox.FCreate(FMXForm.Handle);
mListBox.SetBounds(NSX(32), NSY(53), NSX(297), NSY(249));
mListBox.OnChange(@ListBoxOnChange);
{ Items }
SetArrayLength(mListBoxItem, GetArrayLength(ADrvLst));
mListBox.BeginUpdate;
for i := 0 to GetArrayLength(ADrvLst) - 1 do
begin
mListBoxItem[i] := InitListBoxItemHandle;
mListBoxItem[i].FCreate(mListBox.Handle);
mListBoxItem[i].Text(ADrvLst[i]);
mListBox.AddItem(mListBoxItem[i].Handle);
end;
mListBox.EndUpdate;
...
end;
.
Jahan1373
03-10-2023, 21:46
Hello, thank you for your hard work
If it is possible, can you put the metro script, I have downloaded a few, when it starts, the first page is white, then the page comes, please put this, thank you
hitman797
04-10-2023, 04:54
var
Form4: TForm4;
Directory: TDirectoryListBox;
Drive: TDriveComboBox;
FileList: TFileListBox;
procedure TForm4.FormCreate(Sender: TObject);
begin
// Directory
Directory:= TDirectoryListBox.Create(nil);
Directory.ParentWindow:=FmxHandleToHWND(Form4.Hand le);
Directory.Visible:=False;
Directory.FileList:=FileList;
// Drive
Drive:= TDriveComboBox.Create(nil);
Drive.ParentWindow:=FmxHandleToHWND(Form4.Handle);
Drive.Visible:=False;
Drive.TextCase:=tcUpperCase;
Drive.DirList:=Directory;
// FileList
FileList:= TFileListBox.Create(nil);
FileList.ParentWindow:=FmxHandleToHWND(Form4.Handl e);
FileList.Visible:=False;
//
ListBox1.Items:= Directory.Items;
ListBox2.Items:= FileList.Items;
ComboBox1.Items:= Drive.Items;
end;
procedure TForm4.ComboBox1Change(Sender: TObject);
begin
Drive.ItemIndex:= ComboBox1.ItemIndex;
end;
procedure TForm4.ListBox1ItemClick(const Sender: TCustomListBox;
const Item: TListBoxItem);
begin
ListBox1.BeginUpdate;
ListBox1.Items:= Directory.Items;
ListBox1.EndUpdate;
end;
procedure TForm4.ListBox2ItemClick(const Sender: TCustomListBox;
const Item: TListBoxItem);
begin
ListBox2.BeginUpdate;
ListBox2.Items:= FileList.Items;
ListBox2.EndUpdate;
end;
hitman797
05-10-2023, 02:04
hDrive: TDriveComboBox;
hFilter: TFilterComboBox;
hDirectory: TDirectoryListBox;
hFileList: TFileListBox;
Masquerade
06-10-2023, 01:07
Please may I have some guidance transitioning my Installer from IsArcEx to using the module included in FMXInno? IsArcEx.dll is getting a lot of hits on VT and people downloading my releases are accusing me of putting trojans in the release.
hitman797
06-10-2023, 01:34
Please may I have some guidance transitioning my Installer from IsArcEx to using the module included in FMXInno? IsArcEx.dll is getting a lot of hits on VT and people downloading my releases are accusing me of putting trojans in the release.
[Files]
Source: "Files\FMXInno.dll"; Flags: dontcopy;
type
TCallback = function(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB: Integer; DiskName, CurrentFile, RemainsTime, ElapsedTime, CurSpeed, AvgSpeed: WideString): LongWord;
TCallbackEx = function(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB, TotalFiles, CurFiles: Integer; DiskName, CurrentFile, RemainsTime, ElapsedTime, CurSpeed, AvgSpeed: WideString): LongWord;
var
ISArcExDiskCount : Integer;
ISArcExCancel : Integer;
ISArcExError : Boolean;
ISArcDiskAddingSuccess: Boolean;
function ISArcExInit(WinHandle: Longint; TimeFormat: Integer; Callback: TCallback): Boolean;
external 'ISArcExInit@files:FMXInno.dll stdcall delayload';
function ISArcExInitEx(WinHandle: Longint; TimeFormat: Integer; Callback: TCallbackEx): Boolean;
external 'ISArcExInitEx@files:FMXInno.dll stdcall delayload';
function ISArcExAddDisks(Inputfile, Password, OutputPath: Widestring): Boolean;
external 'ISArcExAddDisks@files:FMXInno.dll stdcall delayload';
function ISArcExExtract(DiskNumber: Integer; CfgFile, WorkPath: Widestring): Boolean;
external 'ISArcExExtract@files:FMXInno.dll stdcall delayload';
procedure ISArcExCallbackInterval(MSec: Cardinal);
external 'ISArcExCallbackInterval@files:FMXInno.dll stdcall delayload';
function ISArcExGetCallbackInterval: Cardinal;
external 'ISArcExGetCallbackInterval@files:FMXInno.dll stdcall delayload';
procedure ISArcExReduceCalcAccuracy(Factor: Byte); // Factor: 1-5
external 'ISArcExReduceCalcAccuracy@files:FMXInno.dll stdcall delayload';
function SuspendProc: Boolean;
external 'SuspendProc@files:FMXInno.dll stdcall delayload';
function ResumeProc: Boolean;
external 'ResumeProc@files:FMXInno.dll stdcall delayload';
procedure ISArcExStop;
external 'ISArcExStop@files:FMXInno.dll stdcall delayload';
procedure ISArcExCleanUp;
external 'ISArcExCleanUp@files:FMXInno.dll stdcall delayload';
function ChangeLanguage(Language: Widestring): boolean;
external 'ChangeLanguage@files:FMXInno.dll stdcall delayload';
function Exec2(filename, Param: WideString; Show: Boolean): Boolean;
external 'Exec2@files:FMXInno.dll stdcall delayload';
Masquerade
06-10-2023, 01:46
And am I alright, with this code, to just drag and drop the FMX files into the project? I haven't upgraded the DLL in while.
Masquerade
06-10-2023, 02:37
I'm getting so far, but I think I've hit a roadblock. When compiling, the following line of code hits an error with invalid number of parameters. I have determined this to be "PreviousFileCount: Integer;" but please may somebody explain what this means? I will try to fix that.
VerifyHashesFromFile(ExpandConstant('{app}\_Verify \kaos.blake3'), ExpandConstant('{app}\_Verify'), 11, False, @VerifyHashMultiCallback);
function VerifyHashesFromFile(ChecksumFile, BasePath: WideString; HashAlgo, PreviousFileCount: Integer; LogFile: Boolean; Callback: TMultiHashCallback): Integer;
There is also an error compiling the function
MinimizeWindowCustomAnimated(FMXForm.HandleHWND, 50, 50, 40, 15);
As the new function only takes 2 parameters.
hitman797
06-10-2023, 03:41
I'm getting so far, but I think I've hit a roadblock. When compiling, the following line of code hits an error with invalid number of parameters. I have determined this to be "PreviousFileCount: Integer;" but please may somebody explain what this means? I will try to fix that.
VerifyHashesFromFile(ExpandConstant('{app}\_Verify \kaos.blake3'), ExpandConstant('{app}\_Verify'), 11, False, @VerifyHashMultiCallback);
function VerifyHashesFromFile(ChecksumFile, BasePath: WideString; HashAlgo, PreviousFileCount: Integer; LogFile: Boolean; Callback: TMultiHashCallback): Integer;
VerifyHashesFromFile(ExpandConstant('{app}\_Verify \kaos.blake3'), ExpandConstant('{app}\_Verify'), 11, 0,False, @VerifyHashMultiCallback);
function VerifyHashesFromFile(ChecksumFile, BasePath: WideString; HashAlgo, PreviousFileCount: Integer; LogFile: Boolean; Callback: TMultiHashCallback): Integer;
There is also an error compiling the function
MinimizeWindowCustomAnimated(FMXForm.HandleHWND, 50, 50, 40, 15);
As the new function only takes 2 parameters.
type
TMinimizeAnimPos = (mapTop, mapBottom, mapLeft, mapRight);
function MinimizeWindowCustomAnimated(MinimizeAnimPos: TMinimizeAnimPos): Boolean;
external 'MinimizeWindowCustomAnimated@files:FMXInno.dll stdcall delayload';
procedure pMinimizeWindow(const WinHandle: Cardinal);
external 'pMinimizeWindow@files:FMXInno.dll stdcall delayload';
MinimizeWindowCustomAnimated(mapTop);
MinimizeWindow(WizardForm.Handle);
I'm getting so far, but I think I've hit a roadblock. When compiling, the following line of code hits an error with invalid number of parameters. I have determined this to be "PreviousFileCount: Integer;" but please may somebody explain what this means? I will try to fix that.
VerifyHashesFromFile(ExpandConstant('{app}\_Verify \kaos.blake3'), ExpandConstant('{app}\_Verify'), 11, False, @VerifyHashMultiCallback);
function VerifyHashesFromFile(ChecksumFile, BasePath: WideString; HashAlgo, PreviousFileCount: Integer; LogFile: Boolean; Callback: TMultiHashCallback): Integer;
There is also an error compiling the function
MinimizeWindowCustomAnimated(FMXForm.HandleHWND, 50, 50, 40, 15);
As the new function only takes 2 parameters.
PreviousFileCount is the initial value that must be added to the count of items displayed in calback if you call the function more than once.
Using this parameter, the total number of files will be displayed correctly when entering the value from the previous call.
VerifyHashesFromFile(ExpandConstant('{app}\_Verify \kaos.blake3'), ExpandConstant('{app}\_Verify'), 11, 0, False, @VerifyHashMultiCallback);
Masquerade
06-10-2023, 06:37
Sorry to keep asking, but now I've got a Type Mismatch for the following lines:
<button>.OnMouseDown(@CommonButtonDown);
<button>.OnMouseUp(@CommonButtonUp);
It seems that OnMouseDown/OnMouseUp are both TMouseEventF whereas CommonButtonDown/Up is a procedure. Is this the cause of the error?
Apologies for asking so much! :o
hitman797
06-10-2023, 07:06
Sorry to keep asking, but now I've got a Type Mismatch for the following lines:
<button>.OnMouseDown(@CommonButtonDown);
<button>.OnMouseUp(@CommonButtonUp);
It seems that OnMouseDown/OnMouseUp are both TMouseEventF whereas CommonButtonDown/Up is a procedure. Is this the cause of the error?
Apologies for asking so much! :o
copy the procedure.
procedure OnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
//
end;
procedure OnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
//
end;
TMouseEventF = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
TMouseMoveEventF = procedure(Sender: TObject; Shift: TShiftState; X, Y: Single);
TKeyEventF = procedure(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
hitman797
06-10-2023, 07:22
hi, @BLACKFIRE69 can you add this class to the FMXInno.
this class is VCL component in unite VCL.FileCtrl.
I use unite FMX.Platform.Win to Handle the VCL component in FMX Form.
I made example in delphi.
THANK YOU.
Win 3.1:
hDrive: TDriveComboBox;
hFilter: TFilterComboBox;
hDirectory: TDirectoryListBox;
hFileList: TFileListBox;
ListBox:
procedure ListBoxItemClick(const Sender: TCustomListBox;
const Item: TListBoxItem);
begin
end;
Label:
GetText
BLACKFIRE69
06-10-2023, 15:16
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 (https://youtu.be/wfEkofCBw8g?si=z2XOU44eZxUNKb1Q)
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. :o
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.
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;
{ 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.
{ 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);
.
hitman797
07-10-2023, 03:05
System.SysUtils and System.IOUtils Unite:
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;
hitman797
07-10-2023, 05:52
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;
BLACKFIRE69
07-10-2023, 08:29
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?
https://i.ibb.co/GtSV1rL/01.png
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. :o
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.
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;
{ 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.
{ 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);
.
hitman797
08-10-2023, 01:03
I don't quite understand what the timer is for? :rolleyes:
A timer is set to update the listbox when we change the path in the label.
BLACKFIRE69
08-10-2023, 12:45
FMXInno - Updates
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:
{ 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 }
{ 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 }
{ 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 }
.
hitman797
08-10-2023, 14:07
FMXInno - Updates
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.
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.
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:
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:
procedure ListBoxItemClick(const Sender: TCustomListBox;
const Item: TListBoxItem);
Label:
function GetText: WideString;
BLACKFIRE69
08-10-2023, 16:47
but we need to add this function:
System.IOUtils:
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:
procedure ListBoxItemClick(const Sender: TCustomListBox;
const Item: TListBoxItem);
Label:
function GetText: WideString;
i think you may not have noticed that FMXInno has already included these things.
function TDirectory.GetFiles(const Path: string): TStringDynArray;
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;
function TDirectory.GetDirectories(const Path: string): TStringDynArray;
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;
function TDirectory.GetLogicalDrives: TStringDynArray;
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;
ListBox:
procedure ListBoxItemClick(const Sender: TCustomListBox;
const Item: TListBoxItem);
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);
Tihiy_Don
08-10-2023, 22:21
Update first post please. I also ask you to mark the version that indicates this update.
hitman797
09-10-2023, 11:45
FLabel:
function GetText: WideString; don't work.
FTimer:
function GetObject: LongInt;
FFloatAnimation:
function GetObject: LongInt;
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;
BLACKFIRE69
09-10-2023, 21:52
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. ;)
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...
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;
BLACKFIRE69
09-10-2023, 23:46
FMXInno Updates - [2023-Oct-10]
Changes:
* If someone experiences flickering when switching between dark mode and light mode,
it has now been fixed.
* Added some missing properties.
* Made some improvements.
The first post has been updated.
.
Thanks for the hotfix. It seems that everything you need is working properly.
HI, Is it inno script project or compiler?
this will be a scenario for Inno Setup
I tried to make it once when the sample was just made, but I couldn't. Even now, if I want to make it, I won't succeed. If possible, please complete it and share the code so that I can increase my ability to make this type of script.
Thankful
hitman797
13-10-2023, 09:41
I tried to make it once when the sample was just made, but I couldn't. Even now, if I want to make it, I won't succeed. If possible, please complete it and share the code so that I can increase my ability to make this type of script.
Thankful
BLACKFIRE69, made this script possible by adding many of the components to this library.
and audiofeel, created this scenario using this library.
So, thanks to them
Jahan1373
13-10-2023, 23:05
Hello, thank you for the initiative of this beautiful script and your round-the-clock effort, you can only make it so that you have more than one icon on the desktop, thank you very much.
hitman797
14-10-2023, 08:28
Razor12911, He's going to kill me after this for stealing his work.
Jahan1373
14-10-2023, 08:33
https://www.mediafire.com/file/2cddc74br8x6ca0/metro+0+vs+corpack.rar/file
Hello, I visited the site about the installation of the metro for almost a year, but it was not as good as this one, but it has problems and it is still not complete. I hope that this movie will solve some problems.
hitman797
14-10-2023, 09:20
https://www.mediafire.com/file/2cddc74br8x6ca0/metro+0+vs+corpack.rar/file
Hello, I visited the site about the installation of the metro for almost a year, but it was not as good as this one, but it has problems and it is still not complete. I hope that this movie will solve some problems.
...get the number of Files in the Recycle Bin and their total size?
type
PSHQueryRBInfo = ^TSHQueryRBInfo;
TSHQueryRBInfo = packed record
cbSize: DWORD;
// Size of the structure, in bytes.
// This member must be filled in prior to calling the function.
i64Size: Int64;
// Total size of all the objects in the specified Recycle Bin, in bytes.
i64NumItems: Int64;
// Total number of items in the specified Recycle Bin.
end;
const
shell32 = 'shell32.dll';
function SHQueryRecycleBin(szRootPath: PChar; SHQueryRBInfo: PSHQueryRBInfo): HResult;
stdcall; external shell32 Name 'SHQueryRecycleBinA';
function GetDllVersion(FileName: string): Integer;
var
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
FI: PVSFixedFileInfo;
VerSize: DWORD;
begin
Result := 0;
InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
if InfoSize <> 0 then
begin
GetMem(VerBuf, InfoSize);
try
if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
Result := FI.dwFileVersionMS;
finally
FreeMem(VerBuf);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DllVersion: integer;
SHQueryRBInfo: TSHQueryRBInfo;
r: HResult;
begin
DllVersion := GetDllVersion(PChar(shell32));
if DllVersion >= $00040048 then
begin
FillChar(SHQueryRBInfo, SizeOf(TSHQueryRBInfo), #0);
SHQueryRBInfo.cbSize := SizeOf(TSHQueryRBInfo);
R := SHQueryRecycleBin(nil, @SHQueryRBInfo);
if r = s_OK then
begin
label1.Caption := Format('Size:%d Items:%d',
[SHQueryRBInfo.i64Size, SHQueryRBInfo.i64NumItems]);
end
else
label1.Caption := Format('Err:%x', [r]);
end;
end;
{
The SHQueryRecycleBin API used in this method is
only available on systems with the latest shell32.dll installed with IE4 /
Active Desktop.
}
To be honest, if I were Blackfire69, I'd tell us to go to hell. I do not know why, but he helps us and you all. And listen... let's all thank him for spending his time with us. Keep it if you can figure it out. I lost interest in him, all hope for Hitman797. And maybe Blackfire69 will hold it.
I warn you right away that he is not ready :o
Everything was pulled out by the hitman797 user with the help of dumps, etc. I immediately warn him that he is not ready, there is no animation of the transition from the waiting page and the directory selection page is not ready.
It completely repeats the original up to the X - Y coordinates
by the way, Razor12911 is a very kind person and has not once communicated with me and with many NPAs in this forum thread. I think he will come to a meeting in and reveal the raw materials of the project in Delphi
P.S a month ago I thought that my country had been minted now I think that everyone has been minted
I must say that you are absolutely right
No matter how much we thank all three of them, it is still not enough for their efforts
Thank you for sharing this script, I am trying to rewrite this script myself so that I can reach a level like I was able to do in React JS.
Jahan1373
15-10-2023, 21:53
Hello, audiofeel you have worked hard, I hope you will complete this project, the important thing is you and those who accept you, please don't be offended by what others say and finish the work, hoping for bright days for you and all the friends of the site.
BLACKFIRE69
16-10-2023, 06:53
...get the number of Files in the Recycle Bin and their total size?
@hitman797,
ok, i'll add a new function to retrieve RecycleBin info in a future 'FMXInno' update.
currently, there are no new features or bug fixes to push an update.
so, feel free to use your own library until the next update, especially if you need it right now.
Delphi DLL:
library AMyDll;
{$R *.res}
const
C_M_BYTES = 1024 * 1024;
type
DWORDLONG = UInt64;
DWORD = FixedUInt;
LPCWSTR = PWideChar;
LPSHQUERYRBINFO = ^SHQUERYRBINFO;
SHQUERYRBINFO = packed record
cbSize : DWORD; // Size of struct SHQUERYRBINFO.
i64Size : DWORDLONG; // Files size in Bytes.
i64NumItems : DWORDLONG; // Files Count.
end;
function SHQueryRecycleBinW(pszRootPath: LPCWSTR; pSHQueryRBInfo: LPSHQUERYRBINFO): HResult; stdcall;
external 'shell32.dll' name 'SHQueryRecycleBinW';
function AGetRecycleBinInfo(ARootPath: WideString; var TotalSizeMB: extended;
var FileCount: Integer): Boolean; stdcall;
var
RBInfo: SHQUERYRBINFO; // Structure to store RecycleBin info
RBRoot: LPCWSTR; // Root path for the RecycleBin query
begin
try
// RBRoot <> nil --> Retrieve RecycleBin info from ARootPath.
// RBRoot = nil --> Retrieve RecycleBin info from All Drives.
if Length(ARootPath) = 0 then RBRoot := nil else RBRoot := LPCWSTR(ARootPath);
RBInfo.cbSize := SizeOf(RBInfo); // Set the size of the structure
if SHQueryRecycleBinW(RBRoot, @RBInfo) = S_OK then
begin
TotalSizeMB := RBInfo.i64Size / C_M_BYTES;
FileCount := RBInfo.i64NumItems;
Result := True;
end else
Result := False;
except
Result := False;
end;
end;
exports
AGetRecycleBinInfo;
begin
end.
InnoSetup:
function AGetRecycleBinInfo(ARootPath: WideString; var TotalSizeMB: Extended; var FileCount: Integer): Boolean;
external 'AGetRecycleBinInfo@files:AMyDll.dll stdcall';
procedure TestBtnClick(Sender: TObject);
var
TotalSizeMB: Extended;
FileCount: Integer;
begin
if AGetRecycleBinInfo('', TotalSizeMB, FileCount) then
begin
Memo.Lines.Add(format('RecycleBin Files Size: < %0.2n GB >', [TotalSizeMB / 1024]));
Memo.Lines.Add(format('RecycleBin Files Count: < %d >', [FileCount]));
end else
Memo.Lines.Add('AGetRecycleBinInfo Error!')
end;
.
hitman797
16-10-2023, 07:14
ok, i'll add a new function to retrieve RecycleBin info in a future 'FMXInno' update.
currently, there are no new features or bug fixes to push an update.
so, feel free to use your own library until the next update, especially if you need it right now.
.
Great work, thanks for the library.
I will use this library until the update is released to FMXInno. :rolleyes:
Tihiy_Don
16-10-2023, 22:32
@hitman797,
ok, i'll add a new function to retrieve RecycleBin info in a future 'FMXInno' update.
currently, there are no new features or bug fixes to push an update.
so, feel free to use your own library until the next update, especially if you need it right now.
I have been using your library for a long time in my distributions, as well as repacks from FMXTeam.
P.S. I'm still waiting for the implementation of creating a form with a background in the form of a video.
hitman797
19-10-2023, 08:27
Radiant Shapes:
RadiantShapes.exe (https://www.mediafire.com/file/2f1grv1hx02w66w/RadiantShapes.exe/file)
BLACKFIRE69
20-10-2023, 05:20
CorePack Installer: Simple - [Demo]
.
Behnam2018
20-10-2023, 20:25
Hello, thanks, but the shortcut does not work on the desktop
hitman797
20-10-2023, 22:19
Hello, thanks, but the shortcut does not work on the desktop
Edit the Setup.ini
[Execs]
; AppExe<1>=Tile Caption|Exec Directory|Exec File|Shortcut Name/Action Name|IconFilename|IconIndex
; ex:
; AppExe1=Red Dead Redemption 2||Launcher.exe|Red Dead Redemption 2 v1.0.1436|{app}\Launcher.exe|0
AppExe1=Red Dead Redemption 2||Launcher.exe|Red Dead Redemption 2 v1.0.1436|{app}\RDR2_icon.ico|0
BLACKFIRE69
14-11-2023, 05:04
FMXInno Updates - [2023-Nov-13]
* Added new functions:
-- function wGetRecycleBinInfo(ARootPath: WideString; var TotalSizeMB: Extended; var FileCount: Integer): Boolean;
-- function wCopyToClipboard(const AStr: WideString): Boolean;
-- function wPasteFromClipboard: WideString;
* Updated FForm class.
* Updated FluentApi (Internal + External).
-- Make sure to update your current scripts as follows:
function EnableFluent(const WinHandle: HWND; DarkTheme, NoBorders, NoTitleBar: Boolean; Opacity: Single; BrightnessPct: Byte): Integer;
external 'EnableFluent@{tmp}\FluentApi.dll stdcall uninstallonly delayload';
to
function EnableFluent(const WinHandle: HWND; DarkTheme, NoBorders, NoTitleBar: Boolean; Opacity: Single; BrightnessPct: Byte): Integer;
external 'faC1222296@{tmp}\FluentApi.dll stdcall uninstallonly delayload';
* Updated ISArcEx (Internal + External).
-- Added a new method:
> ISArcExIsSuspended.
-- The following methods have been renamed and updated:
> Suspend/Resume Proc, ChangeLanguage.
* Updated Botva2-like classes:
-- FPictureButton2, FPictureVisiblePart, FPictureProgressBar, and FPictureTrackBar.
* Some improvements and bug fixes.
* Compiled in RadStudio 12 Athens.
-- Embarcadero claims that the performance has been improved for FMX.
-- FMXInno already comes with built-in support for SKIA, but since RadStudio 12
and onward, Delphi has native support for SKIA.
If you need me to update SKIA in FMXInno, I'll do that on request.
Note: This update doesn't use the RadStudio 12 native SKIA (v6.0.0); instead,
this update uses the previous version (v5.0.0).
The first post has been updated.
Thanks for the hotfix. It seems that everything you need is working properly.
Hi dear friend
The installation path selection section in windows 10 pro new Updates. it has a problem and does not work
I tried to change the codes but it doesn't work
Masquerade
14-11-2023, 10:44
@BLACKFIRE69
I'd like to continue my discussion from Krinkels.org about my font issue, I downloaded and ran your test project and the font does display correctly but the setup will not close - it just hangs once close button is pressed.
Is it possible that there's a bug in my Windows?
the "overview" (Обзор) button
thanks for answer but it's was about metro0 script that you posted
BLACKFIRE69
14-11-2023, 21:15
@BLACKFIRE69
I'd like to continue my discussion from Krinkels.org about my font issue, I downloaded and ran your test project and the font does display correctly but the setup will not close - it just hangs once close button is pressed.
Is it possible that there's a bug in my Windows?
@Masquerade, can you tell me which of the following tests works for you?
.
BLACKFIRE69
14-11-2023, 22:53
Hello, thanks, but the shortcut does not work on the desktop
everything is working fine.
.
BLACKFIRE69
14-11-2023, 23:11
thanks for answer but it's was about metro0 script that you posted
@ADMIRAL,
after making a few changes to the code, you can make it work. however, if i'm correct, there're some aspects in the script that need further implementation. it would be better to ask the authors to complete the script. ;)
Edit1:
* Replace the current 'ListBoxOnChange' code with this.
procedure ListBoxOnChange(Sender: TObject);
var
ADir: String;
begin
if (FMXListBox[2].GetItemIndex > -1) then
begin
ADir := FMXEdit[1].GetText;
StringChange(ADir, ExtractFileDrive(ADir), FMXListBox[2].GetItemText(FMXListBox[2].GetItemIndex));
FMXLabel[197].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
FMXEdit[1].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
WizardForm.DirEdit.Text:= ADir;
FMXDiskUsage.SetDir(WizardForm.DirEdit.Text);
FMXLabel[82].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1));
FMXLabel[85].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1) + ' is available from the selected drive');
FMXArc[5].Angle(FMXDiskUsage.FreeSpace, FMXDiskUsage.TotalSpace);
end;
end;
procedure ListBx3OnChange(Sender: TObject);
var
ADir: WideString;
begin
if FMXListBox[3].GetItemIndex > -1 then
begin
ADir:= ExtractFileDrive(FMXEdit[1].GetText) + '\' + AddBackslash(FMXListBox[3].GetItemText(FMXListBox[3].GetItemIndex)) + '{#MyAppName}';
FMXLabel[197].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
FMXEdit[1].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
WizardForm.DirEdit.Text:= ADir;
FMXDiskUsage.SetDir(WizardForm.DirEdit.Text);
FMXLabel[82].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1));
FMXLabel[85].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1) + ' is available from the selected drive');
FMXArc[5].Angle(FMXDiskUsage.FreeSpace, FMXDiskUsage.TotalSpace);
end;
end;
Edit2:
* Comment out the following line in the code.
//FMXEdit[1].OnChange(@ListBoxOnChange);
Edit3:
* Replace the ListBoxOnChange event with ListBx3OnChange for the FMXListBox[3].
FMXListBox[3].OnChange(@ListBx3OnChange);
.
Masquerade
15-11-2023, 00:45
@Masquerade, can you tell me which of the following tests works for you?
.
Test 1: Font works, hangs on closing
Test 1A: Font works, hangs on closing
Test 2: Font works, window closes but hangs in taskbar.
Test 2A: Font works, window closes but hangs in taskbar.
BLACKFIRE69
15-11-2023, 01:29
Test 1: Font works, hangs on closing
Test 1A: Font works, hangs on closing
Test 2: Font works, window closes but hangs in taskbar.
Test 2A: Font works, window closes but hangs in taskbar.
ok mate. maybe try it on a different PC. here, everything works fine, even on virtual machines. also, try disabling the antivirus.
@ADMIRAL,
after making a few changes to the code, you can make it work. however, if i'm correct, there're some aspects in the script that need further implementation. it would be better to ask the authors to complete the script. ;)
Edit1:
* Replace the current 'ListBoxOnChange' code with this.
procedure ListBoxOnChange(Sender: TObject);
var
ADir: String;
begin
if (FMXListBox[2].GetItemIndex > -1) then
begin
ADir := FMXEdit[1].GetText;
StringChange(ADir, ExtractFileDrive(ADir), FMXListBox[2].GetItemText(FMXListBox[2].GetItemIndex));
FMXLabel[197].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
FMXEdit[1].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
WizardForm.DirEdit.Text:= ADir;
FMXDiskUsage.SetDir(WizardForm.DirEdit.Text);
FMXLabel[82].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1));
FMXLabel[85].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1) + ' is available from the selected drive');
FMXArc[5].Angle(FMXDiskUsage.FreeSpace, FMXDiskUsage.TotalSpace);
end;
end;
procedure ListBx3OnChange(Sender: TObject);
var
ADir: WideString;
begin
if FMXListBox[3].GetItemIndex > -1 then
begin
ADir:= ExtractFileDrive(FMXEdit[1].GetText) + '\' + AddBackslash(FMXListBox[3].GetItemText(FMXListBox[3].GetItemIndex)) + '{#MyAppName}';
FMXLabel[197].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
FMXEdit[1].Text(MinimizePathName(ADir, WizardForm.DirEdit.Font, WizardForm.DirEdit.Width));
WizardForm.DirEdit.Text:= ADir;
FMXDiskUsage.SetDir(WizardForm.DirEdit.Text);
FMXLabel[82].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1));
FMXLabel[85].Text(MbOrTb(FMXDiskUsage.FreeSpace, 1) + ' is available from the selected drive');
FMXArc[5].Angle(FMXDiskUsage.FreeSpace, FMXDiskUsage.TotalSpace);
end;
end;
Edit2:
* Comment out the following line in the code.
//FMXEdit[1].OnChange(@ListBoxOnChange);
Edit3:
* Replace the ListBoxOnChange event with ListBx3OnChange for the FMXListBox[3].
FMXListBox[3].OnChange(@ListBx3OnChange);
.
Thank you for your quick reply, but even with the edit's codes, I am still facing the same problem. Are there any problems for you with these codes in the script?
This part of the code was implemented by @Hitman797. I think that sometimes he will have a free hour and he will fix everything thanks to your edits in the code.:)
==Here is the latest "clean version" for the changes==
In the first test, my partitions and folders were not displayed at all, and by adding codes, I only encountered errors.
This part of the code was implemented by @Hitman797. I think that sometimes he will have a free hour and he will fix everything thanks to your edits in the code.:)
==Here is the latest "clean version" for the changes==
Again, I tried to change the redirection section similar to the photo by simulating the codes, but again it was useless because the coding method is different in both.
Masquerade
15-11-2023, 12:18
Weird... I installed the font to my system and now all is fine :confused:
Sorry for the issues! Inno isn't my thing...
@ADMIRAL Test whether your directory selection is working correctly now
:o
thanks to you
Yes, it worked this time
The path selection section works correctly, except that it does not show C drive folders for the first time, but the important thing is that the path can be selected.
and add folder button works too.
can you share the iss file?
Jahan1373
16-11-2023, 08:24
Everything is great and good, only I saw 2 big problems, one of them did not have the date of the watch
2. When I chose the installation location, it wrote the volume on the image, it wrote the same. 2. There were only problems, thanks for your good script
hitman797
16-11-2023, 09:10
Everything is great and good, only I saw 2 big problems, one of them did not have the date of the watch
2. When I chose the installation location, it wrote the volume on the image, it wrote the same. 2. There were only problems, thanks for your good script
wait for @BLACKFIRE69 to update the library to add those things.
and you missing the music button and counter app running.:o
BLACKFIRE69
16-11-2023, 09:56
FMXInno - Nov-16 - Hotfix-01
1. Added wGetRunningAppCount on the request of @hitman797.
2. Added missing properties and fixed bugs reported by @audiofeel and @tihiy_don.
3. Some improvements.
i'll update the first article soon.
.
hitman797
16-11-2023, 10:16
FMXInno - Nov-16 - Hotfix-01
1. Added wGetRunningAppCount on the request of @hitman797.
2. Added missing properties and fixed bugs reported by @audiofeel and @tihiy_don.
3. Some improvements.
i'll update the first article soon.
.
great work, thank you for the update.
if we make GUI to this library that will help the authors to save a lot of time.:rolleyes:
for the lock screen
HeadForm.OnActivate(@OnActivate);
HeadForm.OnDeactivate(@OnDeactivate);
procedure OnActivate(Event: TNotifyEvent);
procedure OnDeactivate(Event: TNotifyEvent);
BLACKFIRE69
16-11-2023, 19:10
for the lock screen
HeadForm.OnActivate(@OnActivate);
HeadForm.OnDeactivate(@OnDeactivate);
my apologies; you've requested this before, and though i had it in mind, it appears i forgot about it. ;)
1. Added OnActivate and OnDeactivate events to lockscreen.
2. Added wGetUserCountryName function.
Tihiy_Don
16-11-2023, 21:36
How can I change the text settings in the descendant components?
https://i.yapx.ru/Ww8FZ.png
Tihiy_Don
16-11-2023, 21:47
That's it, now I've figured it out. It was necessary to specify the necessary component in the first parameter of the procedure :)
Page1CheckboxTree.CheckboxFontSetting(Page1itemDir ectX, 'Segoe UI', VCLFontSizeToFMX(10), {#MainColorFont});
Jahan1373
17-11-2023, 03:15
Hello, the site is having problems recently. Please, if you are destined, click on a Telegram channel to see your latest works with lots of news. Thank you.
Jahan1373
17-11-2023, 03:18
M<TAG1>Matro. تقریبا همه چیز آماده است
setup.exe (https://www.mediafire.com/file/5p81tgk65ksayix/Output.7z/file);)
It's a happy place for you who work hard to keep the old scripts alive. Thank you. Please introduce a Telegram channel if you have one so that we can become members.
@ADMIRAL Test whether your directory selection is working correctly now
:o
Hello audiofeel
As I said before, the test you sent works
Can I have your iss file?
audiofeel
03-12-2023, 00:45
reserved
audiofeel
05-12-2023, 04:42
reserved
audiofeel
05-12-2023, 15:30
reserved
BLACKFIRE69
19-12-2023, 17:06
FMXInno - [2023-Dec-09]
the latest version has been uploaded to the first post. check it out.
Jahan1373
27-12-2023, 00:04
Hello friends, help me
I downloaded a script
The same corepack
Now when I run the project, I can't delete the installation output folder, please help me
In whatever folder I send the output of the project and after opening the project, that folder is no longer deleted. I tested on several other systems with different windows, the problem persists
And the output setup.exe file causes this problem, and the interesting thing is that the above file itself can be deleted, but the other folder cannot be deleted.
Jahan1373
27-12-2023, 00:05
https://www.mediafire.com/file/vh9drdwsch2l31g/bandicam+2023-12-26+10-51-08-271+%282%29.rar/file
Jahan1373
27-12-2023, 00:08
Are you having problems with the output folder not being deleted? Do you have a solution?
Please help me, my friends
I sent a video
BLACKFIRE69
27-12-2023, 02:16
In whatever folder I send the output of the project and after opening the project, that folder is no longer deleted. I tested on several other systems with different windows, the problem persists
And the output setup.exe file causes this problem, and the interesting thing is that the above file itself can be deleted, but the other folder cannot be deleted.
Follow these steps:
1. Rename 'setup.exe' to 'Setup_01.exe'.
-- If you can't rename it, restart your PC and disable antivirus. and try again.
2. Restart the PC.
.
Jahan1373
27-12-2023, 03:53
Follow these steps:
1. Rename 'setup.exe' to 'Setup_01.exe'.
-- If you can't rename it, restart your PC and disable antivirus. and try again.
2. Restart the PC.
.
What is your solution my friend to solve this problem in Windows 10 or 8 or 7?
To solve this problem
Jahan1373
27-12-2023, 03:56
Follow these steps:
1. Rename 'setup.exe' to 'Setup_01.exe'.
-- If you can't rename it, restart your PC and disable antivirus. and try again.
2. Restart the PC.
.
Can I find a way to do this?
Even my Windows drive is working at 100% in task manager
Jahan1373
27-12-2023, 04:10
I did what you said
But in addition, the Windows 10 antivirus didn't change because it was on my brain, I had deleted it on the first day
Jahan1373
27-12-2023, 04:25
I think somewhere in the script is causing the folder to not be deleted
And the problem is related to the following file
setup.exe
If anyone has Windows 10, try even lower versions
I think this problem does not exist in Windows 11
I tested that the problem still exists on lower windows
Jahan1373
27-12-2023, 04:27
If someone solves this problem it would be a great service to everyone and we would appreciate it
Lord.Freddy
27-12-2023, 06:42
If someone solves this problem it would be a great service to everyone and we would appreciate it
Yes I have this problem too, you can easily fix it with this program (https://www.iobit.com/en/iobit-unlocker.php)
BLACKFIRE69
27-12-2023, 07:14
I think somewhere in the script is causing the folder to not be deleted
1. you're not alone; i've encountered the same issue on Windows 10. the issue is linked to the script, not the FMXInno.dll.
2. to resolve this, replace the existing script with the modified one provided below.
3. if your PC hasn't been restarted in a while, restart your PC to clear the previous system cache. once done, test the modified script.
With the original Script:
https://i.ibb.co/g9gj3Fb/Win10.gif
With the modified Script:
https://i.ibb.co/1bHjbMN/Win10-Fixed.gif
.
BLACKFIRE69
27-12-2023, 07:24
1. you're not alone; i've encountered the same issue on Windows 10. the issue is linked to the script, not the FMXInno.dll.
2. to resolve this, replace the existing script with the modified one provided below.
3. if your PC hasn't been restarted in a while, restart your PC to clear the previous system cache. once done, test the modified script.
remember to restart your computer to clear the system cache before using the modified script if you have already faced this problem.
Jahan1373
27-12-2023, 08:59
I also said that the problem is with the script
And thanks to all of you who worked to solve this problem
Jahan1373
27-12-2023, 09:01
Now the cpu problem is solved
and the folder is deleted
Jahan1373
27-12-2023, 09:05
This problem does not show itself in Windows 11
Now this problem is completely solved
Thank you
Jahan1373
27-12-2023, 13:21
This problem does not show itself in Windows 11
Now this problem is completely solved
Thank you
Hello, can you help me a little?
Jahan1373
27-12-2023, 13:22
The finished project has only one small problem
BLACKFIRE69
27-12-2023, 13:27
The finished project has only one small problem
what's the issue?
Jahan1373
27-12-2023, 13:32
On the first page, we have Autoran, we press the upper key, we are working on the project. On the second screen, there are 3 game icons. It is correct when I run the game
The problem is that the background image changes randomly
And the atroan screenshot will be replaced
When I click on all three game icons, the picture changes automatically
The second screen should have a separate photo, not the icon screen photo, and after opening one of the icons, the autoran background photo will be replaced.
And my next problem is in the script pictures folder, I don't know where the picture number 4 is in the script used in the game. I think it is for icons
Jahan1373
27-12-2023, 13:36
I will send a video tomorrow so you can check the problem
BLACKFIRE69
27-12-2023, 14:06
On the first page, we have Autoran, we press the upper key, we are working on the project. On the second screen, there are 3 game icons. It is correct when I run the game
The problem is that the background image changes randomly
And the atroan screenshot will be replaced
When I click on all three game icons, the picture changes automatically
The second screen should have a separate photo, not the icon screen photo, and after opening one of the icons, the autoran background photo will be replaced.
And my next problem is in the script pictures folder, I don't know where the picture number 4 is in the script used in the game. I think it is for icons
Steps:
1. Open the 'Common.iss'.
2. Locate the section named 'procedure AutorunOnTimer(Sender: TObject);'
-- Replace 'Img1.jpg' with 'Img2.jpg' as shown below.
https://i.ibb.co/KshYY7P/1.png
3. Locate the section named 'procedure OnClick(Sender: TObject);'
-- Now replace 'Img2.jpg' with 'Img3.jpg' as shown below.
https://i.ibb.co/qCcSm76/2.png
4. That's it, save the file.
Jahan1373
27-12-2023, 21:17
OK... (changing the picture when starting the game in the autorun).
Fixed.
Now turning the checkbox into a radio button at the beginning of the script (if someone needs more than one language pack in the game).
thank you my friend
Tihiy_Don
27-12-2023, 21:33
Will the ability to customize the trackbar be added: specify the width, length and thickness of the switch, as well as set the color and transparency?
Tihiy_Don
27-12-2023, 22:44
TrackBar - system control. But it can be changed using a style file.
I know, so I wanted to ask if there might be some kind of analogue.
BLACKFIRE69
28-12-2023, 09:27
FTrackBarCustom:
1. FTrackBar - this depends on the Style file, so you need the ability to create or modify a new Style file.
2. FPictureTrackBar - a botva2-like trackbar requires skill in Photoshop.
3. for users like me who aren't design experts, we need an easy but fully customizable trackbar for general use. so, FTrackBarCustom may be suitable for that purpose.
4. i'm quite busy right now, so the given example is a bit ugly (no color matching). i'm sure you can design a better one on your own.
function FCreate(FHandle, FFormHandle: TFmxObject; const FLeft, FTop, FWidth, FHeight, FBtnTop, FBtnWidth, FBtnHeight: Single; IsRoundSlide: Boolean): TFmxObject;
procedure Left(FLeft: Single);
procedure Top(FTop: Single);
procedure Width(FWidth: Single);
procedure Height(FHeight: Single);
procedure Visible(FVisible: Boolean);
procedure Enabled(FEnabled: Boolean);
procedure FillColor(AlColor: Integer);
procedure FillPicture(const Image: WideString; WrapMode: TWrapMode);
procedure FillGradient(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure FillGradientLinearAngle(FAngle: Single);
procedure FillGradientRadialAngle(FAngle: Single);
procedure CusGradientPosition(X1, Y1, X2, Y2: Single);
procedure StrokeColor(AlColor: Integer);
procedure StrokeSetting(FThickness: Single; CapStyle: TStrokeCap; Dash: TStrokeDash; Join: TStrokeJoin);
procedure StrokePicture(const Image: WideString; WrapMode: TWrapMode);
procedure StrokeGradient(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure StrokeGradientLinearAngle(FAngle: Single);
procedure StrokeGradientRadialAngle(FAngle: Single);
procedure FillColorSlide(AlColor: Integer);
procedure FillPictureSlide(const Image: WideString; WrapMode: TWrapMode);
procedure FillGradientSlide(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure FillGradientLinearAngleSlide(FAngle: Single);
procedure FillGradientRadialAngleSlide(FAngle: Single);
procedure CusGradientPositionSlide(X1, Y1, X2, Y2: Single);
procedure StrokeColorSlide(AlColor: Integer);
procedure StrokeSettingSlide(FThickness: Single; CapStyle: TStrokeCap; Dash: TStrokeDash; Join: TStrokeJoin);
procedure StrokePictureSlide(const Image: WideString; WrapMode: TWrapMode);
procedure StrokeGradientSlide(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure StrokeGradientLinearAngleSlide(FAngle: Single);
procedure StrokeGradientRadialAngleSlide(FAngle: Single);
procedure Opacity(FOpacity: Single);
procedure OpacitySlide(FOpacity: Single);
procedure OpacityTotal(FOpacity: Single);
procedure RotationAngleSlide(FRotationAngle: Single);
procedure RotationCenterSlide(X, Y: Single);
procedure CornerStyle(XRadi, YRadi: Single; FCorners: TCorners; CornerType: TCornerType);
procedure Sides(Sides: TSides);
procedure Scale(X, Y: Single);
procedure CornerStyleSlide(XRadi, YRadi: Single; FCorners: TCorners; CornerType: TCornerType);
procedure SidesSlide(Sides: TSides);
procedure ScaleSlide(X, Y: Single);
procedure SetValue(const FValue: Single);
procedure SetMin(const FValue: Single);
procedure SetMax(const FValue: Single);
procedure OnChange(Event: TNotifyEvent);
procedure AddProgress(AlColor: Integer);
procedure AddProgressPicture(const Image: WideString; WrapMode: TWrapMode);
procedure AddProgressGradient(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure ProgressVisible(FVisible: Boolean);
procedure ProgressOpacity(FOpacity: single);
procedure SetTag(Tag: Integer);
procedure BringToFront;
procedure BringToFrontSlide;
procedure SendToBack;
function GetTag: Integer;
function GetValue: Single;
function GetMax: Single;
function GetMin: Single;
function GetLeft: Single;
function GetTop: Single;
function GetWidth: Single;
function GetHeight: Single;
function GetObjectSlide: LongInt;
function GetObjectBkg: LongInt;
function GetObject: LongInt;
function HandleSlide: TFmxObject;
function HandleBkg: TFmxObject;
function Handle: TFmxObject;
Jahan1373
28-12-2023, 09:57
https://www.mediafire.com/file/11r9c83eqlsr7fz/Screenshot+(101).png/file
Jahan1373
28-12-2023, 09:58
Hello friends, does anyone have a solution to extract these types of files in the installation
BLACKFIRE69
28-12-2023, 10:46
Hello friends, does anyone have a solution to extract these types of files in the installation
@Jahan1373,
it would be more suitable to address your questions through private messages or relevant threads. additionally, try to limit multiple messages on a single topic for the benefit of others searching through the content. thank you.
Is there any way to include DSG compatibility in LizzardInstaller?
The changelog states that Cesar includes this module, but I can't find the scripts to use as a base
BLACKFIRE69
28-12-2023, 23:42
https://i.ibb.co/0VMphSX/2.png
FMXInno Final Release: [2023-Dec-29] - Update 02
@everyone who contributed to FMXInno,
As we wrap up the year, and with this being the last update for this year, i want to express my gratitude for your invaluable contributions—bug reports, feature requests, and creative ideas. Your involvement has played a key role in refining FMXInno throughout all the years since the start. Thanks for being part of the FMXInno journey. Wishing you all the best in the coming year!
Cheers!
- BLACKFIRE
New update uploaded to first post, check it out.
What's new:
1. Added:
- function wSystemReboot(EWX_Flags: UINT): Boolean;
- function WinElevenTime(const IsClock24: Boolean): WideString;
- function WinElevenDate: WideString;
- procedure WinElevenChangeTimeAbbrev(const sAM, sPM: WideString);
- procedure WinElevenChangeTimeFormat(const sTimeFormat: WideString);
- procedure WinElevenChangeDayStr(const DayIdx: Integer; DayStr: WideString);
- procedure WinElevenChangeMonthStr(const MonthIdx: Integer; MonthStr: WideString);
- procedure WinElevenChangeDateFormat(const sDateFormat: WideString);
- New FTrackBarCustom class.
2. Updated:
- function wGetShortCut(Key: Word; Shift: TShiftState): TShortCut;
- FCmdOut class.
- FVirtualAction class.
- FInstNewProc class.
- DrawFrame for FForm, FCustomFluentWindow, FFluentDirBrowse and FFluentStartBrowse classes.
3. Fixed:
- function InstallFMXFont(FontFileName: WideString): Boolean;
- function DeleteFMXFont(FontFileName: WideString): Boolean;
- procedure InvalidateFMXFont;
- IsChecked for FToggleCheckBox.
4. FFluentDirBrowse, FFluentStartBrowse are now more customizable.
- Added DisableDefaultAppName.
- Button settings
- and more.
5. Some improvements and minor bug fixes.
Tihiy_Don
29-12-2023, 01:45
FTrackBarCustom:
1. FTrackBar - this depends on the Style file, so you need the ability to create or modify a new Style file.
2. FPictureTrackBar - a botva2-like trackbar requires skill in Photoshop.
3. for users like me who aren't design experts, we need an easy but fully customizable trackbar for general use. so, FTrackBarCustom may be suitable for that purpose.
4. i'm quite busy right now, so the given example is a bit ugly (no color matching). i'm sure you can design a better one on your own.
function FCreate(FHandle, FFormHandle: TFmxObject; const FLeft, FTop, FWidth, FHeight, FBtnTop, FBtnWidth, FBtnHeight: Single; IsRoundSlide: Boolean): TFmxObject;
procedure Left(FLeft: Single);
procedure Top(FTop: Single);
procedure Width(FWidth: Single);
procedure Height(FHeight: Single);
procedure Visible(FVisible: Boolean);
procedure Enabled(FEnabled: Boolean);
procedure FillColor(AlColor: Integer);
procedure FillPicture(const Image: WideString; WrapMode: TWrapMode);
procedure FillGradient(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure FillGradientLinearAngle(FAngle: Single);
procedure FillGradientRadialAngle(FAngle: Single);
procedure CusGradientPosition(X1, Y1, X2, Y2: Single);
procedure StrokeColor(AlColor: Integer);
procedure StrokeSetting(FThickness: Single; CapStyle: TStrokeCap; Dash: TStrokeDash; Join: TStrokeJoin);
procedure StrokePicture(const Image: WideString; WrapMode: TWrapMode);
procedure StrokeGradient(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure StrokeGradientLinearAngle(FAngle: Single);
procedure StrokeGradientRadialAngle(FAngle: Single);
procedure FillColorSlide(AlColor: Integer);
procedure FillPictureSlide(const Image: WideString; WrapMode: TWrapMode);
procedure FillGradientSlide(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure FillGradientLinearAngleSlide(FAngle: Single);
procedure FillGradientRadialAngleSlide(FAngle: Single);
procedure CusGradientPositionSlide(X1, Y1, X2, Y2: Single);
procedure StrokeColorSlide(AlColor: Integer);
procedure StrokeSettingSlide(FThickness: Single; CapStyle: TStrokeCap; Dash: TStrokeDash; Join: TStrokeJoin);
procedure StrokePictureSlide(const Image: WideString; WrapMode: TWrapMode);
procedure StrokeGradientSlide(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure StrokeGradientLinearAngleSlide(FAngle: Single);
procedure StrokeGradientRadialAngleSlide(FAngle: Single);
procedure Opacity(FOpacity: Single);
procedure OpacitySlide(FOpacity: Single);
procedure OpacityTotal(FOpacity: Single);
procedure RotationAngleSlide(FRotationAngle: Single);
procedure RotationCenterSlide(X, Y: Single);
procedure CornerStyle(XRadi, YRadi: Single; FCorners: TCorners; CornerType: TCornerType);
procedure Sides(Sides: TSides);
procedure Scale(X, Y: Single);
procedure CornerStyleSlide(XRadi, YRadi: Single; FCorners: TCorners; CornerType: TCornerType);
procedure SidesSlide(Sides: TSides);
procedure ScaleSlide(X, Y: Single);
procedure SetValue(const FValue: Single);
procedure SetMin(const FValue: Single);
procedure SetMax(const FValue: Single);
procedure OnChange(Event: TNotifyEvent);
procedure AddProgress(AlColor: Integer);
procedure AddProgressPicture(const Image: WideString; WrapMode: TWrapMode);
procedure AddProgressGradient(FColor1, FColor2: Integer; FStyle: TGradientStyle);
procedure ProgressVisible(FVisible: Boolean);
procedure ProgressOpacity(FOpacity: single);
procedure SetTag(Tag: Integer);
procedure BringToFront;
procedure BringToFrontSlide;
procedure SendToBack;
function GetTag: Integer;
function GetValue: Single;
function GetMax: Single;
function GetMin: Single;
function GetLeft: Single;
function GetTop: Single;
function GetWidth: Single;
function GetHeight: Single;
function GetObjectSlide: LongInt;
function GetObjectBkg: LongInt;
function GetObject: LongInt;
function HandleSlide: TFmxObject;
function HandleBkg: TFmxObject;
function Handle: TFmxObject;
Thank you very much! This is what I've been waiting for! I just don't have the skills of a designer in graphic editors!
Tihiy_Don
29-12-2023, 08:38
When changing the visible property of the FTrackBarCustom component to false for the first time, part of the Progress element does not disappear. It disappears when switching again. even if you register these properties together, the problem is similar:
VolTrackbar.Visible(false);
VolTrackbar.ProgressVisible(false);
Example:
https://i122.fastpic.org/big/2023/1229/e7/cf736d934b16648dd324e1e880febee7.gif
Jahan1373
01-01-2024, 11:04
Adaptation - localization of Jiva newstone script (https://fileforums.com/showthread.php?p=489250)
(Translation into Russian. Changing the size of some objects, etc.).
Everything has been transferred to the FMXInno library by Blackfire69 dated November 06, 2023.
Unboxing via IsArcEx by Blackfire69.
All functionality is in place.
Comparison of systems requirements, Site verification. Animation. Gaussian Blur.
About the game page.
Splash screensaver.
Music.
Pause while unpacking
Restarting (itself) the installation after an unsuccessful installation.
Removing the game (if there is a key in the registry) before installation
Requires Inno Setup 5.6.1 and higher.
Thanks to Blackfire69
Please use the English language in the installation, as I do not know Russian
BLACKFIRE69
02-01-2024, 03:06
>>> i've noticed that some of the useful features in the FMXInno developer edition(dev) are missing in the final release. therefore, i plan to include them in future updates.
What's new:
* Added missing FTypedText class.
* Added missing FTypedLine class.
.
Jahan1373
03-01-2024, 12:56
://www.mediafire.com/file/gh4um1dsm92xbeg/Help.zip/file
Hello
Can someone help me, I have a problem with this installation
CPU will be 100% after installation
Second, after the installation is finished, the installation icons are opened, the problem is that they are white on the desktop, the game icon is not visible.
Friends, how to solve this problem?
BLACKFIRE69
05-01-2024, 22:24
://www.mediafire.com/file/gh4um1dsm92xbeg/Help.zip/file
Hello
Can someone help me, I have a problem with this installation
CPU will be 100% after installation
1. the following functions have been updated:
1. DeleteFMXFont.
2. FMXInnoShutDown.
2. the updated version has been tested on both Windows 10 and 11. replace the old files with the attached files below and
3. ensure the following order in your script file:
procedure DeinitializeSetup();
begin
{ Font }
DeleteFMXFont(ExpandConstant('{tmp}\Your_Font_File _Here.ttf'));
{ ISArcEx }
ISArcExCleanUp;
{ FMXInno }
FMXInnoShutDown;
end;
4. if you are unsure how to modify your script, feel free to send it to us.
.
Tihiy_Don
07-01-2024, 00:43
An error started to occur deleting the font after I replaced the library with a new one. Do the others have this problem or am I the only one?
procedure DeinitializeSetup();
begin
DeleteFMXFont(ExpandConstant('{tmp}\segmdl2.ttf')) ;
ISArcExCleanUp;
FMXInnoShutDown;
end;
Moreover, I noticed an interesting feature, if you leave the order that I had earlier, then everything works fine.
ISArcExCleanUp;
DeleteFMXFont(ExpandConstant('{tmp}\segmdl2.ttf')) ;
FMXInnoShutDown;
Tihiy_Don
07-01-2024, 01:43
First we delete the font, and only then we kill the IsArcEx and FMXInnoShutDown.
DeleteFMXFont(ExpandConstant('{tmp}\segmdl2.ttf')) ;
ISArcExCleanUp;
FMXInnoShutDown;
And also, if your repack will not be deployed on Windows 7, then you do not need to install this font (Segoe MDL2 Assets), it is available in both Windows 10 and Windows 11
this is exactly the error that occurs if the font is deleted in the first place. As recommended by the author of the library.
DeleteFMXFont(ExpandConstant('{tmp}\segmdl2.ttf')) ;
ISArcExCleanUp;
FMXInnoShutDown;
https://i122.fastpic.org/big/2024/0107/00/a4d07a1ee0b27c0535fde49efbf98b00.png (https://fastpic.org/view/122/2024/0107/a4d07a1ee0b27c0535fde49efbf98b00.png.html)
Tihiy_Don
07-01-2024, 02:21
To remove a font from the system, how to understand that it is installed?, find it along this path (C:\Users \????\AppData\Local\Microsoft\Windows\Fonts ). Restart the machine, rename the font file and try again.
For now, I want to deal with this problem at the file level in the folder that is being created in the temporary folder. I checked, the file "segmdl2.ttf" is there. I don't quite understand yet, and there should be a Windows font directory here.
Jahan1373
07-01-2024, 04:33
https://www.mediafire.com/file/58adn1ynwvjhimx/Bandicam.rar/file
Hello friends, does anyone know a solution to this problem?
There is a problem with the colors of this installation
More than 20 colors have this problem
The symbols and texts of this installation are not readable
The creator of this script says go learn design
Do you all know how to design on this forum?
The designer of this script does not accept that there is a problem with the installation and says go learn design. I have uploaded the list of problematic colors. Please help to permanently solve this problem so that the colors of this script are correct.
And read the texts of this installation in different colors
Thanks to those who help
BLACKFIRE69
07-01-2024, 04:35
this is exactly the error that occurs if the font is deleted in the first place. As recommended by the author of the library.
https://i122.fastpic.org/big/2024/0107/00/a4d07a1ee0b27c0535fde49efbf98b00.png (https://fastpic.org/view/122/2024/0107/a4d07a1ee0b27c0535fde49efbf98b00.png.html)
well,
* first of all, this isn't an error message; it's a warning message indicating that the font cannot be removed completely but only partially.
* as @audiofeel mentioned, the font (segmdl2.ttf) you're using is a system font that is already installed in the system, hence this warning will be displayed.
to avoid this issue:
1. 'InstallFMXFont' is intended for custom fonts, not system fonts. in a future update, i'll modify the DLL to prevent the installation of system fonts accidentally.
2. For the current situation, what you need to do is install your font file as a copy of the current system file. this simply means renaming your font file (segmdl2.ttf) to something else, such as 'segmdl2_New.ttf' or 'segmdl2_Copy.ttf', or any other name you prefer. this'll prevent the warning message from appearing.
Rename: segmdl2.ttf >>> segmdl2_BF69.ttf
[Files]
...
Source: ".\Files\segmdl2_BF69.ttf"; DestDir: "{tmp}"; Flags: dontcopy;
{Code]
function InitializeSetup(): Boolean;
begin
InstallFMXFont(ExtractAndLoad('segmdl2_BF69.ttf')) ;
FMXInnoInit;
...
end;
procedure DeinitializeSetup();
begin
DeleteFMXFont(ExpandConstant('{tmp}\segmdl2_BF69.t tf'));
ISArcExCleanUp;
FMXInnoShutDown;
end;
* ISArcExCleanUp:
regarding 'ISArcExCleanUp,' when you call the function 'ISArcExCleanUp,' it performs internal memory clean-up for the current process. this may include cleaning up the font memory cache, which could be why the warning message isn't displayed. however, it isn't recommended to call 'ISArcExCleanUp' before 'DeleteFMXFont'.
BLACKFIRE69
07-01-2024, 07:40
https://www.mediafire.com/file/58adn1ynwvjhimx/Bandicam.rar/file
Hello friends, does anyone know a solution to this problem?
There is a problem with the colors of this installation
More than 20 colors have this problem
The symbols and texts of this installation are not readable
The creator of this script says go learn design
Do you all know how to design on this forum?
The designer of this script does not accept that there is a problem with the installation and says go learn design. I have uploaded the list of problematic colors. Please help to permanently solve this problem so that the colors of this script are correct.
And read the texts of this installation in different colors
Thanks to those who help
oh boy, are you serious? sorry to say this but you need to have common sense. yes, indeed, texts with a font color close to white is difficult to see on a white background or vice versa. so what's the magic here? :confused:
Jahan1373
07-01-2024, 08:23
oh boy, are you serious? sorry to say this but you need to have common sense. yes, indeed, texts with a font color close to white is difficult to see on a white background or vice versa. so what's the magic here? :confused:
I mentioned the list of problematic colors, except for white and black, other colors have problems. I tested all the installed colors one by one.
But the manufacturer just says that I have to learn to design. You are a designer
If this problem is not solved, we will all face problems
Why should green have a problem with white, but the manufacturer does not agree
Jahan1373
07-01-2024, 08:33
oh boy, are you serious? sorry to say this but you need to have common sense. yes, indeed, texts with a font color close to white is difficult to see on a white background or vice versa. so what's the magic here? :confused:
Why is yellow a problem?
Why colors with a little white in them are not readable
Why do some greens have problems?
FF AD FF 2F
FF FF FF 00
You are the great designers of the forum
Why is there no such problem in similar facilities?
BLACKFIRE69
07-01-2024, 08:43
I mentioned the list of problematic colors, except for white and black, other colors have problems. I tested all the installed colors one by one.
- i mean colors that are close to the white color, not the exact white. colors like 'Aliceblue', 'AntiqueWhite', 'Azure', etc., that you marked are not very bright colors; they are very close to the white color.
But the manufacturer just says that I have to learn to design. You are a designer
If this problem is not solved, we will all face problems.
- no one will face any issue with colors except you.
Why should green have a problem with white, but the manufacturer does not agree
- green (FF 00 80 00) color is just fine.
BLACKFIRE69
07-01-2024, 08:53
Why is yellow a problem?
Why colors with a little white in them are not readable
Why do some greens have problems?
FF AD FF 2F
FF FF FF 00
You are the great designers of the forum
Why is there no such problem in similar facilities?
i can't believe this. there's no problem with the colors; the only thing is that some colors are hard to see on a white background. Please, grow up. :o
1. FF AD FF 2F
2. FF FF FF 00
.
Jahan1373
07-01-2024, 09:44
i can't believe this. there's no problem with the colors; the only thing is that some colors are hard to see on a white background. Please, grow up. :o
1. FF AD FF 2F
2. FF FF FF 00
.
I'm glad I didn't grow up with a programmer.
That part should always be black to be readable
My problem was mostly only on Autoran's page. Thank you again. Good night my friend
BLACKFIRE69
07-01-2024, 15:00
@BLACKFIRE69.A question about the Google translator. Why does he add extra characters to the translation? and the translation differs from the result of an online translator?
Here is my code.
StatusLB.Text(GoogleTranslate('Welcome to Installation', 'en', 'ru'));
And that's what happens online (not a single mistake in meaning).
Добро пожаловать в установку.
And that's what happens through the function.
Добро пожаловать%20to%20Установка
And another question.... how do I get the language code where the installation is running?
the decoding issue was fixed, but it seems like the translated output is incorrect. this is out of my hands because it's up to Google's APIs. we'll see what we can do about it.
.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.