Взять тот же список строк (ListBox). У него есть метод doDelete, которому в потоке нужно передать индекс удаляемой строки. А если этот индекс является жёстко установленным, например удаляться всегда должна только первая строка (её индекс 0)? Поле ввода здесь явно не нужно - выбора здесь как раз быть не должно. Значит, нужен какой-то компонент, который будет хранить в себе число и выдавать его в поток по требованию.
Этот компонент - DoData. Он - третий на вкладке "Инструменты". У него есть параметр Data, который может содержать строку, целое число или дробное число. Если вы его начнёте редактировать, то увидите 4 кнопки: NULL, integer, string, real.
NULL - это отсутствие данных. То есть пустота.
Integer - число целого типа.
String - строка.
Real - дробное число (разделитель - точка, а не запятая!).
Поскольку нам необходим индекс строки, а он - целое число, то и выбрать нужно тип integer. Посе этого в поле ввода нужно написать нужное значение, например 0. И нажать ОК.
Метод doData этого компонента производит запись в компонент данных. Как вы помните из предыдущего поста, сначала данные проверяются на верхней точке. Но к ней мы ничего не подключили. Тогда данные берутся из параметра (если бы в параметре тип был NULL, то данные брались бы из потока). Это наш 0.
Затем данные выдаются в поток на событие onEventData. Это событие можно подключать в методу списка строк doDelete. У нас получится следующее.
Нажатие кнопки приведёт к удалению первой строки, пока список не будет пуст.
Теперь рассмотрим такую ситуацию, когда для работы метода необходимо несколько данных. Например, метод того же списка строк doReplace (он находится на вкладке "Точки" панели параметров). Для работы ему нужно в потоке передать индекс заменяемой строки, а заменяющая строка должна подаваться на точку данных Str.
Индекс передавать в поток мы только что научились. А вот как подать строку на точку данных, не используя уже известное поле ввода (допустим, строка у нас постоянная)?
Это решается с помощью невизуального компонента Memory (вкладка панели компонентов "Инструменты".).
Параметр Default у него аналогичен параметру Data компонента DoData. Так что выбирайте тип String и вводите желаемую строку. А после точку свойства Value подключайте к точке данных списка строк Str.
Вот результат.
Причём эти два компонента (Memory и DoData) можно использовать в связке, что придаст ещё больше гибкости в построении схем HiAsm.
В видеоуроке показаны инструменты, придающие многовариантность (гибкость) программам. Кроме Memory и DoData Вас познакомят также с Разветвителем, зеркальными "Канал в индекс" и "Индекс в канал", а также Case (условным переходом по совпадению).
ОтветитьУдалитьВспомнил фильм "Великолепная семерка" и добавил к DoData его зеркальный компонент, после чего сочинил программу-запоминалку этих "бойцов невидимого фронта", связав их с гоголевскими персонажами.
ОтветитьУдалитьМожет, кого позабавит, а кому-то и пригодится:
Add(BitBtn,7549596,140,77)
{
Left=20
Top=70
Width=80
Caption="DoData"
link(onClick,290434:doMessage,[])
}
Add(BitBtn,16561584,140,126)
{
Left=20
Top=110
Width=80
Caption="EventFromData"
link(onClick,8156538:doMessage,[])
}
Add(BitBtn,774184,140,175)
{
Left=20
Top=150
Width=80
Caption="Memory"
link(onClick,9409667:doMessage,[])
}
Add(BitBtn,9133032,140,224)
{
Left=20
Top=190
Width=80
Caption="Hub"
link(onClick,4254901:doMessage,[])
}
Add(BitBtn,16567194,140,273)
{
Left=20
Top=230
Width=80
Caption="ChanelToIndex"
link(onClick,15099585:doMessage,[])
}
Add(BitBtn,14963416,140,322)
{
Left=20
Top=270
Width=80
Caption="IndexToChanel"
link(onClick,3792482:doMessage,[])
}
Add(BitBtn,12632804,140,378)
{
Left=20
Top=313
Width=80
Caption="Case"
link(onClick,8073083:doMessage,[])
}
Add(Label,1093326,77,14)
{
Left=175
Top=15
Width=267
Height=17
Caption="Великолепная семерка бойцов невидимого фронта"
}
Add(Label,16233664,77,77)
{
Left=110
Top=70
Width=137
Height=17
Caption="Делает данные событием"
}
Add(Label,8045883,77,126)
{
Left=110
Top=110
Width=184
Height=17
Caption="Делает событием нехватку данных"
}
Add(Label,2426371,77,175)
{
Left=110
Top=150
Width=231
Height=17
Caption="Хранит данные и сообщает об их изменении"
}
Add(Label,688609,77,224)
{
Left=110
Top=190
Width=355
Height=17
Caption="Объединяет события и переводит их в последовательность событий"
}
Add(Label,14341370,77,273)
{
Left=110
Top=230
Width=309
Height=17
Caption="На событие выдает номер канала, по которому оно пришло"
}
Add(Label,3541835,77,322)
{
Left=110
Top=270
Width=286
Height=17
Caption="По номеру канала инициирует событие на этом канале"
}
Add(Label,13851910,76,378)
{
Left=110
Top=313
Width=418
Height=17
Caption="Сравнивает событие с эталоном; не совпало - пропускает, иначе подает сигнал "
}
Add(Message,290434,210,77)
{
Caption="Собакевич: делает из мертвых душ товар"
}
Add(Message,8156538,210,126)
{
Caption="Чичиков: запрос на души"
}
Add(Message,9409667,210,175)
{
Caption="Плюшкин: хранит что ни попадя"
}
Add(Message,4254901,210,224)
{
Caption="Гоголь-сочинитель"
}
Add(Message,15099585,210,273)
{
Caption="Добчинский, Бобчинский: к нам приехал ревизор"
}
Add(Message,3792482,210,322)
{
Caption="Городничий: ревизора надобно обкрутить"
}
Add(Message,8073083,210,378)
{
Caption="Хлестаков: хорошо быть ревизором!"
}
Add(Label,2005734,133,14)
{
Left=202
Top=32
Width=202
Height=17
Caption="Гоголевские персонажи - за кнопками"
}
Да вы батюшка интеллектуал)
ОтветитьУдалить