Aziz писал(а):
призываю вас на помощь!По кодогенератору у нас Dilma и Galkov большие спецы. Я туда вообще не хож, один раз только был, чуть не потерялся
Разработчик
Ответов: 26304
Рейтинг: 2146
|
|||
Aziz писал(а): призываю вас на помощь!По кодогенератору у нас Dilma и Galkov большие спецы. Я туда вообще не хож, один раз только был, чуть не потерялся |
|||
карма: 22 |
|
Ответов: 1309
Рейтинг: 48
|
|||
![]() |
|||
карма: 3 |
|
Ответов: 9906
Рейтинг: 351
|
|||
nesco писал(а): По кодогенератору у нас Dilma и Galkov большие спецы. Я туда вообще не хож, один раз только был, чуть не потерялсяНадо было Ау-у покричать, тебя бы и вывели... делов-то... + к этому, показалось мне: что коллега Netspirit вполне себе ориентируется в этом безобразии |
|||
карма: 9 |
|
Разработчик
Ответов: 26304
Рейтинг: 2146
|
|||
Galkov писал(а): Надо было Ау-у покричатьДа никого тогда не было, все пропали куда-то, давно это было. А сейчас мне туда и лазить незачем, работает -- лучше не трогать. |
|||
карма: 22 |
|
Ответов: 1309
Рейтинг: 48
|
|||
Мда, видно никому это кроме меня не нужно - реализация подобной антибаговской фичи. Придется идти в одиночку.
![]() |
|||
карма: 3 |
|
Ответов: 4664
Рейтинг: 767
|
|||
Aziz, для начала определись, где именно тебе нужны эти вставки.
Мест с ошибками внутри компонента может быть несколько: а) когда он работает "сам с собой", обрабатывая какой-нибудь системный вызов (например, оконное сообщение или хук) или б) когда он отрабатывает метод левой или нижней точки. В первом случае компонент может выдавать результат этой внутренней обработки на правую точку в виде события, но поставить отладку можно будет только внутри кода этого компонента. Во втором случае ошибка обнаруживается простым отключением указанного метода. Но если очень нужно, можешь попробовать то, что ты думал сделать в кодогенераторе. Для этого кодогенератор править не нужно. Сделать логирование горизонтальных и вертикальных связей можно поставив нужный код в следующие функции файла Share.pas: - _hi_CreateEvent, _hi_OnEvent - для горизонтальных связей - ToXXXEvent, ReadXXX - для вертикальных |
|||
карма: 26 |
|
Ответов: 1309
Рейтинг: 48
|
|||
Netspirit, спасибо. Уже что-то.
Во втором случае ошибка обнаруживается простым отключением указанного метода Отключение метода - это будет работать глобально для всех элементов использующих этот метод или для одного "сбойного"? Если глобально то не подойдет. Почему я хотел именно в кодогенератор вставить, потому что, насколько я понял, только ему известны идентификаторы элементов. Я думал замутить нечто вроде этого - если включен режим отладки то каждый компонент в начале своей работы (имеется ввиду обработка левых точек в основном, - как минимум, но можно и расширить, хуки и пр. это уже потом) отправляет свой идентификатор в схеме и метку "start" в некий быстрый лог в ОЗУ, например в SharedMemory, а в конце работы пишет "end". Соответственно при обвале проги можно потом увидеть какие компоненты начали работу и не завершили, вызвав ошибку. А Share.pas "видит" идентификаторы элементов? |
|||
карма: 3 |
|
Ответов: 4664
Рейтинг: 767
|
|||
Идентификаторы вряд-ли видит. Разве что посмотреть реализацию режима отладки, и в этом режиме и забирать идентификаторы элементов. Вроде можно узнать класс элемента.
|
|||
карма: 26 |
|
Ответов: 1309
Рейтинг: 48
|
|||
Ну как вас не заинтересовала подобная возможность? Вам наверное раз мышью щелкнуть это реализовать, максимум пару дней, тем более идея проста, а я пока разберусь..
------------ Дoбавленo в 13.17: Или подскажите хотя бы о чем я просил на предыдущей странице - как вывести (инжектировать) произвольный код в код всех компонентов посредством кодогенератора. Например простой ShowMessage('). Хотя бы в код левых точек или точки. А дальше я думаю потихоньку сам разберусь. |
|||
карма: 3 |
|
Ответов: 4664
Рейтинг: 767
|
|||
В пакете Delphi это невозможно: кодогенератор никак не модифицирует коды компонентов (кроме автоматически генерируемого кода модулей компонентов-контейнеров)
|
|||
карма: 26 |
|
Ответов: 1309
Рейтинг: 48
|
|||
Странно.. Как же тогда он "склеивает" их коды в один исходник? Или он копирует их от начала до конца без парсинга файла, то есть нет возможности вставить свою процедуру простой конкатенацией строк?
------------ Дoбавленo в 14.11: Значит то что я видел в кодогенераторе - директивы "begin" "implementation" - все это к контейнерам относилось. Остается тогда только вставить свой код во все компоненты. Это тоже кое-что - программа может сообщить в каком компоненте крах, но не сможет различать однотипные компоненты. Нельзя никак из самого компонента узнать его текущий ID в схеме? Если нельзя, то можно добавить поле ID и вручную вбивать. Дилма тоже молчит, пропал из аси тоже. ------------ Дoбавленo в 14.13: Последний раз общался с ним : Dilma (18:06:14 7/01/2009) ![]() В принципе, локализация на уровне контейнеров тоже неплохо. Только как это реализовать. |
|||
карма: 3 |
|
Ответов: 4664
Рейтинг: 767
|
|||
Aziz писал(а): Как же тогда он "склеивает" их коды в один исходник?А он их не копирует: он генерирует модули контейнеров в которых прописывает по нужным правилам ссылки на компоненты: ![]()
------------ Дoбавленo в 14.22: Aziz писал(а): можно добавить поле ID и вручную вбиватьЕсли в каждый класс компонента добавить поле ID: integer, то можно модифицировать кодогенератор, чтобы в выше выложенном исходнике в секции назначения свойств он прописывал и идентификатор. |
|||
карма: 26 |
| ||
Голосовали: | Aziz |
Ответов: 1309
Рейтинг: 48
|
|||
Спасибо, ценная информация. "Каждый класс" - это не то же что и "каждый исходник"? Если не тоже, то в каком модуле они описываются? Хотя врядли, скорее всего это одно и тоже.
|
|||
карма: 3 |
|
Ответов: 4664
Рейтинг: 767
|
|||
Согласно концепции пакета каждый компонент представляет собой класс описанный в исходном файле; имена класса и исходного файла задаются по заданным правилам. Хотя сам класс компонента может использовать код в любых других доступных ему исходных файлах.
То-есть, можно сказать "одно и то же" хотя в разговоре все же нужно уточнять "какой класс" и "исходник чего" |
|||
карма: 26 |
|
Ответов: 1309
Рейтинг: 48
|
|||
Чтож, с теорией все ясно. Почти. А насчет самой идеи что скажете? Востребована будет? Или, в свете того что 4-ка постепенно отмирает, как и Дельфи, не стоит и браться? Но для себя пожалуй буду пытаться сделать, т.к. не собираюсь уходить с Хиасма, хотя Флоустоун притягивает..
|
|||
карма: 3 |
|