Page 1 of 1

Problems with ChartTool1GetText

Posted: Tue Mar 26, 2019 5:42 pm
by 16485615
I am having strange problems with "ChartTool1GetText", I need to display a different field value from the selected record, but it does not show.

This works:

Code: Select all

procedure TFForm.ChartTool1GetText(Sender: TMarksTipTool; var Text: string);
begin
  Text := 'Something';
end;
The text "Something" always shows.

But if I try to locate the record in question, nothing is displayed, not even a hard coded text.

Code: Select all

procedure TFForm.ChartTool1GetText(Sender: TMarksTipTool; var Text: string);
begin
  VinnuTafla.Locate('Faersla', Text, []);
  Text := 'Something';
end;
Nothing shows.

What I thought would work was something like this - I have set the Text to get the Record Id, which I have verified that works correctly.

Code: Select all

procedure TFForm.ChartTool1GetText(Sender: TMarksTipTool; var Text: string);
begin
  if VinnuTafla.Locate('Faersla', Text, []) then
  	Text := VinnuTaflaSvaedi.AsString
  else Text := '[not found]';
end;
The record is located correctly, and actually a bonus to see the dataset display follow in a separate panel.

Re: Problems with ChartTool1GetText

Posted: Mon Apr 01, 2019 1:09 pm
by yeray
Hello,

I'd use the index to locate the correct fields. Otherwise, if you have repeated values it will find the first row with tat value, which will be wrong for the other fields in that row.
Ie, this seems to work without problems for me here:

Code: Select all

uses Series, DBTables, DateUtils;

var table1: TTable;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
    datasource1: TDataSource;
begin
  table1:=TTable.Create(nil);
  table1.Active:=False;
  table1.TableName:='Test';
  table1.FieldDefs.Add('Date', ftDateTime);
  table1.FieldDefs.Add('Index', ftSmallint);
  table1.FieldDefs.Add('Value1', ftFloat);
  table1.FieldDefs.Add('Value2', ftFloat);

  table1.CreateTable;
  table1.Open;
  for i:=0 to 9 do
    table1.AppendRecord([Today+i-9, i, round(random*100), round(random*20)]);

  Chart1.View3D:=False;

  table1.First;
  with Chart1.AddSeries(TBarSeries) as TBarSeries do
  begin
    Marks.Hide;
    XValues.DateTime:=True;
  end;

  while not table1.Eof do
  begin
    Chart1[0].AddXY(table1.FieldByName('Date').AsDateTime, table1.FieldByName('Value1').AsFloat);
    table1.Next;
  end;

  with (Chart1.Tools.Add(TMarksTipTool) as TMarksTipTool) do
  begin
    Style:=smsPointIndex;
    OnGetText:=ChartTool1GetText;
  end;

  datasource1:=TDataSource.Create(nil);
  datasource1.DataSet:=table1;
  DBGrid1.DataSource:=datasource1;
end;

procedure TForm1.ChartTool1GetText(Sender: TMarksTipTool; var Text: string);
begin
  if table1.Locate('Index', Text, []) then
     Text := 'Date: ' + table1.FindField('Date').AsString + sLineBreak +
             'Value1: ' + table1.FindField('Value1').AsString + sLineBreak +
             'Value2: ' + table1.FindField('Value2').AsString
  else
     Text := '[not found]';
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  table1.Close;
  table1.DeleteTable;
  table1.Free;
end;

Re: Problems with ChartTool1GetText

Posted: Tue Apr 16, 2019 12:57 pm
by 16485615
Thanks, (sorry for a late reply, but I had to take a break from this project)

But that is what I am doing, at least as far as I can see - my problem is that it does not return anything.

Re: Problems with ChartTool1GetText

Posted: Wed Apr 17, 2019 6:36 am
by yeray
Hello,

There must be some difference somewhere. If you can't find it in your application you may try to extract the minimum parts from it to reproduce it, slowly converting it to the test I posted above. At some point you should be able to notice the difference.

Re: Problems with ChartTool1GetText

Posted: Wed Apr 17, 2019 10:34 am
by 16485615
Thanks again for a quick reply..

I already did and as far as I can tell, whenever I do something with the dataset, it fails.

But this is a huge application, I also have a grid with the data, and as it moves to sync with selected dots, I think we will settle for that.