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

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

07.12.2010, 22:09. Показов 3557. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2010, 22:09
Ответы с готовыми решениями:

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

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

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

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

5
 Аватар для }{NiM
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
 Аватар для Adeptus
6 / 6 / 6
Регистрация: 23.11.2009
Сообщений: 71
08.12.2010, 14:18  [ТС] 3
Цитата Сообщение от }{NiM Посмотреть сообщение
Написано страшно конечно
Да уж))
проверять по top и left неправильно, вдруг два chart-а расположены друг на друге!
Но все равно спасибо за идею))
0
 Аватар для }{NiM
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
 Аватар для Adeptus
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2010, 21:07
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru