Исходники компонента для выбора файла OpenDialog залиты на SVN ревизия 1219. Лицензия подобна лицензии BSD. По сути это отдельная программа, которая запускается с передачей параметра - указатель на именованную область, предварительно выделенную функцией 68.22. Большая часть обслуживающего кода, подключаемого к инициирующей программе, расположена в макросе opendial.mac. В принципе подключение к программам написанным на ассемблере будет несложным, насчет других языков ничего не могу сказать, возможно придется написать код подобный содержащемуся в макросе.
Исходники элемента управления FileBrowser и доработанного MenuBar (активация клавиатурой) были залиты еще раньше.
Поскольку OpenDialog использует иконки в формате PNG (в принципе можно и другие форматы, но нужно подключать код ответственный за распаковку изображения в RAW), то в ближайшее время в теме Проект: Полноценный графический просмотрщик будут выложены исходники 4-х модулей распаковки изображений, под лицензией подобной лицензии BSD.
З.Ы. По всем вопросам связанным с применением кода постараюсь ответить и помочь с внедрением OpenDialog, если найдутся желающие этим заниматься, однако на вопросы в стиле "докопайся до столба" отвечать не хочу, так что просьба к "шибко грамотным" таких вопросов не задавать.
box_lib.obj - библиотека gui компонентов
SVN ревизия 1227 - убраны лишние перерисовки при обработке события мыши для компонента OptionBox.
Новую тему создавать не хотел, потому пишу здесь. Появилась идея сделать элемент(ы) TreeList, IconList и ListBox - все в одном элементе. Документации пока нет никакой, и много чего еще не сделано. Что у меня получилось можно посмотреть в файле.
- Attachments
-
-
tl_09_11_04.7z (18.3 KiB)Downloaded 331 times
-
IgorA
Посмотрел - выглядит хорошо, только вопрос возник - будешь прикручивать к Box_Lib или отдельной библиотекой?
В принципе прикручивание к Box_Lib ничем не ограничено, кроме формата вызова - надо с вызовом функции ложить в стек указатель на блок данных, ну и желательно, чтобы все переменные сохранялись в этом блоке, для полной реентерабельности компонента.
Посмотрел - выглядит хорошо, только вопрос возник - будешь прикручивать к Box_Lib или отдельной библиотекой?
В принципе прикручивание к Box_Lib ничем не ограничено, кроме формата вызова - надо с вызовом функции ложить в стек указатель на блок данных, ну и желательно, чтобы все переменные сохранялись в этом блоке, для полной реентерабельности компонента.
Думаю можно прикрутить, отдельной библиотекой смысла нету, ведь Box_Lib создавалась для элементов управления.Mario wrote:только вопрос возник - будешь прикручивать к Box_Lib или отдельной библиотекой?
Так и стараюсь делать, есть внутренние функции, которые не для экспорта, они это условие нарушают, например:Mario wrote:прикручивание к Box_Lib ничем не ограничено, кроме формата вызова - надо с вызовом функции ложить в стек указатель на блок данных, ну и желательно, чтобы все переменные сохранялись в этом блоке, для полной реентерабельности компонента
Code: Select all
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
align 4
tl_iterat_next:Я правда не понял, как определяется элемент в фокусе, с учетом реентерабельности библиотеки ? Если в библиотеку тулить указатель на элемент в фокусе, то библиотека не будет реентерабельной. А если указатель на элемент в фокусе вставить в саму структуру элемента, то как избежать ситуации, при которой несколько элементов могут оказаться в фокусе ? Этот вопрос и мешает сделать реакцию элемента на кнопки, мышь ... А использовать скролинг без прикручивания к Box_Lib тоже нормально не получится.
IgorA
Внутренние функции на усмотрение программиста (на то они и внутренние), главное соблюсти правильную передачу параметров между библиотекой и приложением.Так и стараюсь делать, есть внутренние функции, которые не для экспорта, они это условие нарушают, например:
Элементы не обязаны учитывать переключение фокуса. Этим занимается дополнительный код за пределами библиотеки. Элемент лишь должен иметь код, который за счет изменения флага в структуре данных, позволяет считать его активным или не активным, по внешним признакам для пользователя (отсутствие или наличие курсора, отсутствие или наличие подсветки).А если указатель на элемент в фокусе вставить в саму структуру элемента, то как избежать ситуации, при которой несколько элементов могут оказаться в фокусе ?
Идеология Box_Lib такова, что все компоненты являются независимыми и базовыми, более сложные компоненты создаются кодом за пределами библиотеки, за счет комбинирования этих базовых элементов.А использовать скролинг без прикручивания к Box_Lib тоже нормально не получится.
немного изменил элемент:
1) добавил функцию клавиатуру (управление курсорами и пробел)
2) добавил текстовые подписи к узлам
3) при нажатии пробела происходит открытие/раскрытие родительских узлов (стрелка должна стоять на узле, который открывается)
4) исправил 2 ошибки в коде
1) добавил функцию клавиатуру (управление курсорами и пробел)
2) добавил текстовые подписи к узлам
3) при нажатии пробела происходит открытие/раскрытие родительских узлов (стрелка должна стоять на узле, который открывается)
4) исправил 2 ошибки в коде
- Attachments
-
-
tl_09_11_05.7z (19.67 KiB)
- версия от 5.11.09
Downloaded 254 times
-
Поскольку лог на сайте не обновляется с ревизии 1233 (Nobody cares? Надоело мне владельца ресурса выискивать и сообщать о каждой поломке), то отписываю здесь.
Ревизии 1243, 1244, 1248:
1) Исправления компонента FileBrowser
2) OpenDialog: для вывода пути используется EditBox, переключение между элементами FileBrowser и EditBox клавишей Tab и кликами мышки, поправлена сортировка, иконки от Leency, дополнительные ассоциации по типам файлов к иконкам.
Ревизии 1243, 1244, 1248:
1) Исправления компонента FileBrowser
2) OpenDialog: для вывода пути используется EditBox, переключение между элементами FileBrowser и EditBox клавишей Tab и кликами мышки, поправлена сортировка, иконки от Leency, дополнительные ассоциации по типам файлов к иконкам.
Обновил элемент Tree List : добавил функцию на мышь, обновил и добавил другие функции.
Из значительных доработок осталось добавить скролинг. Следущую версию наверное встрою внутрь box_lib .
Из значительных доработок осталось добавить скролинг. Следущую версию наверное встрою внутрь box_lib .
- Attachments
-
-
tl_09_11_09.7z (29.67 KiB)Downloaded 311 times
-
IgorA
Bugreport:
1) Уход стрелки за пределы своего поля.
2) Стрелка не должна перемещаться дальше в пределах поля на не определенную область.
3) Доработать перерисовку. Сейчас при перемещении мышки, происходит перерисовка всего поля.
4) Запускаем приложение, удаляем все символы из edit_box. Пробуем вставить пустой Node. Все ок, возвращаемся в edit_box пишем "123456789" а Node вставляется со значением "56789". Это явно баг.
5) Я отметил на рисунке желтым кругом, как я считаю стоит доработать элемент. Наличие подобных связей лучше просматривается в при увеличении кол-ва элементов.
6) Возможно стоит попросить Линси или другого дизайнера представить концепцию программы.
Все выше это мое мнение (imho).
Bugreport:
1) Уход стрелки за пределы своего поля.
2) Стрелка не должна перемещаться дальше в пределах поля на не определенную область.
3) Доработать перерисовку. Сейчас при перемещении мышки, происходит перерисовка всего поля.
4) Запускаем приложение, удаляем все символы из edit_box. Пробуем вставить пустой Node. Все ок, возвращаемся в edit_box пишем "123456789" а Node вставляется со значением "56789". Это явно баг.
5) Я отметил на рисунке желтым кругом, как я считаю стоит доработать элемент. Наличие подобных связей лучше просматривается в при увеличении кол-ва элементов.
6) Возможно стоит попросить Линси или другого дизайнера представить концепцию программы.
Все выше это мое мнение (imho).
- Attachments
-
-
bug3.PNG (6.18 KiB)Viewed 7293 times
-
bug2.PNG (6.25 KiB)Viewed 7297 times
-
bug1.PNG (6.33 KiB)Viewed 7307 times
<Lrz>
Согласен с тобой, а по поводу 4-го расскажу почему так :
---
info_size - размер байт на каждый узел (пользовательская память + подпись).
info_capt_offs - параметр, указывает сколько байт из info_size брать для пользовательских нужд. Если он = 0 то весь текст из editbox будет на экране.
---
Может смутить и то что info_size типа dw, а info_capt_offs - dd, но info_capt_offs типа dd для удобства написания функций, его значение не должно быть больше чем dw.
Согласен с тобой, а по поводу 4-го расскажу почему так :
В виндовсе у каждого узла есть свойство ItemData = 4 байта (длинное целое), оно служит для связи узла с какими либо другими объектами в программе. Я сделал так, что на каждый узел можно выделять произвольное количество байт для хранения пользовательской информации. Т. е. цифры "1234" из твоего примера не печатаются не случайно, они могут быть каким либо указателем на объект, функцию или индексом какой либо структуры, все зависит от того как пользователь решить использовать эту "не печатаемую" память.<Lrz> wrote:4) Запускаем приложение, удаляем все символы из edit_box. Пробуем вставить пустой Node. Все ок, возвращаемся в edit_box пишем "123456789" а Node вставляется со значением "56789". Это явно баг.
---
info_size - размер байт на каждый узел (пользовательская память + подпись).
info_capt_offs - параметр, указывает сколько байт из info_size брать для пользовательских нужд. Если он = 0 то весь текст из editbox будет на экране.
---
Может смутить и то что info_size типа dw, а info_capt_offs - dd, но info_capt_offs типа dd для удобства написания функций, его значение не должно быть больше чем dw.
Сделал 4 примера использования TreeList, код элемента и описание функций на svn. На svn много папок не знаю куда добавить примеры, потому пока ложу на форум.
- Attachments
-
-
tree_example.7z (17.18 KiB)
- 4 примера использования TreeList с разными стилями и параметрами
Downloaded 282 times
-
Немного обновил примеры с учетом изменений элемента на svn (rev 1309) . Добавил 1 пример на использование функций tl_load_mem и tl_save_mem (работа с памятью).
Говорил сегодня с <Lrz> решили реорганизовать библиотеку box_lib.obj для решения некоторых проблем.
Добавил новый файл box_lib.mac который должен будет заменить файл editbox_ex.mac. Устранил дублирование программного кода в макросах. Изменения облегчат написание программ за счет усовершенствования логики построения библиотеки.
Добавил новый файл box_lib.mac который должен будет заменить файл editbox_ex.mac. Устранил дублирование программного кода в макросах. Изменения облегчат написание программ за счет усовершенствования логики построения библиотеки.
Почему-то не работает ctrldemo 
Собираю так - fasm 1.68, исходники из SVN, а именно:
ctrldemo.asm
load_lib.mac
opendial.mac
data.inc
w_about.inc
компилируется без проблем, 3898 байт.
Из дистрибутива 0.7.7.0 не запускается, ничего не выводя. На доске в Kernel:
Page fault
EAX B08
EBX A000
ECX 0
EDX 10022058
ESI AC8
EDI 0
EBP E18
EIP 1002C022
ESP 00001712
Flags: 1246
CS: 1B (application)
destroy app object
В KlbrInWin выдает - "Недостаточно памяти"
Если убрать какую-то из библиотек с законного места, не падает, а выдает сообщение об ошибке, как положено - "Файл не найден".
По всей видимости, я что-то упускаю?
Собираю так - fasm 1.68, исходники из SVN, а именно:
ctrldemo.asm
load_lib.mac
opendial.mac
data.inc
w_about.inc
компилируется без проблем, 3898 байт.
Из дистрибутива 0.7.7.0 не запускается, ничего не выводя. На доске в Kernel:
Page fault
EAX B08
EBX A000
ECX 0
EDX 10022058
ESI AC8
EDI 0
EBP E18
EIP 1002C022
ESP 00001712
Flags: 1246
CS: 1B (application)
destroy app object
В KlbrInWin выдает - "Недостаточно памяти"
Если убрать какую-то из библиотек с законного места, не падает, а выдает сообщение об ошибке, как положено - "Файл не найден".
По всей видимости, я что-то упускаю?
Who is online
Users browsing this forum: No registered users and 4 guests