Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15269
Рейтинг: 1498
#1: 2007-08-07 18:45:51 ЛС | профиль | цитата
Делаем Help по данному элементу(по желанию г-на User 108)

Объяснить каждое слово в каждой строке:
Add(InlineCode,11970995,126,294)
{
WorkPoints=#6:doWork|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|50: procedure doWork(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|57:procedure THiAsmClass.doWork(var Data:TData; index:word);|5:begin|0:|4:end;|0:|4:end.|
}

Пример:
unit - ключевое слово языка Object Pascal(Delphi), объявляющее начало нового модуля(юнита)... И так до самой точки.
карма: 21
0
vip
#1.1контекстная реклама от партнеров
Гость
Ответов: 17029
Рейтинг: 0
#2: 2007-08-07 19:37:42 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2017-06-21 00:40:06
карма: 0

0
Администрация
Ответов: 15269
Рейтинг: 1498
#3: 2007-08-07 21:12:21 ЛС | профиль | цитата
Отлично

Только одна поправка:
User 108 писал(а):
end; - ключевое слово языка Object Pascal(Delphi), в данном случае означающее конец интерфейсного раздела.

в данном случае это конец объявления класса THiAsmClass = class(TDebug)

Дополнения:
User 108 писал(а):
Debug - что-то связанное с отладкой

Модуль Debug, как и Share является частью стандартного пакета HiAsm и содержит описания и реализацию методов, используемых в отладочном режиме.

User 108 писал(а):
doWork - ее имя, а значение в скобках

Следовало добавить, что это не просто имя, а в точности название левой точки элемента из среды, заданное в св-ве WorkPoints. Именно так всегда объявляются точки типа Work и Var.

User 108 писал(а):
там есть переменная Data, имеющая тип TData

Рассказать подробнее об этой переменной.
а) Как и где объявлен тип TData? Какие поля содержит? Для чего нужны эти поля?
б) Какие данные находятся в этой переменной при вызове метода и откуда они туда попадают?
в) Как эти данные прочитать(т.е. привести к базовым типам integer, string, real и т.д.)?

User 108 писал(а):
Вот это неясно, что за индекс, что он индексирует..

Это номер точки элемента соответствующего типа начиная от 0. Скажем если IC имеет две левые точки с именами doWork1 и doWork2, то их индексы соответственно будут 0 и 1. Обычно индекс в элементе InlineCode не используется.
карма: 21
0
Гость
Ответов: 17029
Рейтинг: 0
#4: 2007-08-08 00:12:50 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2017-06-21 00:40:06
карма: 0

0
Администрация
Ответов: 15269
Рейтинг: 1498
#5: 2007-08-08 00:22:57 ЛС | профиль | цитата
User 108 писал(а):
Нашел только эту информацию, поэтому, неясно какие поля и для чего они.

Следующие шесть строчек являются полями этой структуры. Именно про них и идет речь.
карма: 21
0
Гость
Ответов: 17029
Рейтинг: 0
#6: 2007-08-08 00:53:30 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2017-06-21 00:40:07
карма: 0

0
Ответов: 9736
Рейтинг: 339
#7: 2007-08-08 09:45:20 ЛС | профиль | цитата
User 108, что значит "не знаю"

Прикинь, если бы компилятор говорил то же самое
В любом приличном текстовом редакторе есть контекстный поиск - берешь и ищешь непонятное слово.
Компилятор - это машина, которая особым-то умом не блещет. Поэтому определение должно встретиться раньше его использования. Если не встретилось, значит определено в каком то из юнитов. Имена этих юнитов перечислены в uses - можно поискать там.

В данном случае все просто: PData = ^TData; - на строку выше определения TData
А PHI_Event - еще на строку выше

Ну и есть негласное правило (необязательное - для облегчения собственного же понимания написанного): имена типов начинаются с 'T', а указателей на эти же типы - с 'P'
карма: 6

0
Гость
Ответов: 17029
Рейтинг: 0
#8: 2007-08-08 10:19:56 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2017-06-21 00:40:08
карма: 0

0
Администрация
Ответов: 15269
Рейтинг: 1498
#9: 2007-08-08 12:36:07 ЛС | профиль | цитата
и так добрались до представления основного(базового) типа данных, используемого во всех элементах стандартного пакет HiAsm. Если коротко, то описание полей будет рпимерно таким:
data_type - хранит конкретный тип данных, заданный константами data_XXX(например: data_int, data_str, data_stream и т.д.)
idata, sdata, rdata - в одном из этих полей хранятся собственно данные в зависимости от их типа
Next - служебное поле МТ технологии(не должно использоваться пользователем)
ldata - служебное поле МТ технологии(не должно использоваться пользователем)

Подробнее о типах можно прочесть во второй половине статьи !Код_компонента!, а так же о том какие существуют ф-ции для их чтения. Знание об особенностях этой структуры носит чисто познавательный характер - пользователь обращаться к ним напрямую не должен

Усложним пример:
Add(InlineCode,11970995,140,147)
{
WorkPoints=#6:doWork|
EventPoints=#7:onEvent|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onEvent:THI_Event;|5: |50: procedure doWork(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|57:procedure THiAsmClass.doWork(var Data:TData; index:word);|5:begin|0:|4:end;|0:|4:end.|
}

Добавилась точка типа Event. Из опыта, полученного на предыдущих шагах, предполагается, что читающий должен самостоятельно суметь найти описание типа THI_Event(опять таки только в познавательных целях), а так же ф-ции, которые его используют(и которыми нам придется пользоваться в дальнейшем).

