User (Legacy) Posted February 25, 2002 Report Share Posted February 25, 2002 Hi everybody, I'm using VB6 (SP5) with Chart FX 98 Client Server (5.0.4.0). The following VB code produces the chart shown in form1.jpg. Which is almost what I want. How can I also add labels to the X-Axis for 3 (first value), 30 and 300 (last value)? I tried (almost) everything, but I didn't succeed. Any help would be appreciated. Best regards, Arnoud --------------------------------------------------------------- Option Explicit Private Sub Form_Load() Dim x(14) As Double, y(14) As Double Dim xAxis, yAxis As Variant Dim j As Integer x(0) = 0.063 x(1) = 0.09 x(2) = 0.125 x(3) = 0.18 x(4) = 0.25 x(5) = 0.355 x(6) = 0.5 x(7) = 0.71 x(8) = 1# x(9) = 2# x(10) = 2.8 x(11) = 4# x(12) = 6# x(13) = 8# y(0) = 6.91657866948258 y(1) = 11.1404435058078 y(2) = 17.3178458289335 y(3) = 27.9831045406547 y(4) = 40.8130939809926 y(5) = 55.596620908131 y(6) = 69.5881731784583 y(7) = 79.7782470960929 y(8) = 85.6388595564942 y(9) = 93.3474128827878 y(10) = 96.3569165786695 y(11) = 98.3104540654699 y(12) = 100# y(13) = 100# Set xAxis = ChartFX1.Axis(AXIS_X) Set yAxis = ChartFX1.Axis(AXIS_Y) ChartFX1.OpenDataEx COD_VALUES, 1, 14 ChartFX1.OpenDataEx COD_XVALUES, 1, 14 For j = 0 To 13 ChartFX1.ValueEx(0, j) = y(j) ChartFX1.XValueEx(0, j) = x(j) * 100 Next j ChartFX1.CloseData COD_XVALUES ChartFX1.CloseData COD_VALUES xAxis.LogBase = 10 xAxis.Min = 3 xAxis.Max = 300 xAxis.STEP = 1 End Sub Link to comment Share on other sites More sharing options...
Software FX Posted February 25, 2002 Report Share Posted February 25, 2002 I'm afraid that will not be possible using regular X-Axis labels. The STEP is constant along all the axis, what you want is a "variable" step. You can use Annotation objects to add these 2 special labels at the beginning and end of the X axis. -- FP Software FX, Inc. Link to comment Share on other sites More sharing options...
User (Legacy) Posted February 27, 2002 Author Report Share Posted February 27, 2002 Thanks for your help! It took me some time to figure out how it works, but now I think I know. The code below is what I could come up with. But why does the line ".ValueToPixel dblValue, .Adm(CSA_MIN), dx, dy, AXIS_Y" in the "AddChartLabel" procedure return a incorrect "dx" and "dy" every first time I call the procedure? So in this case the "AddChartLabel 3" will place the number at an incorrect spot (see attachement Form1.jpg), while the rest looks fine. It doesn't matter if I first call the "AddChartLabel 30", while the the 30 will be at the place the "3" is in this example. Hopefully you can tell me what I did wrong. Thanks, Arnoud -------------------------------------------------------------------------- Option Explicit Const NOD As Integer = 500 Const NOS As Integer = 4 Private Sub Form_Load() With ChartFX1 .TypeEx = .TypeEx Or CTE_NOTITLESHADOW .Chart3D = False .Gallery = LINES .Axis(AXIS_X).Grid = True .Axis(AXIS_Y).Grid = True ' Allocate memory for chart and clear data .OpenDataEx COD_XVALUES Or COD_REMOVE, NOS + 1, NOD .OpenDataEx COD_VALUES Or COD_REMOVE, NOS + 1, NOD .CloseData COD_VALUES .CloseData COD_XVALUES ' Layout Settings. .ToolBar = False ' UI Settings. .AllowDrag = False .AllowEdit = False .ContextMenus = False .ShowTips = True .AllowResize = False .MarkerShape = MK_NONE .RGB2DBk = &H80000001 .BottomGap = 40 .RightGap = 13 .Border = False ' Title Font Settings. .Axis(AXIS_Y).TitleFont.Size = 10 .Axis(AXIS_Y).TitleFont.Bold = True .Axis(AXIS_X).TitleFont.Size = 10 .Axis(AXIS_X).TitleFont.Bold = True .Fonts(CHART_TOPFT) = CF_BOLD ' Tool Windows Settings. With .SerLegBoxObj .BorderStyle = BBS_LINE .Docked = TGFP_BOTTOM .Font.Bold = True .Moveable = False .Sizeable = BAS_NORESIZE .Visible = True End With ' Configure X-axis of chart. .Axis(AXIS_X).LogBase = 10 .Adm(CSA_XMIN) = 3 .Adm(CSA_XMAX) = 300 .DecimalsNum(CD_XLEG) = 0 ' Configure Y-axis of chart .Axis(AXIS_Y).LogBase = 10 .Adm(CSA_MIN) = 1 .Adm(CSA_MAX) = 250 .DecimalsNum(CD_YLEG) = 0 AddChartLabel 3 AddChartLabel 30 AddChartLabel 300 End With End Sub Private Sub AddChartLabel(ByVal dblValue As Double) Dim AnnotX As Object Dim cfxText As AnnText Dim dx As Long Dim dy As Long With ChartFX1 .ValueToPixel dblValue, .Adm(CSA_MIN), dx, dy, AXIS_Y Set AnnotX = New AnnotationX .AddExtension AnnotX AnnotX.ToolBar = False End With Set cfxText = AnnotX.Add(OBJECT_TYPE_TEXT, 0) With cfxText .Text = dblValue .Align = LA_CENTER Or LA_BOTTOM .AllowModify = False .AllowMove = False .BkColor = CHART_TRANSPARENT .Height = TextHeight(.Text) / Screen.TwipsPerPixelY + 5 .Width = TextWidth(.Text) / Screen.TwipsPerPixelX + 6 .Left = dx - (.Width \ 2) .Top = dy + 4 End With End Sub -------------------------------------------------------------------------- "SoftwareFX Support" <support@softwarefx.com> wrote in message news:LKa7rqgvBHA.2668@webserver1.softwarefx.com... > I'm afraid that will not be possible using regular X-Axis labels. The STEP > is constant along all the axis, what you want is a "variable" step. > > You can use Annotation objects to add these 2 special labels at the > beginning and end of the X axis. > > -- > FP > Software FX, Inc. > > Link to comment Share on other sites More sharing options...
Software FX Posted February 27, 2002 Report Share Posted February 27, 2002 You can not call ValueToPixel until the chart has been drawn or at least its layout is done. If you are calling any function that retrieves scaling information, you must do it after the chart is drawn or call UpdateSizeNow before. The idea here is that the chart delays the RecalcLayout until the chart is drawn to avoid unnecessary overhead. -- FP Software FX, Inc. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.