Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как удалить серии типа TShapeSeries c графика / 5 сообщений из 5, страница 1 из 1
19.08.2017, 06:32:15
    #39507769
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить серии типа TShapeSeries c графика
Вывожу на TeeChart два графика, в цикле вывожу туда дополнительно несколько TShapeSeries - просто прямоугольники в нужных местах.
Код: pascal
1.
2.
3.
4.
z := TChartShape.Create(self);
z.ParentChart := cht1;
z.Style := chasRectangle;
.... про все остальное X0,X1....


Есть необходимость при условии удалять прямоугольники с графика - а виртуозно черезж сделанный TeeChart предлагает в аналогично виртуозно " гланды через..." хелпе непонятный способ удаления серий типа Shape.

TChart.RemoveSeries (Each Shape is a unique Series)

пытаюсь написать такой код удаления:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
....
  else
      begin
       for i := cht1.SeriesCount-1 downto 0 do
        begin
          //    cht1.RemoveSeries(cht1.Series[i]);  -- удаляет нафиг все!  - не годится, надо оставить линии графиков
          //    if cht1.Series[i].ClassType = TShape   -- пытаюсь этот признак, что это шейп класс - не реагирует 
          //    if cht1.Series[i].Style = chasRectangle  -- пытаюсь по стилю определить - ругается на несовместимость
                                                                                        [dcc32 Error] unForm.pas(2012): E2008 Incompatible types
//          then
            cht1.RemoveSeries(cht1.Series[i]);    
//   
//            ShowMessage('jopa '+IntToStr(i));
//            cht1.Series[i].Clear;
           end;
//         if (cht1.Series[i].Style = TChartShape)
        end;
         cht1.Refresh;
      end;


Кто знает как эти чертовые шейпы удалить, не трогая нормальные линии графиков?
...
Рейтинг: 0 / 0
19.08.2017, 06:47:06
    #39507771
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить серии типа TShapeSeries c графика
Alexander2,
ты просто не умеешь их готовить (с)
Код: pascal
1.
if cht1.Series[i] is TChartShape...


А лучше делать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var  FTempChartContainer: TComponent;

//создание
  FTempChartContainer:=TComponent.Create(self);
  z := TChartShape.Create(FTempChartContainer);

//удаление
  FTempChartContainer.Free;
...
Рейтинг: 0 / 0
19.08.2017, 06:55:18
    #39507772
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить серии типа TShapeSeries c графика
Соколинский Борис,
Оперативненько!!! Спасибо друг!

Все заработало!
...
Рейтинг: 0 / 0
19.08.2017, 07:13:05
    #39507773
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить серии типа TShapeSeries c графика
Соколинский Борис,

Вот так я готовлю шейпы на график (попробовал предложенный вариант - срабатывает), а удалить теперь той командой не получается.
автор//удаление
FTempChartContainer.Free;


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
procedure TfSample.Button1Click(Sender: TObject);
   var z: TChartShape;
       i: Integer;
   var FTempChartContainer: TComponent;
begin
    If MySelectedNameId <> -1
     then
      begin
        panSelectedParameter.Caption:= MySelectedName;

        dmSample.mtValue.Active:=False;
        dmSample.mtValue.Active:=True;
        dmSample.mtValue.First;
        While not dmSample.mtValue.Eof do
         begin
        //  z := TChartShape.Create(self);
        //создание
          FTempChartContainer:=TComponent.Create(self);
          z := TChartShape.Create(FTempChartContainer);
          //-------------------------------------------------------------
          z.ParentChart := cht1;
          z.Style := chasRectangle;
          z.X0:=dmSample.mtValue.FieldByName('From').AsFloat;
          z.Y0:=0;
          z.X1:=dmSample.mtValue.FieldByName('To').AsFloat;
          z.Y1:=6000;
          z.Pen.Width:=0;
          z.Color := StringToColor(dmSample.mtValue.FieldValues['ValueColor']);
          z.Transparency:= 70;
          z.Font.Size:= 7;
          z.Text.Add(dmSample.mtValue.FieldValues['Value']);
          z.Alignment := taLeftJustify;
          z.VertAlign := vaTop;
          z.Legend.Visible := False;
          dmSample.mtValue.Next;
         end;
      end
     else
      begin
        FTempChartContainer.Free;     -----  это не срабатывает.
       {   
       for i := cht1.SeriesCount-1 downto 2 do
        begin
         if cht1.Series[i] is TChartShape then
          cht1.RemoveSeries(cht1.Series[i]);
        }
      end;
   cht1.Refresh;
end;
...
Рейтинг: 0 / 0
19.08.2017, 07:31:55
    #39507774
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить серии типа TShapeSeries c графика
Alexander2,
отдыхать тебе пора, барин (с).
Контейнер глобальной переменной должен быть или полем класса.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как удалить серии типа TShapeSeries c графика / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]