Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизЛогирование нажатия кнопок Найти похожие ветки
← →
{bas} (2003-09-02 14:45) [0]Привет всем!
Есть такая проблема: Есть готовое приложение с множеством(тысячью) кнопок и разными типами(TSpeedButton, TBitButton, TButton), надо сделать логирование нажатия любой кнопки.
Что можете посоветовать.???
У меня есть только одно решение - поправить в исходниках у TControl метод Click, в кот. будет проверяться принадлежность к нужным классам и записывать в файл, то что мне нужно.
← →
Skier (2003-09-02 14:52) [1]>{bas} © (02.09.03 14:45)
А если им всем повесить одно событие ?
← →
mrcat (2003-09-02 14:54) [2]TActionList
← →
DmS (2003-09-02 14:54) [3]напиши вспомогательную программку для модификации исходников
1. находит обработчик OnClick кнопки например по структуре .Button1 Click(Sender : TObject)
2. пропускает сл. строчку (там begin)
3. вписывает имя функции логирования
4. не забудь в функции проверить Sender на принадлежность к типу кнопок (if Sender is TButton и тд)
← →
mrcat (2003-09-02 14:55) [4]сорри, не понял вопрос
← →
PVOzerski (2003-09-02 14:55) [5]>А если им всем повесить одно событие ?
Можно даже перебором Controls[] в ран-тайме. Присваивать свой OnClick, из которого потом вызывать первоначальный (его можно, например, в Tag временно закинуть).
← →
{bas} (2003-09-02 15:15) [6]>>PVOzerski © (02.09.03 14:55) [5]
Не совсем понял.
Если присвоить им одно и то-же событие, то откуда узнать, что была за процедура до этого?? Да и некоторые реакции на нажатие сделаны через TActionList. Да и ТАГ может быть занят чем либо еще служебным.
← →
Skier (2003-09-02 15:18) [7]
> Если присвоить им одно и то-же событие, то откуда узнать,
> что была за процедура до этого??
А это зачем ?
← →
Calm (2003-09-02 15:19) [8]
> Есть готовое приложение с множеством( тысячью) кнопок
Класс!!!
← →
{bas} (2003-09-02 15:29) [9]>> Skier © (02.09.03 15:18) [7]
>> А это зачем ?
Ну как я узнаю, что вызывать в этой общей процедуре после логирования.
У меня есть кнопки, у которых на событие онКлик есть уже обработчик. Как я понял вы предлагаете присвоить им новое событие(в кот. логируется все), а старое вызывать из него. Я не прав?? поясните тогда, что вы называете общим событием.
>> Calm © (02.09.03 15:19) [8]
У тебя наверное одна кнопка в приложении - SHUTDOWN. Я угадал??
← →
PVOzerski (2003-09-02 15:30) [10]>Если присвоить им одно и то-же событие, то откуда узнать, что была за процедура до этого?? Да
Так ее-то (точнее, адрес кода) я и предлагал скинуть в tag. Можно и без Tag"a обойтись, даже, пожалуй, лучше. Заводим array of record acontrol:tObject;oldOnClick:tNotifyEvent)end; длиной в количество control"ов, кидаем туда значения контролов и их старые обработчики onClick, из нового обработчика через сравнения Sender"а с полями acontrol элементов массива находим нужный старый обработчик. IMHO, можно и более быстрые способы напридумывать, только лень :^)
← →
Skier (2003-09-02 15:33) [11]>{bas} © (02.09.03 15:29)
А никак нельзя заменить классы TSpeedButton, TBitButton, TButton на
свои, в которых будет перекрыт Click ? Так проще будет...
← →
{bas} (2003-09-02 15:51) [12]>> Skier © (02.09.03 15:33) [11]
Да я согласен, что это вариант, но мне он не подходит, так как уж очень много надо будет менять и в .пас и .дфм. Если только опять писать интерпритатор.
← →
Skier (2003-09-02 15:55) [13]>{bas} © (02.09.03 15:51)
> так как уж очень много надо будет менять и в .пас и .дфм.
Немного.
Достаточно использовать диалог "Replace" в *.pas и в текстовом представлении *.dfm
← →
{bas} (2003-09-02 16:20) [14]Спасибо за идеи. Подумаю как сделать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c