Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26304
Рейтинг: 2146
#31: 2013-09-09 17:10:38 ЛС | профиль | цитата
Aziz писал(а):
призываю вас на помощь!

По кодогенератору у нас Dilma и Galkov большие спецы. Я туда вообще не хож, один раз только был, чуть не потерялся
карма: 22

0
Ответов: 1309
Рейтинг: 48
#32: 2013-09-09 17:21:45 ЛС | профиль | цитата
Ну значит, подождем маэстро..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 9906
Рейтинг: 351
#33: 2013-09-09 22:35:49 ЛС | профиль | цитата
nesco писал(а):
По кодогенератору у нас Dilma и Galkov большие спецы. Я туда вообще не хож, один раз только был, чуть не потерялся

Надо было Ау-у покричать, тебя бы и вывели... делов-то...
+ к этому, показалось мне: что коллега Netspirit вполне себе ориентируется в этом безобразии
карма: 9

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#34: 2013-09-10 01:13:08 ЛС | профиль | цитата
Galkov писал(а):
Надо было Ау-у покричать

Да никого тогда не было, все пропали куда-то, давно это было. А сейчас мне туда и лазить незачем, работает -- лучше не трогать.
карма: 22

0
Ответов: 1309
Рейтинг: 48
#35: 2013-09-10 09:57:59 ЛС | профиль | цитата
Мда, видно никому это кроме меня не нужно - реализация подобной антибаговской фичи. Придется идти в одиночку. В этот темный лес откуда с ужасом выбежал nesco ..)) А старые партизаны знают тропы но молчат, и их знания, опыт уйдут, увы вместе с ними..))
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4664
Рейтинг: 767
#36: 2013-09-10 11:37:36 ЛС | профиль | цитата
Aziz, для начала определись, где именно тебе нужны эти вставки.
Мест с ошибками внутри компонента может быть несколько: а) когда он работает "сам с собой", обрабатывая какой-нибудь системный вызов (например, оконное сообщение или хук) или б) когда он отрабатывает метод левой или нижней точки.

В первом случае компонент может выдавать результат этой внутренней обработки на правую точку в виде события, но поставить отладку можно будет только внутри кода этого компонента.

Во втором случае ошибка обнаруживается простым отключением указанного метода. Но если очень нужно, можешь попробовать то, что ты думал сделать в кодогенераторе. Для этого кодогенератор править не нужно. Сделать логирование горизонтальных и вертикальных связей можно поставив нужный код в следующие функции файла Share.pas:
- _hi_CreateEvent, _hi_OnEvent - для горизонтальных связей
- ToXXXEvent, ReadXXX - для вертикальных

карма: 26

0
Ответов: 1309
Рейтинг: 48
#37: 2013-09-10 12:15:26 ЛС | профиль | цитата
Netspirit, спасибо. Уже что-то.

Во втором случае ошибка обнаруживается простым отключением указанного метода


Отключение метода - это будет работать глобально для всех элементов использующих этот метод или для одного "сбойного"? Если глобально то не подойдет.

Почему я хотел именно в кодогенератор вставить, потому что, насколько я понял, только ему известны идентификаторы элементов. Я думал замутить нечто вроде этого - если включен режим отладки то каждый компонент в начале своей работы (имеется ввиду обработка левых точек в основном, - как минимум, но можно и расширить, хуки и пр. это уже потом) отправляет свой идентификатор в схеме и метку "start" в некий быстрый лог в ОЗУ, например в SharedMemory, а в конце работы пишет "end". Соответственно при обвале проги можно потом увидеть какие компоненты начали работу и не завершили, вызвав ошибку.

А Share.pas "видит" идентификаторы элементов?
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4664
Рейтинг: 767
#38: 2013-09-10 12:35:48 ЛС | профиль | цитата
Идентификаторы вряд-ли видит. Разве что посмотреть реализацию режима отладки, и в этом режиме и забирать идентификаторы элементов. Вроде можно узнать класс элемента.
карма: 26

