Page 1 of 1
Font Sizes in Charts
Posted: Thu Aug 24, 2023 10:17 pm
by 16596488
2023.38
I am having a problem with some of my charts and font sizes related to Windows Display Scale options: when I go to 200%, sometimes the fonts appear at about 400%. I assign the font sizes to my charts because I need to manage them for creating reports (when I don't want the fonts to be large). I have a few charts that work fine--but I can't find the difference (and I have had a few other programmers look over my shoulder).
It seems that some of the charts are managing the Windows' scaling for me and other charts are letting me manage it.
Here is what I am seeing when I go from 100% to 200%--the chart font size goes 4x. (And gain, I explicitly set the font size in the chart so that I can get an image from it when I am wanting to print without the larger fonts).
http://www.tbinc.com/misc/ChartFontSize.jpg
How do I get this to work right?
(And I accidently spelt my last name incorrectly when I logged in and it won't let me fix it).
Ed Dressel
Re: Font Sizes in Charts
Posted: Fri Aug 25, 2023 1:24 pm
by yeray
Hello Ed,
Can you please arrange a simple example project we can run as-is to reproduce the problem here?
Thanks in advance.
Ed Dressel wrote: ↑Thu Aug 24, 2023 10:17 pm
(And I accidently spelt my last name incorrectly when I logged in and it won't let me fix it).
I've edited it, but you should be able to modify it
here.
Re: Font Sizes in Charts
Posted: Fri Aug 25, 2023 4:08 pm
by 16596488
(Thanks for fixing my name--I tried several times on the page, but it did not save the changes).
I've attached a demo that reproduces part of what I'm seeing. You have to run this very specifically to see the problem:
Problem #1: Fonts are the wrong size:
1) Start the app on a monitor with normal DPI. The "Chart #1" tab page should be showing.
2) Without changing pages, drag the application to a monitor with 200% DPI.
3) Switch to the "Chart #2" tab page. You should see that the fonts are at 100%, not 200%
4) Drag the app back to the normal font monitor. You should see the fonts on Chart #2 are way too small.
Here are images of what I am seeing that correspond to each step (the image option still not seem to be working):
www.tbinc.com/misc/ChartFontSize2.jpg
Problem #2: Unable to create an image with normal font sizes
I create a copy of the image without scaled fonts for my reports, but it does not always work:
1) Run the app and put it on a monitor with 200% font size. You should see this on the active tab page with large fonts.
2) Click the "Create Image". The code should create an image with unscaled fonts, but the fonts in the BMP are scaled.
Thank you,
Ed Dressel
Re: Font Sizes in Charts
Posted: Fri Aug 25, 2023 5:22 pm
by 16596488
I inadvertently left some CodeSite code in there. It is removed in the updated attachment.
Re: Font Sizes in Charts
Posted: Fri Aug 25, 2023 6:01 pm
by 16596488
I found another problem in the demo that I am seeing in my application:
1) Start the app and put it on a monitor with the display set to 200%.
2) Click on the "create image" button
3) Go back to the tab that the image was created on--the fonts are now 400%, not 200%.
I look forward to your comments. Much appreciated.
Ed Dressel
Re: Font Sizes in Charts
Posted: Thu Aug 31, 2023 8:40 pm
by 16596488
No comment on this? Is there any support here?
Re: Font Sizes in Charts
Posted: Mon Sep 04, 2023 1:44 pm
by yeray
Hello,
Sorry for the delayed reply here.
Ed Dressel wrote: ↑Fri Aug 25, 2023 4:08 pm
Problem #1: Fonts are the wrong size:
1) Start the app on a monitor with normal DPI. The "Chart #1" tab page should be showing.
2) Without changing pages, drag the application to a monitor with 200% DPI.
3) Switch to the "Chart #2" tab page. You should see that the fonts are at 100%, not 200%
4) Drag the app back to the normal font monitor. You should see the fonts on Chart #2 are way too small.
I see removing the
Showing
condition at
TCustomTeePanel.ChangeScale
at {VCLTee.}TeeProcs.pas unit fixes it, but I have to check for any collateral damages:
Code: Select all
procedure TCustomTeePanel.ChangeScale(M, D: Integer{$IFDEF D24}; isDpiChange: Boolean{$ENDIF});
//...
if not (csLoading in ComponentState) and (M <> D) {and Showing <-- remove this} then
SetAutoFontZoom(MulDiv(FView3DOptions.FontZoom, M, D));
end;
Ed Dressel wrote: ↑Fri Aug 25, 2023 4:08 pm
Problem #2: Unable to create an image with normal font sizes
I create a copy of the image without scaled fonts for my reports, but it does not always work:
1) Run the app and put it on a monitor with 200% font size. You should see this on the active tab page with large fonts.
2) Click the "Create Image". The code should create an image with unscaled fonts, but the fonts in the BMP are scaled.
Ed Dressel wrote: ↑Fri Aug 25, 2023 6:01 pm
I found another problem in the demo that I am seeing in my application:
1) Start the app and put it on a monitor with the display set to 200%.
2) Click on the "create image" button
3) Go back to the tab that the image was created on--the fonts are now 400%, not 200%.
I see you are playing with the font sizes at
ConfigChartFontSize
. You should set the
aChart.View3DOptions.FontZoom
property accordingly so the internal drawing can use it.
Code: Select all
class procedure TChartConfig.ConfigChartFontSize(aChart: TChart; aScaleFonts: boolean);
//...
begin
if aScaleFonts then begin
aChart.View3DOptions.FontZoom := aChart.PixelsPerInch * 100 div 96; // <-- add this
lScale := (aChart.PixelsPerInch / 96) / (aChart.View3DOptions.FontZoom * 0.01);
lFont12 := Round(lScale * 12);
lFont10 := Round(lScale * 10);
lFont9 := Round(lScale * 9);
lFont8 := Round(lScale * 8);
end else begin
aChart.View3DOptions.FontZoom := 100; // <-- add this
lFont12 := 12;
lFont10 := 10;
lFont9 := 9;
lFont8 := 8;
end;
//...
This seems to fix both issues for me here.
Re: Font Sizes in Charts
Posted: Wed Sep 13, 2023 10:34 am
by yeray
Yeray wrote: ↑Mon Sep 04, 2023 1:44 pm
I see removing the
Showing
condition at
TCustomTeePanel.ChangeScale
at {VCLTee.}TeeProcs.pas unit fixes it, but I have to check for any collateral damages:
Code: Select all
procedure TCustomTeePanel.ChangeScale(M, D: Integer{$IFDEF D24}; isDpiChange: Boolean{$ENDIF});
//...
if not (csLoading in ComponentState) and (M <> D) {and Showing <-- remove this} then
SetAutoFontZoom(MulDiv(FView3DOptions.FontZoom, M, D));
end;
I've pushed this change to the code base for
#2633.