FileForums

FileForums (https://fileforums.com/index.php)
-   Conversion Tutorials (https://fileforums.com/forumdisplay.php?f=55)
-   -   FMXInno - Windows Fluent Design Installer UI for Inno (https://fileforums.com/showthread.php?t=104852)

hitman797 29-08-2023 03:18

Quote:

Originally Posted by audiofeel (Post 502177)
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

Quote:

Originally Posted by BLACKFIRE69 (Post 502167)
Code:

{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
 
FMXInno - Updates : [2023-August-31]

Code:

* 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.

------------------------------------------------------------------------------------------------------------------------------

Quote:

Originally Posted by Cesar82 (Post 500879)
@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.
Code:

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.

Code:

procedure Shadow(FColor: TAlphaColor; OffsetX, OffsetY: Single);
------------------------------------------------------------------------------------------------------------------------------

Quote:

Originally Posted by audiofeel (Post 502133)
@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.

Code:

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.

Code:

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:
Code:

{ 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;

Code:

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.

------------------------------------------------------------------------------------------------------------------------------

Quote:

Originally Posted by audiofeel (Post 502143)
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

FMXInno - Updates
 
HotFix: 01

- Fixed for Windows 10 Users.

.

Fak Eid 31-08-2023 06:17

1 Attachment(s)
@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

Quote:

Originally Posted by Fak Eid (Post 502218)
5. Is there a way to bring the Video file in the background and display text over it?

use FTabControl
Code:

  // 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

Quote:

Originally Posted by Fak Eid (Post 502218)
Can we make the Directory box editable?

use FFolderTreeView / FStartMenuFolderTreeView

Code:

  // 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

Quote:

Originally Posted by Fak Eid (Post 502218)
@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.

Code:

FMXForm.CanvasQuality(cqHighPerformance);
this also changes the canvas quality of the other forms (Dir/Start/Custom).


Quote:

Originally Posted by Fak Eid (Post 502218)
Can we make the Directory box editable?

done.


Quote:

Originally Posted by Fak Eid (Post 502218)
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.


Quote:

Originally Posted by Fak Eid (Post 502218)
3. There is also one issue with the FToggleCheckbox. IsPressed is not working.

fixed.


Quote:

Originally Posted by Fak Eid (Post 502218)
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.

Code:

new property:
procedure OnChange(Event: TNotifyEvent);


Quote:

Originally Posted by Fak Eid (Post 502218)
5. Is there a way to bring the Video file in the background and display text over it?

there's no way until now.

Fak Eid 31-08-2023 10:15

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?

Code:

DirBrowseDlg.FCreate('Select Install Directory', WizardForm.DirEdit.Text, True, False, 0.35, 0);
DirBrowseDlg.TextFontSettings('Bellefair Regular', VCLFontSizeToFMX2(14), {#Color});

Quote:

Originally Posted by BLACKFIRE69 (Post 502222)
anything can cause this to happen; i don't know exactly what. maybe try changing the canvas quality.

Code:

FMXForm.CanvasQuality(cqHighPerformance);


Fak Eid 31-08-2023 10:33

@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?

Quote:

Originally Posted by BLACKFIRE69 (Post 502222)
Can we make the Directory box editable?
done.


hitman797 01-09-2023 10:36

2 Attachment(s)
Quote:

Originally Posted by audiofeel (Post 502244)
@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?

Code:

  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);


Fak Eid 01-09-2023 14:12

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.

Quote:

Originally Posted by audiofeel (Post 502227)
Code:

DirBrowseDlg.EditFontSettings('Bellefair Regular', VCLFontSizeToFMX2(14), {#Color});
inside FMemo itself, you can only align text to the left or center and right.
Code:

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

FMXInno - Dev
 
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

Quote:

Originally Posted by audiofeel (Post 502263)
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

Quote:

Originally Posted by audiofeel (Post 502316)
@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
Code:

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(itCircular);
  Page3PB.FillGradientAnimColors({#StyleColor}, ALMediumspringgreen, ALMediumspringgreen, {#StyleColor});
  Page3PB.FillGradientAnimEnable(True);




the new update will fix this.


All times are GMT -7. The time now is 14:45.

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