Page 1 of 1
the scale of x-axis change after increase the size of window
Posted: Sat Apr 27, 2013 2:04 pm
by 16665441
hello
I have two windows, one in each chart window.
The increment of the X axis is 30 seconds.
I want 10 pixels for 30 seconds.
X minimum is 27/04/2013 3:33:00 p.m..
PROCEDURE FORMLOAD ()
CALCULBOTTOMAXIS ()
.....
PROCEDURE OnResize ()
CALCULBOTTOMAXIS ()
....
PROCEDURE CALCULBOTTOMAXIS ()
StartPos is int = TChart1 >> Axis >> Bottom >> IStartPos EndPos is int = TChart1 >> Axis >> Bottom >> IEndPos lr30Sec is a real = TChart1 >> GetDateTimeStep (dtThirtySeconds) pixels is an integer = 10
MaxDateHeure MinDateHeure + = (((EndPos - StartPos) / pixels) * lr30Sec)
TChart1 >> Axis >> Bottom >> Maximum = gfrMaxDateHeure
before increasing the size of the window the two scales are correct
after having increased the size of the window the scales are not identical
do you have a solution to keep 10 pixels for 30 seconds
Re: the scale of x-axis change after increase the size of window
Posted: Mon Apr 29, 2013 10:40 am
by yeray
Bonjour Jean,
If I'm not wrong, you asked how to keep the axes ratio when the window is being resized, and we suggested you to do something like in the following example:
Code: Select all
Dim bMax, lMax As Double
Dim bEnd, lEnd, bSize As Integer
Private Sub Form_Load()
TChart1.Aspect.View3D = False
TChart1.Panel.MarginUnits = muPixels
TChart1.AddSeries scFastLine
TChart1.Series(0).XValues.DateTime = True
TChart1.Series(0).FillSampleValues
TChart1.Tools.Add tcColorband
TChart1.Tools.Items(0).asColorband.Axis = TChart1.Axis.Bottom
TChart1.Tools.Items(0).asColorband.StartValue = 5
TChart1.Tools.Items(0).asColorband.EndValue = 15
TChart1.Environment.InternalRepaint
bMax = TChart1.Axis.Bottom.Maximum
lMax = TChart1.Axis.Left.Maximum
bEnd = TChart1.Axis.Bottom.IEndPos
bSize = bEnd - TChart1.Axis.Bottom.IStartPos
lEnd = TChart1.Axis.Left.IEndPos
End Sub
Private Sub TChart1_OnResize()
Dim ratio, posMax As Double
TChart1.Axis.Bottom.AutomaticMaximum = False
If TChart1.Axis.Bottom.IsDateTime Then
ratio = (TChart1.Axis.Bottom.IEndPos - TChart1.Axis.Bottom.IStartPos) / bSize
posMax = TChart1.Axis.Bottom.CalcXPosValue(bMax) * ratio
TChart1.Axis.Bottom.Maximum = TChart1.Axis.Bottom.CalcPosPoint(posMax)
Else
TChart1.Axis.Bottom.Maximum = TChart1.Axis.Bottom.IEndPos * bMax / bEnd
End If
TChart1.Axis.Left.AutomaticMaximum = False
TChart1.Axis.Left.Maximum = TChart1.Axis.Left.IEndPos * lMax / lEnd
End Sub
The above may not be precise enough. Have you tried to find an alternative calculation for the new axes maximum, still at the OnResize event?
Re: the scale of x-axis change after increase the size of window
Posted: Wed May 01, 2013 9:27 am
by 16665441
Hello
Ok you have answered the previous question: maintain the scale when the window size changes.
But this time it is another question:
When I close my program I record the size and position of the window.
And I return the size and position when I open the program.
In this case the minimum of the X-axis is always the current time, and the maximum is determined by the size of the X-axis
As the increment of the X axis is 30 seconds I set to 10 pixels for 30 seconds. So I can calculate the number of ticks and the maximum of the axis.
lnStartPos is int = TChart1 >> Axis >> Bottom >> IStartPos
lnEndPos is int = TChart1 >> Axis >> Bottom >> IEndPos
lr30Sec is a real = Round (TChart1 >> GetDateTimeStep (dtThirtySeconds), 7)
lnPixel is int = 10
gfrMinDateHeure = pg_DateHeureVersReel (gfdhMinDateHeure)
gfrMaxDateHeure = Round (gfrMinDateHeure + (((lnEndPos - lnStartPos) / lnPixel) * lr30Sec), 7)
NB: I use Windev I've written a function to convert the date windev to TeeChart Date
Here is my question:
I have two windows, one in each window TeeChart.
when I change the window size and TeeChart,
the scales of techart two are not identical.
reminder:
with your answer to my previous question, if I increase the size of the window I do not change but the maximum scale of the X axis changes.
Re: the scale of x-axis change after increase the size of window
Posted: Fri May 03, 2013 12:18 pm
by yeray
Hello,
So, if I understood it correctly, you save&restore the size of the two windows but the axis scale is lost. What I'm not sure to understand is if the scale is lost just after restoring the application or once you resize the window in the restored application.
If the charts have a wrong scales after restoring, what happens if you resize the windows? Do they get correct? This would indicate the calculation is correctly done in the resize event but not in the startup (restore) of the application. Check you are setting the axes scales at the application startup, considering the restored window size.
Also note forcing a chart repaint before getting the axis size may help here. In the example above I had to do it:
Code: Select all
TChart1.Environment.InternalRepaint
If the charts have a wrong scales after restoring, and resizing the windows doesn't help, it revise the calculations and debug the application to see where's exactly the problem. Maybe you'll need to save&restore the axes scales in a similar way as you saved&restored the windows sizes, if possible.
If the charts are correct after restoring, but they get wrong after resizing, I'd revise the calculations and debug the application to see where the error exactly is.
Re: the scale of x-axis change after increase the size of window
Posted: Fri May 03, 2013 3:28 pm
by 16665441
the scale is wrong after restoring then window and after a resize.
take a look on the attachment there is a small difference.
5 PIXELS ENV.
THE SIZE OF X-AXIS IS 625 PIXELS
on load of the window
TChart1>>Environment>>InternalRepaint
TChart1>>axis>>Bottom>>ExactDateTime=Vrai
TChart1>>Axis>>Bottom>>AutomaticMaximum = Faux
TChart1>>Axis>>Bottom>>AutomaticMinimum = Faux
on load of the window and on resize
lnStartPos est un entier = TChart1>>Axis>>Bottom>>IStartPos // BEGIN OF Y-AXIS
lnEndPos est un entier = TChart1>>Axis>>Bottom>>IEndPos // END OF Y-AXIS
lr30Sec est un réel = TChart1>>GetDateTimeStep(dtThirtySeconds) // INCREMENT Y-AXIS
lnPixel est un entier = 10 // I WANT 10 PIXELS FOR INCREMENT OF 30 SECONDS
gfrMaxDateHeure = gfrMinDateHeure + (((lnEndPos - lnStartPos) / lnPixel) * lr30Sec) // DATE MAXIMUM OF Y-AXIS
TChart1>>Axis>>Bottom>>Maximum = gfrMaxDateHeure
Re: the scale of x-axis change after increase the size of window
Posted: Tue May 07, 2013 9:38 am
by yeray
Hi,
jika wrote:the scale is wrong after restoring then window and after a resize.
And only resizing, before restoring anything?
We should find where the calculation is getting wrong. It could be some rounding problem or some mistake in the calculations we are doing.
Re: the scale of x-axis change after increase the size of window
Posted: Tue May 07, 2013 1:46 pm
by 13052810
Don't know if this might help or not, but I have used the component for years with no problems.
ReSize component.
http://www.lyoung.com/
Re: the scale of x-axis change after increase the size of window
Posted: Tue May 07, 2013 4:28 pm
by 16665441
I think I have solved the problem
I use Windev. And I'm writing
lnStartPos is int = TChart1 >> Axis >> Bottom >> IStartPos
lnEndPos is int = TChart1 >> Axis >> Bottom >> IEndPos
lr30sec is a real = GetDateTimeStep (dtThirtySeconds))
gfrMinDateHeure is a real
gfrMinDateHeure gfrMinDateHeure + = ((lnEndPos - lnStartPos) / 10 * lr30sec)
TChart1 >> Axis >> Bottom >> Maximum = gfrMinDateHeure
TChart1 >> Axis >> Bottom >> Minimum = gfrMinDateHeure
TChart1 >> Axis >> Bottom >> Increment = lr30sec
this method is bad because of the declaration of real (double in vb6)
it's better to write in this way
TChart1 >> Axis >> Bottom >> Maximum = Round (gfrMinDateHeure, 7) + (((lnEndPos - lnStartPos) / 10) >> TChart1 GetDateTimeStep (dtThirtySeconds))
TChart1 >> Axis >> Bottom >> Minimum = gfrMinDateHeure
TChart1 >> Axis >> Bottom >> Increment = TChart1 >> GetDateTimeStep (dtThirtySeconds)
thank you for your time to work on the subject
Re: the scale of x-axis change after increase the size of window
Posted: Wed May 08, 2013 8:33 am
by yeray
Hi,
Thanks for sharing the solution. I'm glad to hear you found it!