0
Ответов: 1309
Рейтинг: 48
#39: 2013-09-10 13:17:17 ЛС | профиль | цитата
Ну как вас не заинтересовала подобная возможность? Вам наверное раз мышью щелкнуть это реализовать, максимум пару дней, тем более идея проста, а я пока разберусь..
------------ Дoбавленo в 13.17:
Или подскажите хотя бы о чем я просил на предыдущей странице - как вывести (инжектировать) произвольный код в код всех компонентов посредством кодогенератора. Например простой ShowMessage('). Хотя бы в код левых точек или точки. А дальше я думаю потихоньку сам разберусь.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4664
Рейтинг: 767
#40: 2013-09-10 13:33:31 ЛС | профиль | цитата
В пакете Delphi это невозможно: кодогенератор никак не модифицирует коды компонентов (кроме автоматически генерируемого кода модулей компонентов-контейнеров)
карма: 26

0
Ответов: 1309
Рейтинг: 48
#41: 2013-09-10 14:13:36 ЛС | профиль | цитата
Странно.. Как же тогда он "склеивает" их коды в один исходник? Или он копирует их от начала до конца без парсинга файла, то есть нет возможности вставить свою процедуру простой конкатенацией строк?
------------ Дoбавленo в 14.11:
Значит то что я видел в кодогенераторе - директивы "begin" "implementation" - все это к контейнерам относилось. Остается тогда только вставить свой код во все компоненты. Это тоже кое-что - программа может сообщить в каком компоненте крах, но не сможет различать однотипные компоненты. Нельзя никак из самого компонента узнать его текущий ID в схеме? Если нельзя, то можно добавить поле ID и вручную вбивать.

Дилма тоже молчит, пропал из аси тоже.
------------ Дoбавленo в 14.13:
Последний раз общался с ним :

Dilma (18:06:14 7/01/2009)

В принципе, локализация на уровне контейнеров тоже неплохо. Только как это реализовать.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4664
Рейтинг: 767
#42: 2013-09-10 14:22:54 ЛС | профиль | цитата
Aziz писал(а):
Как же тогда он "склеивает" их коды в один исходник?

А он их не копирует: он генерирует модули контейнеров в которых прописывает по нужным правилам ссылки на компоненты:


#pas
.....................................

uses
Windows,
hi<КОНТЕЙНЕР>,
hi<КОМПОНЕНТ1>,
hi<КОМПОНЕНТ2>,
hi<КОМПОНЕНТn>,
kol,Share;



.....................................

type

TClass<КОНТЕЙНЕР>_<ІD> = class
public
<КОНТЕЙНЕР>_<ІD>:THI<КОНТЕЙНЕР>;
<КОМПОНЕНТ1>_<ІD>:THI<КОМПОНЕНТ1>;
<КОМПОНЕНТ2>_<ІD>:THI<КОМПОНЕНТ2>;
<КОМПОНЕНТn>_<ІD>:THI<КОМПОНЕНТn>;
constructor Create;
destructor Destroy; override;
end;


...................................

constructor TClass<КОНТЕЙНЕР>_<ІD>.Create;
begin
<КОНТЕЙНЕР>_<ІD> := THI<КОНТЕЙНЕР>.Create(nil);
with <КОНТЕЙНЕР>_<ІD> do begin
// Заполнение свойств и прочее
end;

<КОМПОНЕНТ1>_<ІD> := THI<КОМПОНЕНТ1>.Create(<КОНТЕЙНЕР>_<ІD>.Control);
with <КОМПОНЕНТ1>_<ІD> do begin
// Заполнение свойств и прочее
end;

<КОМПОНЕНТ2>_<ІD> := THI<КОМПОНЕНТ2>.Create(<КОНТЕЙНЕР>_<ІD>.Control);
with <КОМПОНЕНТ2>_<ІD> do begin
// Заполнение свойств и прочее
end;

<КОМПОНЕНТn>_<ІD> := THI<КОМПОНЕНТn>.Create(<КОНТЕЙНЕР>_<ІD>.Control);
with <КОМПОНЕНТn>_<ІD> do begin
// Заполнение свойств и прочее
end;

................
end;

destructor TClass<КОНТЕЙНЕР>_<ІD>.Destroy;
begin
<КОМПОНЕНТn>_<ІD>.Destroy;
<КОМПОНЕНТ2>_<ІD>.Destroy;
<КОМПОНЕНТ1>_<ІD>.Destroy;
<КОНТЕЙНЕР>_<ІD>.Destroy;
inherited;
end;
Затем главный модуль прописывается в файл проекта *.dpr. А коды компонентов уже разбирает компилятор согласно полученного исходника проекта.
------------ Дoбавленo в 14.22:
Aziz писал(а):
можно добавить поле ID и вручную вбивать

Если в каждый класс компонента добавить поле ID: integer, то можно модифицировать кодогенератор, чтобы в выше выложенном исходнике в секции назначения свойств он прописывал и идентификатор.
карма: 26

1
Голосовали:Aziz
Ответов: 1309
Рейтинг: 48
#43: 2013-09-10 14:35:41 ЛС | профиль | цитата
Спасибо, ценная информация. "Каждый класс" - это не то же что и "каждый исходник"? Если не тоже, то в каком модуле они описываются? Хотя врядли, скорее всего это одно и тоже.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4664
Рейтинг: 767
#44: 2013-09-10 15:02:38 ЛС | профиль | цитата
Согласно концепции пакета каждый компонент представляет собой класс описанный в исходном файле; имена класса и исходного файла задаются по заданным правилам. Хотя сам класс компонента может использовать код в любых других доступных ему исходных файлах.
То-есть, можно сказать "одно и то же" хотя в разговоре все же нужно уточнять "какой класс" и "исходник чего"
карма: 26

0
Ответов: 1309
Рейтинг: 48
#45: 2013-09-10 15:37:05 ЛС | профиль | цитата
Чтож, с теорией все ясно. Почти. А насчет самой идеи что скажете? Востребована будет? Или, в свете того что 4-ка постепенно отмирает, как и Дельфи, не стоит и браться? Но для себя пожалуй буду пытаться сделать, т.к. не собираюсь уходить с Хиасма, хотя Флоустоун притягивает..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)