|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
Проблемы написания хорошего компонента29.06.2011, 22:16. Показов 2124. Ответов 15
Метки нет (Все метки)
Всем доброго времени суток. У меня такая проблема я создаю компонент с большим набором кнопок с картинками и для решения проблемы нажатия на них я создал компонент кнопки на основе TCustomControl и разместил на нем набор TImage'ов где 1 - рисунок в статичном положение кнопки, второй в зажатом третий в заблокированном и т.д.
Все эти кнопки я расположил на еще одном TCustomControl'е. Также я создал специальную платформу на основе Tcontrol которая ловит нажатие мышки на сам компонент-панель, проблема заключается в том что TCustomControl перекрывает Tcontrol и не дает ему выйти на верх всех подкомпонентов, в следствие чего, он не может ловить нажатие... Пожалуйста подскажите, как расположить TControl поверх остольных подкомпоннентов.
0
|
|
| 29.06.2011, 22:16 | |
|
Ответы с готовыми решениями:
15
Проблемы при ручном создании компонента Помогите с СИ (Проблемы написания программ)
|
|
4052 / 2663 / 583
Регистрация: 11.09.2009
Сообщений: 9,501
|
|
| 30.06.2011, 05:30 | |
|
Kellendros, уточните:
Фактически вам надо, чтобы нажатие кнопки мыши обрабатывалось OnClick панели, даже если нажатие было на Button, расположеный на этой панели? То есть, нажатие на любой компонент на панели должно обрабатываться одной и той же процедурой? Если так - может быть просто написать OnClick панели и назначить его всем остальным компонентам на этой панели?
0
|
|
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
||||||
| 30.06.2011, 09:47 [ТС] | ||||||
|
Поясняю, я создаю общий класс обработчика мыши, который создан на основе Tcontrol, в нем есть событие OnClick который отлавливает нажатие на него, и хранит в себе номер элемента, на который нажали. суть заключается в том что бы не прописывать для каждого подкомпонента отдельно событие, а сделать обработчик общего вида.
(Пример обработчика:
0
|
||||||
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
| 02.07.2011, 23:19 [ТС] | |
|
Прошу, хоть кто-нибудь, помогите, просто я уже и не знаю, что можно сделать...
0
|
|
|
4052 / 2663 / 583
Регистрация: 11.09.2009
Сообщений: 9,501
|
||
| 03.07.2011, 02:14 | ||
|
Kellendros, если "озвучите" тут функцию
0
|
||
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|||||||||||
| 03.07.2011, 02:16 [ТС] | |||||||||||
а непосредственно вызов её производится вот так.
0
|
|||||||||||
|
4052 / 2663 / 583
Регистрация: 11.09.2009
Сообщений: 9,501
|
|||||||
| 03.07.2011, 19:48 | |||||||
|
У вас именно TakeMCMouseCoord не возвращает индекс элемента? А вообще должна? Там, например, сначала в Temp заносятся координаты курсора, а потом тут же заменяются...
Где именно, в какой процедуре, у вас не те координаты курсора? Или у вас что-то вообще не вызывается?
0
|
|||||||
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
| 04.07.2011, 07:08 [ТС] | |
|
вся проблема в том, что когда я создаю основной компонент, на который я кладу кномпки и TMCEvent? кнопки ложатся поверх него... из-за этого TMCEvent не может отлоовить нажатие(сам по себе он работает нормально.) вся проблема - положить его поверх остальных компонентов(он написан на основе Tcontrol, кнопки на основе - TWinControl)
0
|
|
|
4052 / 2663 / 583
Регистрация: 11.09.2009
Сообщений: 9,501
|
|
| 04.07.2011, 21:49 | |
|
Kellendros, по-моему, потомок TControl вообще не может перекрыть TWinControl. Если не ошибаюсь, TWinControl имеют Handle и отрисовывают себя сами в любом порядке, в отличие от потомков TControl, которых отрисовывает родитель.
Только вот мне кажется, что вы пытаетесь "собрать" компонент из каких-то надёрганных из разных мест кусочков, особо не озадачиваясь "стройностью изложения". Да и уточняющие вопросы вы игнорируете. Вы вообще посмотрели, в TakeMCMouseCoord - ошибка, рудимент старого кода, или так задумано? Пожалуй, я воздержусь от дальнейшего обсуждения.
0
|
|
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
| 05.07.2011, 00:00 [ТС] | |
|
Дело в том чт я писал весь компонент сам, и могу объяснить его от и до. Дело в том, что я как и любой программист могу допускать ошибки, и в особенности при изменение методов решения задачи, объясню задачу по другому, в надежде на помощь:
Задача: создать удобную структуру для создания интерфейса игры. Я создаю платформу на которой будут распологаться составляющие интерфейс окна на основе tcustomcontrol, и на нем размещаю массив кнопок(tmcbutton - мой компонент, созданный на основе тогоже tcustomcontrol, и двух картинок(зажатая не зажатая)) также я размещаю набор прочих элементов, необходимых панеле. Затем поверх я хочу положить какой нибудь компонент, который будет полностью ловить все взаимодействия мыши с главным компонентом, и в случае нажатия на одни из кнопок из массива возвращать ее Id, так как проще будет обработать именно через Id, в случае к примеру сумки чара, где предметов может быть не определенное колличество. (если я в чем то не прав, так и скажите как будет правильнее) я пытался использовать image за основу и tcontrol но они оба не хотят ложиться поверх tcustomcontrol, а все потомки twincontrol уже не прозрачные, но именно у него появляется возможность наложение на него компонентов. Подскажите, как можно решить мою проблему(напоминаю, моя проблема - создать компонент, который будет лежать на самом верхнем слое, будет прозрачен и будет отлавливать все функции мыши.) И на счет getcursorpos сначала я внутри процедуры отлавливал координаты курсора, а потом я решил их передовать, вот и весь фокус
0
|
|
|
|
|||||||||||
| 05.07.2011, 10:44 | |||||||||||
|
Мне кажется, что будет более логично (по крайней мере, с точки зрения ООП) вовсе не использовать дополнительный слой поверх компонента, поскольку действия с кнопками должны обрабатываться кнопками, а действия с панелью — самой панелью.
В качестве примера того, что я хочу сказать, могу привести код, который я писал во времена изучения ООП. Это экспериментальный код, пытался туда засунуть всё, что изучил/узнал: инкапсуляцию, полиморизм, метаклассы, перегрузки/перезапись, абстрактность. Решает он где-то ту же задачу, что у тебя. Я пройдусь только по декларациям, реализация там очевидна. TItem основывается на TComponent, но вообще имеет ту же суть (сущность), что и кнопка. TTable суть носитель (панель). Тебе же советую сделать так же: разделить сущности (вещь в рюкзаке/рюкзак) и реализацию (TControl с двумя имиджами/панель с наворотами) разными уровнями абстракции, как у меня разделено TItem (который почти полностью абстрактен) и TSelectiveItem (который уже несет в себе реализацию)
TSelectingTableItem добавляет в свой интерфейс возможность устанавливать onclick.
Короче, мне кажется, что лучше будет не вводить новый компонент по перехвату событий, а реализовать то, что тебе нужно доступными средствами, используя реально нужные компоненты.
0
|
|||||||||||
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
| 05.07.2011, 12:00 [ТС] | |
|
я может чего то не понимаю, но я действительно не понимаю как можно без такой панели реализовать отловлю нажатия, с возвращением именно id кнопки, на которую нажали, имее масси этих кнопок.
0
|
|
|
|
||||||
| 05.07.2011, 14:21 | ||||||
|
Тебе нужно отловить нажетие на кнопку? Так лови это КНОПКОЙ, а не какой-то левой панелью. У тебя панель (носитель) усведомлен о всех распольженных на ней кнопках, пусть она раздаст им id. В свою очередь кнопки пусть сами вылавливают нажатие, TImage (или что ты используешь) позволяет.
Например, имаджу onclick присваешь обработчик, принадлежащий панели, который определяет по Sender id твоей кнопки. (С предыдущего поста)
1
|
||||||
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
| 05.07.2011, 14:25 [ТС] | |
|
спасибо, буду пробовать.
0
|
|
|
4052 / 2663 / 583
Регистрация: 11.09.2009
Сообщений: 9,501
|
||
| 06.07.2011, 00:57 | ||
|
Kellendros, из-за неумения слушать, вы потратили кучу своего и чужого времени. Жаль.
Первый ответ в этой ветке:
0
|
||
|
28 / 28 / 5
Регистрация: 29.06.2011
Сообщений: 61
|
|
| 06.07.2011, 00:59 [ТС] | |
|
того ответа что мне был нужен, я в итоге так и не получил, но продолжать эту тему дальше мне показалось бессмысленно.
0
|
|
| 06.07.2011, 00:59 | |
|
Помогаю со студенческими работами здесь
16
Как с одной строки компонента, сохранить информацию в другую строку другого компонента? Создание своего компонента на основе компонента Timer Создание визуального компонента наследника базового компонента Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|