![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
ilya_z |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 9.1.2007 Где: Екатеринбург Репутация: нет Всего: нет |
В-общем, проблема такая: пытаюсь написать программку визуализации измерений. Т.е. с координатно-измерительной машины приходят координаты точек, а моя задача - отображать их в одной из трёх выбираемых плоскостей с учётом масштаба и, соответственно, отображаемой области.
Основа программы уже вырисовывается, уткнулся в то, что как-то нужно описать объекты. Пока задумал четыре объекта: отрезок, дуга, окружность, размерная линия (отрезок со стрелками). И сижу балуюсь с элементами TShape (рисую окружности) и TCanvas (рисую отрезки и окружности; а вот дуги получаются плохо: никак не врублюсь, как правильно указывать координаты, передаваемые в функцию Arc). Очевидно, что это не то, что мне нужно. Ну, к примеру, такая штука меня не устраивает тем, что объекты то я вставляю в форму, вот только потом к ним никак обратиться не могу:
Так-то вроде бы это то, что нужно, только как к объекту то обратиться? Я знаю его имя, но дальше то что? Искать с помощью FindNextControl не представляется возможным потому, что объекты типа TShape, хоть и являются потомками класса TControl, но почему-то не нумеруются: после добавления такого объекта счётчик Form1.ControlCount не инкрементируется. Вата какая-то получается. Это ещё полбеды: кроме окружностей, я хочу рисовать и другие объекты, а их в TShape нету. Получается, что мне всё равно придётся описывать их на основе класса TGraphicControl. А этого я, к сожалению, делать и не умею. Да, совсем забыл: пишу я всё это дело на своём любимом Delphi 3. В более поздних версиях всё может быть несколько по-другому. Мне бы ссылочку на путёвый пример по реализации своих классов, а я бы перенял. Это сообщение отредактировал(а) ilya_z - 10.1.2007, 13:42 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Зачем же так. Каждый потомок будет иметь свой канвас, а этого ни кому не надо. Достаточно иметь у класс имеющий канву. Он и будет всех рисовать. А сами фигуры будут хранить чисто свои координаты и состояние. Что касается ARC. Первые 2 точки определяют прямоугольник описанный около эллипса. 3я точка с центром эллипса образует прямую точка пересечения прямой и эллипса есть начало дуги. 4я точка аналогично 3й только определяет конец дуги. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
ilya_z |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 9.1.2007 Где: Екатеринбург Репутация: нет Всего: нет |
Посмотрел я, чего пишут про TGraphicControl:
"Graphic controls cannot receive the input focus, nor can they contain other controls. Because a graphic control doesn’t need a Windows handle, it’s demand on system resources is lessened, and painting a graphic control is quicker than painting a windowed control. To create a control that can receive input focus or contain other controls, but which needs a Canvas property and a Paint method, derive a class from TCustomControl." Теперь стало ясно, почему объекты типа TShape не нумеруются: не могут они иметь фокус. Хотя это и так уже было ясно. Получается, что свой класс мне нужно делать на основе не TGraphicControl, а только на основе TCustomControl. Всё равно хороший пример нужен, однако. Книжки-то по программированию я не люблю читать. Все они "водянистые" какие-то, пока до сути доберёшься - состаришься. Вот фантастику какую почитать - это совсем другое дело. Думаю, может быть и сам справлюсь. Пока читаю вот это: http://podgoretsky.com/ftp/Docs/Delphi/D5/...ustom.html#3418 а там, глядишь, и новые мысли появятся. Это сообщение отредактировал(а) ilya_z - 11.1.2007, 06:11 |
|||
|
||||
ilya_z |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 9.1.2007 Где: Екатеринбург Репутация: нет Всего: нет |
Процесс пошёл. Оказалось, что в "Delphi 3 Pro" всё, что нужно для создания новых компонентов, уже есть. Хороший help и описание API-функций (MSDN). Раньше я на объекты в палете sample внимания не обращал, а теперь понял, что их то в первую очередь и нужно смотреть. Тогда сразу становится ясно, как писать свои компоненты.
Сейчас наткнулся на два камня: 1) новые объекты не хотят уничтожаться: хотя при их создании никаких более объектов или динамических переменных не создаётся, но при вызове деструктора происходит переполнение стэка (при зацикливании на процедуре free). В чём причина - не догоняю. destructor TCustomControl1.Destroy; Begin Free; inherited Destroy; end; 2) новые объекты не хотят становиться прозрачными при задании: Brush.Style:=bsClear; |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
И не удивительно! метод Free - вызывает метод Destroy (по определению), он ведь виртуальный. Вот и циклический вызов.
Форум не занимается решением ваших задач. (Это делается только одном единственном разделе - "Центр помощи"). Форум следует использовать для решения определенных вопросов. Каждый вопрос это отдельная тема. Не следует поднимать вопросы, которые уже имеют решение. Для этого перед созданием темы следует минимум посмотреть в DRKB (крупнейший делфийский фак) и осуществить поиск по форуму и только после этого создавать тему с вопросом, а не с группой несвязанных между собой вопросов. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
ilya_z |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 9.1.2007 Где: Екатеринбург Репутация: нет Всего: нет |
Да ладно уж. Можно подумать, я кого-то напрягаю или флудом каким занимаюсь. Если это так, то прошу прощения.
Я всегда сам со своими проблемами разбирался, и у меня есть основания полагать, что и с этим делом справлюсь. Просто времени больше на это уйдёт. Зато лучше пойму суть вопроса: что, почему и зачем. А за помощь - спасибо. По поводу поиска хочу выразить своё личное мнение (как это теперь модно писать в среде "папуасов" - IMHO): куда ни ткнись, а ничего толкового на форумах не находится, за редким исключением. Может это потому, что вопросы у всех разные, а может потому, что одним людям, хоть чего-нибудь понимающим, в лом разбираться с чужими проблемами, а остальные просто сильно умственно отсталые (УО), и от их советов только вред. К сожалению, вторых подавляющее большинство. И по своей теме я уже инет покопал, ничего толкового, конечно же, пока не накопал и, скорее всего, не накопаю. Есть хорошие примеры (демки), да только вот исходников-то всё равно на них нет. Потому проще написать своё и не терять время и силы зря. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
ilya_z, дело не в том напрягать или нет, дело в порядке. Вопросы по графике должны быть созданны тут, а вопросы по ООП и созданию компонентов в разделе "Общих вопросов".
Зря вы ругаете поиск. На очень многие из новых заданных вопросов обычно находят ответ или в факе или в DRKB или на форуме. Особенно это касается раздела "Общие вопросы". В настоящее время в разделе делфи 20994 тем! У нас есть раздел Арсенал форумистов где люди выкладывают свои удачные решения и еще много чего другого. Это обычная практика. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
ilya_z |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 9.1.2007 Где: Екатеринбург Репутация: нет Всего: нет |
Ничего я не ругаю. Просто обычно того, что нужно, почему-то никогда нигде нет. И пока ищешь ответы на свои вопросы, то всегда быстрее получается самому догадаться с помощью метода "научного тыка" и хэлпа, чем найти хоть что-то полезное. Поэтому по-пустякам я никогда не лезу в поиск, потому что поиск ни фига "не рулит", и это не пустой трёп, а тенденция. Всегда лучше сначала сесть и подумать, полистать хэлп, - и решение придёт само собой, чем упираться рогами в поиск и тупо искать чёрную кошку в тёмной комнате, особенно, если известно, что там её нет.
А DRKB я полистал, и ничего интересного там не увидел. Даже не знаю в чём тут дело. Про себя не могу сказать, что я какой-то крутой программер. Заурядный самоучка. Может быть просто этот DRKB для совсем чайников писан? А по моей теме там нет вообще ничего, т.е. zero. Это сообщение отредактировал(а) ilya_z - 12.1.2007, 18:40 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |