Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как подавить реакцию TTreeView на двойной клик? [D7, WinXP]


Страницы:   1 2 3 4 5

АлександрМ ©   (2007-07-05 01:42:00) 

TTreeView при двойном клике сворачивает или разворачивает ту ветку на которой был выполнен этот двойной клик. На событие OnDblClick сделан свой обработчик. И не нужно, чтобы ветка при этом закрывалась или открывалась (пусть пользователь сворачивает или разворачивает её только с помощью кнопок - и +). Подскажите, пожалуйста, как это сделать.


{RASkov}   (2007-07-10 10:07:00) [41]

> [50] MetalFan ©   (10.07.07 09:52)
> зато не надо изврат с одноименными классами без нужды использовать

У меня есть в программе наипростейшее окно Абоут и в нем, например, один единственный компонент и весь код модуля это изменение некоего стандартного действия этого компонента, и что? Мне для этого нужно новый компонент регистрировать в палитре? или создавать его в рантайме? или приведение типов делать? А не проще подмену? :)

Это я не про ресурсоемкость, а вобще по спору :)

> прям таки ресурсоемко? одним хэндлом больше, одним меньше

Ну а здесь вопрос отдельный и не нажно пользоваться при написании программ - убеждением того, что компы сейчас мощные ресурсов хватит нв все...
или давайте все так писать и что? запустили мою и твою прогу и ОС сдохла... :)


Ega23   (2007-07-10 10:04:00) [42]


> Ресурсоемко получается :) Два хэндла и оба получают сообщения.
> ... только первому они практически не нужны...(
> Олег, неужели ты всегда(во всех своих проектах) так(как
> советуешь) делаешь? И не разу не пользовал метод "подмены".
> .. не верю :)


Если уж настолько сильно приспичивает до какого-нибудь Canvas достучаться, который в protected сидит, то либо нследуюсь от TCustom... либо от реального класса. Но это - крайне редко.

Если честно, то у меня редко какой грид (TreeView, Memo и пр.) не лежит на панели. Процентах в 70 - точно.
Подмену - нет, не делаю. Как правило, хватает стандартных компонентов с обработчиками.
Чатос приходится использовать TEdit, но такой, чтобы только цифры можно печатать было. Но даже для него просто пишу метод формы и назначаю сразу куче Edit'ов в качестве обработчика.

Я не говорю, что этот метод с подменой неприемлем в принципе. Приемлем. Но - крайне аккуратно. На заметку я себе метод взял. Но начинающим я бы такое советовать не стал.


MetalFan   (2007-07-10 09:52:00) [43]


> Ресурсоемко получается :) Два хэндла и оба получают сообщения.
> ...

прям таки ресурсоемко? одним хэндлом больше, одним меньше. зато не надо изврат с одноименными классами без нужды использовать


{RASkov}   (2007-07-10 09:43:00) [44]

> [48] Ega23 ©   (09.07.07 18:57)
> Parent := ListBoxPanel;
> Align := alClient;

Ресурсоемко получается :) Два хэндла и оба получают сообщения.... только первому они практически не нужны...(
Олег, неужели ты всегда(во всех своих проектах) так(как советуешь) делаешь? И не разу не пользовал метод "подмены"... не верю :)
Хотя согласен - делать - это одно, а советовать такое - это другое.


> [47] GeoJ   (09.07.07 18:29)
> Впрочем, если CodeGear добавит в IDE новую возможность (что-
> то типа дополнительной панели для классов, определенных
> в текущем проекте)

Интересная идея... :)


Ega23   (2007-07-09 18:57:00) [45]


> И я не буду создавать этот ListBox в run-time, если на форме
> много компонент и их взаимное расположение, возможно, будет
> изменяться в процессе работы над проектом.


Parent := ListBoxPanel;
Align := alClient;

?


GeoJ   (2007-07-09 18:29:00) [46]

Профессионально занеимаюсь программированием с 1991 года. И на всех ОС на всех языках программирования всегда присутствовали приемы, которые всеми расценивались как "плохие", но, тем не менее, использовались. С кучей оговорок, требований к аккуратности использования и рекомендациями не трогать без необходимости. Потому что давали определенные преимущества, которых нельзя было достичь законными средствами.

Если мне в рамках данного конкретного проекта требуется создать модифицированный ListBox, я сдлеаю производный класс, а не буду обвешивать многочисленными обработчиками событий стандартный TListBox. Только для того, чтобы отделить поведение списка от логики самой программы. И я не буду создавать этот ListBox в run-time, если на форме много компонент и их взаимное расположение, возможно, будет изменяться в процессе работы над проектом. И уж наверняка не буду регистрировать чуть-чуть модифицированный компонент в VCL (там и так куча лишнего), если он не потребуется для других проектов.

Впрочем, если CodeGear добавит в IDE новую возможность (что-то типа дополнительной панели для классов, определенных в текущем проекте), то безо всякого огорчения откажусь от использования данного приема.


Ega23   (2007-07-09 11:49:00) [47]

Да делайте так, как считаете нужным. Хоть goto используйте (сам часто использую, правда в TSQL).
Только метод-то всё равно варварский.


MetalFan   (2007-07-09 00:27:00) [48]


> Вы не просекли фишки

точно, не просек)
но все равно интуитивно мне такой подход не нравится)))


Инс   (2007-07-06 15:19:00) [49]


> лучше, имхо, хотябы так:

Вы не просекли фишки. Так как Вы предлагаете написать - безусловно правильно, но фишки не будет. Тут же прикол в чем? В том, что среда "думает", что используется класс с палитры, а мы его подменяем своим, и в рантайм именно наш и будет создан. Если написать другое имя, отличное от имени предка, то придется либо регистрировать его в палитре, либо создавать в рантайм.


MetalFan   (2007-07-06 14:53:00) [50]

я тоже считаю, что так объявлять не совсем корректно
TTreeView = class(ComCtrls.TTreeView)
лучше, имхо, хотябы так:
{THack|TMy|TSpec|etc}TreeView = class(ComCtrls.TTreeView)
а если другой человек будет читать код, и случайно не заметит описание одноименного со стандартным класса?
и уж тем более не стоит рекомендовать писать так новичку. дурной тон.
жаль тут нельзя голосование устроить))))


_MaSteR_NN_   (2007-07-06 13:27:00) [51]

Да уж, мир тесен :)


GeoJ   (2007-07-06 12:50:00) [52]

> <...> восторги Geo, которому понравилось решение <...>
Господа! Мир -- вообще тесен. А интернет -- особенно. Так что лучше все же быть поаккуратнее с высказываниями относитель но конкретных людей: они могут это увидеть. Это я к тому, что хоть убей, не помню своих сообщений с восторгами, так как эйфория прошла достаточно давно, когда этот способ только был придуман.

Было всего лишь конструктивное обсуждение возможностей еприменения данного способа. Именно поэтому Инс привел ссылки. Чтобы народ не повторялся в обсуждении.

>>> Из противников - Антоха Григорьев
Если Вы читали внимательно, то должны были заметить, что неприятие у Антона всего лишь на эстетическом уровне (ну, не нравится). То есть, если понимаешь что, как, зачем и почему, то использование данного метода вполне допустимо и влечет за собой не больше опасностей, чем цикло for-to-do.

>>> TTreeView - это TTreeView и никак иначе
Вообще-то, по ООП TTreeView так и останется TTreeView. Только отдельные строчки будут красного цвета ;-)

И еще... Система разработки состоит не только из среды визуального проектирования, но и и из кода на языке программирования. Я Вам навскидку могу привести несколько устоявшихся общепризнанных приемов программирования, которые грешат тем же самым: трудностью понимания того, о чем именно идет речь. Но все пользуются и не жужжат.


Инс   (2007-07-05 23:04:00) [53]


> Плагины - пример неприменимости твоих подходов


Примеры неприменимости той или иной технологии есть всегда. Например, SendMessage неприменим, в случае посылки сообщения спящему потоку, ожидающему освобождения объекта твоим потоком. Критическая секция неприменима при синхронизации потоков различных процессов. Отвертка неприменима в случае, когда нужно забить гвоздь в стену. Но если есть хотя бы одна область, где тот или иной метод применим и обоснован - он имеет право на существование. Так что твою позицию считаю необоснованной.


Инс   (2007-07-05 22:46:00) [54]


> А насчет плагинов - так компилятор и не пропустит, если
> функция требует в качестве параметра ComCtrls.TTreeView,
> а ты передаешь свой TreeView.


Наоборот, разумеется...


Инс   (2007-07-05 22:43:00) [55]


> О регистрации в палитре говорил только ты


Рекомендую перечитать ветку с самого начала. Данный метод был предложен именно как альтернатива регистрации классов в палитре при небольшой модификации базового. Именно об этом и шел спор с г-ном Ega23. А насчет плагинов - так компилятор и не пропустит, если функция требует в качестве параметра ComCtrls.TTreeView, а ты передаешь свой TreeView. Так как классы проверяются на совместимость не путем проверки имен, а путем проверки указателя на VMT. Или ты имеешь в виду что-то другое? Тогда поясняй подробнее.


Desdechado   (2007-07-05 22:25:00) [56]

Инс ©   (05.07.07 22:05) [35]
Плагины - пример неприменимости твоих подходов, да еще и пример возникновения скрытых ошибок.
О регистрации в палитре говорил только ты, это у тебя фантазии только на 2 вещи хватает, а моей аналитической соображалке вполне по силам гораздо более серьезные вещи.
А спор идет, если ты не понял, о противоестественном желании написать на своем изделии чужой товарный знак, обманивая всех и себя самого.


{RASkov}   (2007-07-05 22:14:00) [57]

> [35] Инс ©   (05.07.07 22:05)

От одного отбился... тут другой :))
>
Чесслова... > Как подавить реакцию TTreeView на двойной клик?
реакцию уже подавили давно :) Хватит спорить :)
Ветка, с этим бесконечным спором, уже смех вызывает. :)


Инс   (2007-07-05 22:05:00) [58]


> [34] Desdechado ©   (05.07.07 21:33)

А причем тут плагины? И как регистрация классов в палитре под другим именем или создание их в рантайм поможет твоей проблеме? Спор ведь именно об этом. И еще. Ткни меня пальцем в мой пост, где я предлагаю переопределять половину классов и пихать их повсюду куда ни попадя. Я утверждаю, что в рамках аккуратного обдуманного использования этот способ имеет право на существование. А про плагины и DLL ты первый заговорил, так как видимо соображалка за границы собственного проекта выходить категорически отказывается.


Desdechado   (2007-07-05 21:33:00) [59]

> Инс ©   (05.07.07 19:27) [31]
Представь себе программу с плагинами. Плагины пишутся любым желающим. А ты у себя в программе попереопределял половину классов, а потом толкаешь их в эти плагины в качестве переметров. Что имеем? Правильно, неопознанные ошибки. Собственно, как и в случае компиляции плагинов в других версия дельфи.


b z   (2007-07-05 20:41:00) [60]


> так как оба правы и оба не правы в одно и тоже время :)


> Не отступай :)


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо