Quick Controls Manual - быстрое руководство пользователя.
Итак, что мы имеем...
На данный момоент (5.1.05) имеем пока что 4 основных компоненты, которые более менее функционируют
TEditBox (sample.asm) - текстовое поле ввода
TProgressBax (progress.inc) - вывод % соотноешения в виде прямоугольника .. :)
(привык так называт - "прогресс" да и все)
TButton (buttons.inc) - кнопка, которая автоматичеки задает ID, выводит
текст по центру и прочее
TLabel (stdctrls.inc кажется ..) - вывод текста ...
над чем работаю (в ближайшем будущем)
TScrollBar - ну и так ясно, скроллбар...
TCheckBox - флажок
что ещё осталось
TEditBox - работа с текстом... текст выводится, а вот с вводом придётся ещё поработать
(внутренний буффер, удаление, вставка...) + некоторые баги (просчёт координат)
TButton - всё работает более менее, за искючением что алгоритм вывода текста (центрирования)
надо переделать ибо на малых размерх наблюдаются заметные смещения текста
Если вы рылись в исходничках, то видели что всё реализовано в виде структур...
Мне этот механизм намного удобнее нежели юзать макросы... в идеале было бы работать с обьектами,
но в фасме я онных не наблюдал... если кто то переделает контролы для работы в динамичекой памяти
это было бы очень здорово
каждый котнрол описывается как переменная с начальными параметрами (которые можно задать нулями)
например
Text1 TEditBox 0,0,0
Text2 TEditBox 100,200,40
100-X,200-Y,40-количество отображаемых в боксе символов (пока что так...)
в случае Text1 начальные данные можно внести до вызова конструктора
mov [Text1.X],100
mov [Text1.Y],200
mov [Text1.Count],30
и вызываем конструктор, который вызывает прорисовку компонента
call Text1.Create
Все, компонент на форме...
для того что бы произвести ввод текста вызывается метод .Enter
call Text1.Enter
при этом будет производиться ввод с клавы до тех пор, пока не будет потерян фокус ввода
call Text1.CheckFocus
cmp [Text1.isFocus],1
jz фокус потерян
вывести строку для редактирования можно методом .SetValue
mov edx,stringToEdit
mov [Text1.Text],edx
call Text1.SetValue
а получить введёную строку
call Text1.GetValue
строка хранится по адресу Text1.Text
следует заметить что использутся ASCIIZ строки..
(это следует учитывать при использовании всех компонентов... моих по крайней мере)
Более любопытные могут просмотреть исходник компоненты,
в частности метод .PrintChar, .BackSpace и ещё
методы работы с буффером - необходимо реализовать посимвольный ввод в буффер,
копирование, перемещение и т.д.
т.е. все основные операции, которые мы привыкли делать при вводе текста...
У меня пока на это мозгов не хватает :_)
Просто я разбираюсь с текстом походу изучения самого асма и написания
компонент, ессно по этому они ещё дико неоптимизированные..
Работа с остальными компонентами таже
В TButton добавлен деструктор, который затирает образ кнопки,
и её ID, освобождая данный ID для другой
копмоненты.
Это пока что всё... Со дня на день постараюсь выложить более подробное описание
(Вобщем концепция взята из Делфи...)
С ув. FreGL (Kharkov,Ukraine) АСЯ # 166399000