1) Какие функции _hi_XXX существуют(два основных типа)?
2) Какие основные параметры им передаются и для чего?
3) Привести простой пример дублирования потока в IC с точки doWork на точку onEvent. Т.е. пример:
Add(InlineCode,11970995,140,147)
{
WorkPoints=#6:doWork|
EventPoints=#7:onEvent|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onEvent:THI_Event;|5: |50: procedure doWork(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|57:procedure THiAsmClass.doWork(var Data:TData; index:word);|5:begin|0:|4:end;|0:|4:end.|
link(onEvent,13357553:doMessage,[])
}
Add(Button,7016514,91,147)
{
Left=90
Top=145
Data=String(hello)
link(onClick,11970995:doWork,[])
}
Add(Message,13357553,189,147)
{
}
должен выдавать диалоговое окно с надписью "hello"
карма: 21
0
Гость
Ответов: 17029
Рейтинг: 0
#10: 2007-08-08 20:48:55 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2017-06-21 00:40:11
карма: 0

0
Администрация
Ответов: 15269
Рейтинг: 1498
#11: 2007-08-10 15:49:16 ЛС | профиль | цитата
Dilma писал(а):
1) Какие функции _hi_XXX существуют(два основных типа)?

_hi_onEvent - непосредственный немедленный вызов указанного в первом параметре события с передачей данных в поток, указанных вторым параметром. Если второй параметр не указан вовсе, то в этом случае событие будет вызванно с пустыми данными в потоке.
_hi_CreateEvent - отличается от предыдущего метода тем, что указанное событие не вызывается сразу, а заносится в структуру TData в поле Next. Собственно вызов события происходит только после завершения текущего метода. Сделано это для того, чтобы избежать возможного переполнения стека при достаточно большой вложенности вызовов событий _hi_onEvent. Т.е. в общем случае рекомендуется применять первый метод тогда, когда после его отработки нужно сделать что-то еще, а второй - когда делать уже ничего не нужно. Например:

#pas
procedure Test;
begin
_hi_onEvent(); // вызываем внешнее событие
// делаем что-то еще
_hi_CreateEvent(); // вызываем отложенное внешнее событие, запуск которого произойдет после выхода из ф-ции Test
end;

Так же _hi_CreateEvent нельзя использовать внутри циклов, либо путем вставки их друг за другом.

Dilma писал(а):
2) Какие основные параметры им передаются и для чего?

Основных параметра два: собственно событие, которое необходимо вызвать и данные, которые помещаются в топок вызванного события. Какого бы типа не были переданы данные в последствие они всеравно преобразуются в тип TData(даже пустые данные) и именно в таком виде приходят в качестве первого параметра любого метода элемента или IC.

Последнее, что необходимо усвоить это ручное формирование типа TData. Реализовать в примере ниже следующую логику работы элемента IC: по событию doWork элемент должен брать данные из потока или верхней точки, добавлять в конец и в начало считанных данных фрагмент строки "###", после чего выдавать их в поток с методом onEvent. Результат последней проделанной операции должен быть доступен через нижнюю точку Result.

Add(Message,13357553,511,224)
{
}
Add(InlineCode,4787859,462,224)
{
WorkPoints=#6:doWork|
EventPoints=#7:onEvent|
VarPoints=#6:Result|
DataPoints=#4:Text|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|23: onEvent:THI_Event;|5: |50: procedure doWork(var Data:TData; index:word);|50: procedure Result(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|57:procedure THiAsmClass.doWork(var Data:TData; index:word);|5:begin|28: _hi_OnEvent(onEvent,Data);|4:end;|0:|57:procedure THiAsmClass.Result(var Data:TData; index:word);|5:begin|0:|4:end;|0:|4:end.|
link(onEvent,13357553:doMessage,[])
}
Add(Button,7016514,413,224)
{
Left=90
Top=145
Data=String(hello)
link(onClick,4787859:doWork,[])
}
Add(Edit,2823786,462,175)
{
Left=460
Top=160
}
карма: 21
0
Гость
Ответов: 17029
Рейтинг: 0
#12: 2007-08-13 01:09:22 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2017-06-21 00:40:13
карма: 0

0
Ответов: 209
Рейтинг: 3
#13: 2007-08-13 09:44:07 ЛС | профиль | цитата
Значит, Хиасм еще по ходу и энциклопедия языка Паскаля и его кодов...

Именно. Я к примеру основы Делфи изучал по кодам элементов.
Dilma, дальше давайте, уж очень нужная тема. Если Дельфийские, API'шные и библиотечные причандалы всегда можно где то отрыть, то HiAsm'овские только здесь.
карма: 0

0
Ответов: 9736
Рейтинг: 339
#14: 2007-08-13 09:47:04 ЛС | профиль | цитата
ХЭМ писал(а):
Именно. Я к примеру основы Делфи изучал по кодам элементов.

Аналогично
карма: 6

0
Ответов: 842
Рейтинг: 12
#15: 2008-04-27 14:57:04 ЛС | профиль | цитата
Только интерфейс с данными очень громоздкий я пытался облегчить его с помощью шаблона
http://www.hiasm.com/wiki.php?view=230 но до ума идею не довел
Еще есть мысль использовать FTCG для небольших вставок кода .
http://www.hiasm.com/xf/topic.php?t=18095&start=20


карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)