Jump to content

Carlo Barazzetta

Members
  • Content Count

    31
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Carlo Barazzetta

  1. I have encountered this problem affecting High-DPI support with VCL-Styles Enabled. Scenario: Main monitor: 96 dpi Secondary monitor: 192 dpi Per monitor V2 enabled "Empty" application with main form with: Constraints.MinHeight = 400 Constraints.MinWidth = 300 WindowState = wsMaximized VCLStyle active. 1) Run (the form is full screen on the main monitor) 2) Minimize form. 3) Maximize form: BUG! appears in full screen on the main monitor but with a dpi of 192 !!! 4) Re-Minimize form. 5) Re-Maximize: appears in full screen on the main monitor but with a dpi of 96 (returns to correct scale) The three factors that determine the problem are: 1) presence of MinHeight and MinWidth Constraint 2) active VCL style 3) a secondary monitor with different dpi (on which the application never runs) Tested with D10.4.2 and Win10: anyone can confirm this problem or try it on other versions of windows? Using the AfterMonitorDpiChanged event, on the first call after "maximize" the NewDPI value is 192, on the second call returns to 92. the project: program StyleTest; uses Vcl.Forms, UstyleTest in 'UstyleTest.pas' {Form5}, Vcl.Themes, Vcl.Styles; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; TStyleManager.TrySetStyle('Windows10 SlateGray'); Application.CreateForm(TForm5, Form5); Application.Run; end. the main form dfm: object Form5: TForm5 Left = 0 Top = 0 Caption = 'Form5' ClientHeight = 500 ClientWidth = 500 Color = clBtnFace Constraints.MinHeight = 400 Constraints.MinWidth = 300 DoubleBuffered = True Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False WindowState = wsMaximized OnAfterMonitorDpiChanged = FormAfterMonitorDpiChanged PixelsPerInch = 96 TextHeight = 13 end the main form pas unit UstyleTest; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm5 = class(TForm) procedure FormAfterMonitorDpiChanged(Sender: TObject; OldDPI, NewDPI: Integer); private { Private declarations } public { Public declarations } end; var Form5: TForm5; implementation {$R *.dfm} procedure TForm5.FormAfterMonitorDpiChanged(Sender: TObject; OldDPI, NewDPI: Integer); begin ; end; end.
  2. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    I've created the BUG report: https://quality.embarcadero.com/browse/RSP-33760 Please vote for it. bye Carlo
  3. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    No, I haven't reported the BUG yet, I was hoping to be able to find the problem and also provide a possible solution ...
  4. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    At the moment I've resolved rewriting WMGetMinMaxInfo handler using other variables (MinFormWidth, MinFormHeight, MaxFormWidth, MaxFormHeight: Integer;) into my base form of the application. procedure TBaseForm.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo); var LMinMaxInfo: PMinMaxInfo; begin if not (csReading in ComponentState) then begin LMinMaxInfo := Message.MinMaxInfo; with LMinMaxInfo^ do begin with ptMinTrackSize do begin if MinFormWidth > 0 then X := MinFormWidth; if MinFormHeight > 0 then Y := MinFormHeight; end; with ptMaxTrackSize do begin if MaxFormWidth > 0 then X := MaxFormWidth; if MaxFormHeight > 0 then Y := MaxFormHeight; end; ConstrainedResize(ptMinTrackSize.X, ptMinTrackSize.Y, ptMaxTrackSize.X, ptMaxTrackSize.Y); end; end; inherited; end;
  5. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    But in my configuration the primary monitor is monitor 1 with 96 DPI, the application is on monitor 1 (the primary) and the bug is present also on primary monitor.
  6. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    Zip of Project and video demo. HighDPI_test.mp4 HighDPI-test.7z
  7. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    Thanks for the test, I've changed my secondo monitor to 144dpi but the problem is the same... I've upgraded my Windows10 version to 20H2 build but the problem still persist...
  8. Carlo Barazzetta

    A BIG and very strange BUG with High-DPI, VCL Style and Form Constraints

    It's not a configuration problem because the application starts with correct DPI. At the first Minimize/Maximize receive a wrong DPI (the DPI of the secondary monitor), at the second Minimize/Maximize receive the correct DPI, and so on. But this appens ONLY if I'm using a VCLStyle and I have defined min constraint for the form and the current WindowsState is wsMaximized.
  9. Carlo Barazzetta

    TTreeNode leak when VCL styles are active

    Very strange that the presence of an empty ImageView in the same form affects the memory leak on another component (the TTreeNodes of the TTreeView) after changing styles!
  10. Carlo Barazzetta

    TTreeNode leak when VCL styles are active

    No, I didn't open a bug report because in my case it was just a demo of a component with on-the-fly style modification on the form itself to show how the component reacted with different styles.
  11. Carlo Barazzetta

    TTreeNode leak when VCL styles are active

    Yes, and I haven't found a solution ...
  12. Carlo Barazzetta

    Native Svg parsing and painting in Windows

    I don't understand ... (a fully armed SVG workshop?). If you don't feel the need to be able to see all the icons in a folder at a glance (Thumbnail mode) and be able to focus on one of those and look at the code on the fly (if it's SVG "clean" and "light") and don't try to see if that icon has colors that suit whatever theme the user chooses (dark or light) maybe we don't do the same job. If you prefer to use PowerToys instead of this solution developed in Delphi no one forces you to install it. I thought we were on a Delphi blog not for C# developers 😉
  13. A new version (1.1) of SVGShellExtensions (Open-Source) has been released with a new component (a very useful SVG Text Editor) and a context-menu to export an SVG file to multiple PNG files. The new Setup is always available on the project page: https://github.com/EtheaDev/SVGShellExtensions The preview panel now has a slider to change the "backlight" of the image and more settings (such as text color attributes, theme, use of native Direct2D). The SVG Text Editor is useful for developers who need to change certain aspects of the icons (such as element colors) or try to change the SVG language and see an instant preview of the changes. Any suggestions for improving these components are welcome!
  14. Carlo Barazzetta

    Native Svg parsing and painting in Windows

    I know PowerToys and by browsing the C # sources I wanted to discover which SVG library they used for rendering the images. I thought they used Direct2D like SVGIconImageList does thanks to the implementation of @pyscripter but I notice that they "ask" to Edge Browser to render the SVG image, then they "capture" the result image and pass it to Windows Explorer ... not an elegant way to do this. In fact, the icons are not transparent but have a white background, the preview is quite slow and the preview panel is truly minimalist, it only shows the icon 😉
  15. Carlo Barazzetta

    Native Svg parsing and painting in Windows

    I will investigate...
  16. Carlo Barazzetta

    Native Svg parsing and painting in Windows

    A new brick added to this story: https://github.com/EtheaDev/SVGShellExtensions A short video/demonstration:
  17. I have a question about a problem developing SVGIconImageList components: At design-time, the component editor cannot show the svg icon preview into the OpenDialog when loading files from "Add..." button.Compiling the demo, *and* and activating any VCLStyle, the icon is visibile: Disabling the VCL style, the preview is not visible also at run-time (I'm using Windows in dark mode): Could it be possible to have the same functionality at design time? It is very important to see the preview, during selection of svg files using the editor! Do I need some OpenDialog "hook" to have the preview also in "normal" style? Thansk for any suggestions. Carlo
  18. Carlo Barazzetta

    Help: preview of Svg image in Open-Dialog works only with VCLStyle active.

    Now with SVGShellExtensions (https://github.com/EtheaDev/SVGShellExtensions) the icons are visibile also into Internet Explorer as Thumbnails and Preview 😉
  19. Carlo Barazzetta

    Looking for SVG support in Delphi?

    I've published an article about SVGIconImageList and IconFontsImageList:https://ethea.it/icons_in_delphi/
  20. IconFontsImageList components by @Carlo Barazzetta could be the answer: you can explorer the complete wiki to see how it works. Summary of library: An IconFontsImageCollection component that inherits from Delphi's CustomImageCollection and is compatible with VirtualImageList A IconFontsVirtualImageList, to use with Delphi version older than 10.3 A rendering engine of Icon-fonts using GDI+ (from Delphi XE4) A complete backward compatibility with older Delphi versions (from Delphi 7) A useful Collection and Component editor, with support for Category of Icons A custom CharMap viewer, to easily select icons contained in any Font Support for changing the Color based on the active VCL Style. High performance of drawing engine Support for FMX (also for mobile platforms) It's free and open-source Icons based on Fonts are a good alternative to bitmaps because they need only the Font installed in the system to obtain thousands of images (like the "Material Design Font Desktop.ttf" font: https://github.com/Templarian/MaterialDesign-Font). The icons scales perfectly, so, you don't need to multiple resolutions of your images to match the DPI of the monitors and multiple colors for Theme used. The Collection of Icons can be rendered by a single Font/Color defined at collection level, or by different Fonts/Color defined at Icon level, so you can mix different icons from different Fonts in a single collection. The library is quite stable, but any contribution is welcome!
  21. Carlo Barazzetta

    Looking for Icon Fonts support in Delphi for High-DPI and Themed app?

    I've published an article about SVGIconImageList and IconFontsImageList: https://ethea.it/icons_in_delphi/
  22. Carlo Barazzetta

    Looking for Icon Fonts support in Delphi for High-DPI and Themed app?

    The transition to "Virtual" is now complete (released ver.2.3). Demos for 10.3 and 10.4 now uses native TVirtualImageList + TIconFontsImageCollection, and the TIconFontImage component can also be linked to VirtualImageList and IconFontsVirtualImageList (not only to IconFontsImageList). I'm searching for users and contributors to the project, expecially for older Delphi versions (because the components are compatible from Delphi 7 to current): it's very hard to me to maintain backward compatibility without help. From Delphi XE4 they uses GDI+ to render icons.
  23. Carlo Barazzetta

    Help: preview of Svg image in Open-Dialog works only with VCLStyle active.

    Ok, I've resolved, with this solution: I'm using a new class, implementing Execute without call the "inherited" metod, because the "magic" OpenDialog with the preview is activated by : Template := 'DLGTEMPLATE' but it's used only when TStyleManager.IsCustomStyleActive Using Template 'DLGTEMPLATE' also without CustomStyleActive shows always the dialog with the preview: TOpenPictureDialogSvg = class(TOpenPictureDialog) function TOpenPictureDialogSvg.Execute(ParentWnd: HWND): Boolean; begin Template := 'DLGTEMPLATE'; Result := DoExecute(@GetOpenFileName, ParentWnd); end; Not very elegant, but it works...
  24. Carlo Barazzetta

    Help: preview of Svg image in Open-Dialog works only with VCLStyle active.

    Yes! I've notice now that the two Dialog are quite different... but the call is always the same: OpenDialog.Execute. The TOpenDialog properties: object OpenDialog: TOpenPictureDialog Filter = 'Scalable Vector Graphics (*.svg)|*.svg' Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing] Left = 328 Top = 96 end
×