Teechart. Как удалить текст, добавленный ранее на диаграмме?

#delphi #teechart

#delphi #teechart

Вопрос:

Я добавляю текст на диаграмму, используя этот код:

  with form1.Chart1.Tools.Add(TRectangleTool) as TRectangleTool do
  begin
    Text:='THIS A TEXT';
    Shape.Angle:=0;
    Shape.Transparency:=0;
    Shape.Pen.Hide;
    Shape.AutoSize:=True;
    Shape.Color := Talphacolorrec.null;
    Shape.Font.Name:='Segoe UI';
    Shape.Font.Size := 14;
    Shape.Font.Color := Talphacolorrec.red;
    AllowDrag:=False;
    AllowResize:=False;
    Left:= 4;
    Top:= 0;
   
  end;
  

Код работает нормально. Однако позже мне придется удалить его с диаграммы.

Есть предложения? Заранее спасибо.

Комментарии:

1. Не проверено, но я думаю, вам следует сохранить в переменной формы значение, возвращаемое Add(), а затем использовать его позже, вызывая indexOf(), чтобы получить его индекс, а затем вызвать Delete(), чтобы удалить его. Возможно, также вызвать Free() .

2. Я видел, что функция Delete() ожидает целое число. Итак, ваше решение кажется прекрасным. Однако, понятия не имею, как это реализовать.

3. Какую часть моего объяснения вы не понимаете?

4. мои знания об этих инструментах построения диаграмм основаны только на написанном мной коде. Я безуспешно пытался реализовать то, что вы сказали.

Ответ №1:

Я предлагаю вам попробовать это:

 procedure TForm1.Button1Click(Sender: TObject);
begin
  FRectTool := Chart1.Tools.Add(TRectangleTool) as TRectangleTool;
  with FRectTool do begin
    Text:='THIS A TEXT';
    Shape.Angle:=0;
    Shape.Transparency:=0;
    Shape.Pen.Hide;
    Shape.AutoSize:=True;
    Shape.Color := Talphacolorrec.null;
    Shape.Font.Name:='Segoe UI';
    Shape.Font.Size := 14;
    Shape.Font.Color := Talphacolorrec.red;
    AllowDrag:=False;
    AllowResize:=False;
    Left:= 4;
    Top:= 0;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    Index : Integer;
begin
    Index := Chart1.Tools.IndexOf(FRectTool);
    Chart1.Tools.Delete(Index);
    FreeAndNil(FRectTool);  // Not sure it must be called
end;
  

Вы должны объявить frerecttool в классе form:

   private
    FRectTool: TTeeCustomTool;
  

Кстати: я не могу попробовать это сам, потому что у меня нет TeeChart Pro. Оставьте комментарий, чтобы сообщить, работает это или нет. Если это не работает, пожалуйста, опубликуйте полученные ошибки.

Комментарии:

1. Использование частного frerecttool: TTeeCustomTool; frerecttool не объявлен. Я должен использовать var frerecttool: TTeeCustomTool;

2. Usig Frektool в качестве переменной, первая ошибка в тексте := . Компилятор сообщает: ‘(‘ ожидалось, но ‘:=’ найдено

3. Форма также не распознается

4. @Francisco как я уже сказал, frerecttool должен быть определен в форме. Пожалуйста, правильно прочитайте мой ответ. Другие ошибки, которые вы упомянули, являются вашим собственным кодом! Вы хотите сказать, что опубликовали нерабочий код ?!

Ответ №2:

 Var
myrectangle :  array[0..2] of TrectangleTool;
indexrectangle :  array[0..2] of integer;
i, j : integer;

//delete previous Trectangletools
for i := 0 to form1.Chart1.Tools.Count-1 do
    If form1.Chart1.Tools[i] is  TRectangleTool then form1.Chart1.Tools[i].destroy;

//adding two Trectangletools
form1.Chart1.Tools.Add(TRectangleTool);
form1.Chart1.Tools.Add(TRectangleTool);

   j:= -1;

    for i := 0 to form1.Chart1.Tools.Count-1 do
    If form1.Chart1.Tools[i] is  TRectangleTool then
        begin
        inc(j);
        indexRectangle[j] := i;
        myrectangle[i] := form1.Chart1.Tools.Items[i] as TRectangleTool;
        end;

//Defining  the two new Trectangletools
with myrectangle[indexRectangle[0]] do
      begin
        Text :=' 1 this is a text 1';
        Shape.Angle:=0;
        Shape.Transparency:=0;
        Shape.Pen.Hide;
        Shape.AutoSize:=True;
        Shape.Color := Talphacolorrec.null;
       // Shape.Font.Style:=[fsBold];
        Shape.Font.Name:='Segoe UI';
        Shape.Font.Size := 14;
        Shape.Font.Color := Talphacolorrec.Blue;
        AllowDrag:=False;
        AllowResize:=False;
        Left:= 4;
        //Chart1.ChartRect.Left-5;
        Top:= 0;
        //Chart1.ChartRect.Bottom-40;
      end;

      with myrectangle[indexRectangle[1]] do
      begin
        Text :='2 this is a text 2';
        Shape.Angle:=0;
        Shape.Transparency:=0;
        Shape.Pen.Hide;
        Shape.AutoSize:=True;
        Shape.Color := Talphacolorrec.null;
       // Shape.Font.Style:=[fsBold];
        Shape.Font.Name:='Segoe UI';
        Shape.Font.Size := 14;
        Shape.Font.Color := Talphacolorrec.red;
        AllowDrag:=False;
        AllowResize:=False;
        Left:= 200;
        Top:= 0;
       
      end;
  

Комментарии:

1. Предыдущий код работает. Сначала выполняется поиск и удаление предыдущих инструментов TrectangleTools. После удаления вы можете добавить до 3 новых инструментов TrectangleTools. Есть комментарии?

2. является ли ‘.destroy’ хорошей процедурой для удаления TrectangleTool? это работает, но я не уверен.

3. Это НЕ ответ на ваш вопрос. Позже вы спросили, как удалить определенный инструмент rectangle, который вы создали. Здесь, в вашем ответе, вы удаляете ВСЕ инструменты прямоугольника, а затем добавляете два новых. Возможно, ваш вопрос был неправильным, и в этом случае вам следует отредактировать его или удалить, если вы обнаружили, что это не ваша реальная проблема.

Ответ №3:

  for I := 1 to form1.Chart1.Tools.Count do form1.Chart1.Tools.Delete(0);
  

Я обнаружил, что это лучший способ удаления всех инструментов на диаграмме.

Мы должны учитывать, что каждый раз, когда мы удаляем инструмент, в тот же момент значение счетчика падает на единицу.

Поэтому мы удаляем позицию 0 столько раз, сколько требуется для удаления всех инструментов.

Комментарии:

1. Это НЕ ответ на ваш вопрос.