Список строк - это компонент, предназначенный для отображения строк с возможностью выбора пользователем одной или нескольких строк.
Он похож на многострочное поле, но в нём нельзя изменить текст в программе непосредственно. Он нередко используется наряду с выпадающим списком, и здесь я подробнее про него расскажу.
Список строк находится на панели компонентов перед многострочным полем. Большинство точек (методов, событий и т. д.) у него совпадают с точками многострочного поля, потому что они, как уже говорилось, похожи.
Поставим этот компонент на рабочее поле и займёмся его параметрами. Важнейший параметр - Strings. Он содержит набор строк для вывода в компонент. Заполним этот параметр, получив что-то такое:
Сейчас уже можно запустить программу, чтобы полюбоваться первыми результатами. Но мы сначала освоим функции удаления и добавления строк.
Действительно, непосредственно этот список в программе редактировать нельзя, но у него есть метод, позволяющий добавить новые строки или удалить старые. Рекомендуется прочитать описания к точкам компонента, а затем уже смотреть следующий код.
Как вы, наверное, догадались, событие onEnter поля происходит после нажатия кнопки Enter. Причём в поток выдаётся введённая в поле строка. А метод doAdd списка строк как раз добавляет новую строку и берёт её текст из потока (правда, есть возможность и с верхней точки данных).
Удаление реализуем посложнее. Дело в том, что для удаления нужно вызвать метод doDelete, передав ему в потоке индекс (номер) удаляемой строки (Внимание! Нумерация строк в подобных списках начинается с нуля, поэтому индекс первой строки - 0!).
Мы сделаем так, чтобы удалялась выделенная строка. Но для этого нужно знать её индекс. Этот индекс хранится в свойстве Index, а соответствующую точку можно вызвать со вкладки "точки" на панели параметров.
Возникает лишь вопрос, как передать информацию из нижней точки на левую точку, ведь соединить их невозможно...
Но тут нам поможет ещё неизвестный вам компонент DoData, который находится на вкладке "инструменты" панели компонентов. Общая реализация такова.
Кнопка поадёт сигнал на метод компонента DoData, который заносит информацию с верхней точки в поток. А верхняя точка как раз подключена к свойству Index списка строк. Ну и после этого у DoData срабатывает событие onEventData, в котором выдаётся полученная информация. Её уже можно подавать на точку doDelete, что мы и сделали.
Однако у нас так и нет способа изменять уже введнную строку в компоненте. И сейчас мы познакомимся с ещё одним новым компонентом, для работы с массивами. Ведь список строк - это типичный массив строк. И для таких массивов есть компонент на вкладке "массивы" - ArrayRW.
Ставим этот компонент на рабочее поле HiAsm и смотрим на точки свойств списка строк - там есть точка Array. Её нужно подключить к точке данных Array компонента ArrayRW. А дальше - пользоваться методами этого компонента!
Вот, посмотрите, что получилось.
При нажатии кнопки "Прочитать" в поток выдаётся выделенная строка. Почему выделенная - потому, что за индекс строки для работы ArrayRW отвечает точка данных Index, которая подключена к свойству списка Index, хранящему индекс выделенной строки.
Редактирование производится так же просто. При выборе строки в списке возникает событие onClick. В поток оно может выдавать либо индекс выделенной строки, либо её текст - это зависит от параметра DataType списка строк. Строка устанавливается в поле ввода, а при его редактировании в массив сразу идёт запись.
У списка строк ещё много интересных методов и параметров, поэкспериментируйте с ними самостоятельно.
понедельник, 14 сентября 2009 г.
Подписаться на:
Комментарии к сообщению (Atom)
Видеоурок на примере списка строк знакомит с точками, характерными для многих компонентов интерфейса.
ОтветитьУдалитьВопрос. Сделал программу "Из юнг - в капитаны",
Но почему-то в ней не удается задать цвет кнопки "Да!". Проверял на 2 версиях HiAsn - нигде синий цвет кнопки не виден.
Кнопка с картинкой окрашивается, а обычная кнопка - нет.
Add(ListBox,982969,182,105)
{
Left=10
Top=10
Width=205
Height=455
Transparent=0
Strings=#15:Надо-надо-надо |17:Всюду-всюду-всюду|15:Надо-надо-надо |16:Надо верить чуду|15:Говорите всюду |17:Всюду-всюду-всюду|19:Вместо буду или нет|
}
Add(Button,11671105,91,105)
{
Left=275
Top=55
Color=16711680
Caption="Да!"
Data=String(БУДУ)
link(onClick,982969:doAdd,[])
}
Add(Label,9438236,91,49)
{
Left=235
Top=15
Width=137
Height=17
Caption="Хочешь стать капитаном?"
}
Add(BitBtn,10356534,91,147)
{
Left=265
Top=155
Width=80
Color=65535
Caption="Ну, не знаю..."
link(onClick,982969:doClear,[(153,153)(153,118)])
}
Add(Label,9607642,140,49)
{
Left=220
Top=85
Width=193
Height=17
Caption="Жми столько раз, насколько сильно"
}
Add(Label,8427203,189,49)
{
Left=225
Top=188
Width=160
Caption="Жми и смотри, что получится"
}
Стандартнай кнопка, наверное, единственный компонент, который не поддерживает изменение цвета. Так задано в самой операционной системе Windows, и это не изменить. Пользуйтесь другой кнопкой.
ОтветитьУдалить