Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
6 / 6 / 6
Регистрация: 23.11.2009
Сообщений: 71
1

Динамическое создание и уничтожение TChart

07.12.2010, 22:09. Показов 3539. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Проблема с уничтожением динамически созданного chart.
Имеется:
Delphi
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
var Ch: TPoint;
     c:TChart;
 
...
 
{события для перемещения chart-а по форме}
procedure TForm1.ChartMMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Ch.X:=X;
Ch.Y:=Y;
TChart(Sender).Tag:=1;
end;
 
procedure TForm1.ChartMMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if TChart(Sender).Tag=1 then begin
  TChart(Sender).Left:=TChart(Sender).Left+X-Ch.X;
  TChart(Sender).Top:=TChart(Sender).Top+Y-Ch.Y; end;
end;
 
procedure TForm1.ChartMMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
TChart(Sender).Tag:=0;
end;
 
procedure TForm1.N24Click(Sender: TObject);
begin
c:=TChart.Create(nil);
c.Left:=200;
c.Top:=100;
c.Visible:=true;
c.Height:=250;
c.Width:=400;
c.OnMouseDown:=ChartM.OnMouseDown;
c.OnMouseMove:=ChartM.OnMouseMove;
c.OnMouseUp:=ChartM.OnMouseUp;
c.Parent:=self;
c.PopupMenu:=PopupMenu1;
end;
в popupmenu две менюшки, одна из них "удалить диаграмму". Как мне по клику в popupmenu удалить тот chart на котором я нажал??? поиск по гуглу не предлагать, искал уже, не нашел((
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2010, 22:09
Ответы с готовыми решениями:

TFrame создание\уничтожение
Есть форма, хочу на ней создавать и уничтожать (перед показом другого) фреймы. У фреймов align...

Скажите, правильно ли я понимаю в теории создание и уничтожение экземпляра класса в Delphi?
1. Создание объектов любого типа: Чтобы от описания класса перейти к объекту, следует выполнить...

динамическое создание
напишите приложение в котором, при щелчке по форме мышью, появляется панель с заголовком,...

Динамическое создание кнопок.
Можно сделать так, чтобы при нажатии на одну кнопку создавалась (не появлялась) кнопка?

5
65 / 65 / 16
Регистрация: 25.11.2009
Сообщений: 283
07.12.2010, 22:40 2
тогда поищи в яндексе=)))
шучу.
а вообще у меня была похожая проблема. решал следующим образом(мне лично понравился)
Заводим список
type NTCharts=^charts;
charts=record
cht=Tchart;
next=NTChart;
end;
затем при добавлении делаем Ваш код+ стандартный способ добавления инф в список.
перейдем к теме как удалять -
при вызове popup он "прорисовывается" с определенными значениями top и left. если мы получаем команду удалить, то берем эти значения, проходимся по нашему списку и сверяем какому Tchart принадлежит это точка. Затем удаляем его (destroy) и сдвигаем список. вот и все. Написано страшно конечно, но на практике, на мой взгляд, очень удобно
1
6 / 6 / 6
Регистрация: 23.11.2009
Сообщений: 71
08.12.2010, 14:18  [ТС] 3
Цитата Сообщение от }{NiM Посмотреть сообщение
Написано страшно конечно
Да уж))
проверять по top и left неправильно, вдруг два chart-а расположены друг на друге!
Но все равно спасибо за идею))
0
65 / 65 / 16
Регистрация: 25.11.2009
Сообщений: 283
08.12.2010, 15:41 4
Если два чарта расположены друг на друге, то должен удаляться тот, который расположен "сверху" то есть в списке его параметры будут идти раньше. То при удалении можем идти до первоо совпадения.
0
53 / 52 / 22
Регистрация: 29.11.2010
Сообщений: 143
09.12.2010, 10:19 5
По моему всё гораздо проще, как на счёт того, чтобы пользоваться параметром "Sender" приходящим на события? С помощью него можно очень просто определить нужный вам график.
0
6 / 6 / 6
Регистрация: 23.11.2009
Сообщений: 71
10.12.2010, 21:07  [ТС] 6
делал так:
Delphi
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
procedure TForm1.ChartMMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Ch.X:=X;
Ch.Y:=Y;
if Button=mbLeft then TChart(Sender).Tag:=1 else
  if Button=mbRight then TChart(Sender).Tag:=2;
end;
 
procedure TForm1.ChartMMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if TChart(Sender).Tag=1 then begin
  TChart(Sender).Left:=TChart(Sender).Left+X-Ch.X;
  TChart(Sender).Top:=TChart(Sender).Top+Y-Ch.Y; end;
end;
 
procedure TForm1.ChartMMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if TChart(Sender).Tag=1 then TChart(Sender).Tag:=0;
end;
 
procedure TForm1.N24Click(Sender: TObject);
begin
k:=k+1; ShowMessage(inttostr(k));
c[k]:=TChart.Create(nil);
c[k].Left:=200;
c[k].Top:=100;
c[k].Height:=250;
c[k].Width:=400;
c[k].Name:='Chart'+IntToStr(k);
c[k].OnMouseDown:=ChartM.OnMouseDown;
c[k].OnMouseMove:=ChartM.OnMouseMove;
c[k].OnMouseUp:=ChartM.OnMouseUp;
c[k].Parent:=Form1;
c[k].PopupMenu:=PopupMenu1;
end;
 
procedure TForm1.N21Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 100 do
  if (c[i]<>nil)and(c[i].Tag=2) then begin c[i].Free; break; end;
end;
удаляет, но выходит ошибка когда я удаляю какой-то Chart, а потом удаляю Chart, который стоит в массиве после того Chart-а который я удалил. Я понятно объяснил нет?)))

Добавлено через 2 минуты
FuKingBrain, в N21Click Sender-ом является PopupMenu. Так что не катит.
0
10.12.2010, 21:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2010, 21:07
Помогаю со студенческими работами здесь

Динамическое создание компонентов
помогите, плиз! как сделать динамическое добавление компонентов!

Динамическое создание компонентов
создайте приложение с кнопкой пуск, при нажатии на которую форма заполняется десятью компонентами...

Динамическое создание объекта + Drag&Drop
Здравствуйте! Такая вот задачка: Мне нужно по щелчку на кнопку динамически создавать компонент...

Динамическое создание AdoTable
Как создать ADOtable динамически(на нажатие кнопки например) сам пробую, вроде создается, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru