Forth http://fforum.winglion.ru/ |
|
Особенности работы WinLib by ~yz+~ygrek http://fforum.winglion.ru/viewtopic.php?f=18&t=644 |
Страница 1 из 4 |
Автор: | in4 [ Вт апр 03, 2007 01:13 ] |
Заголовок сообщения: | Особенности работы WinLib by ~yz+~ygrek |
Почему-то рамка пересекает окошко edit-а Код: DIS-OPT \ для SPF ниже 4.10 под NT
REQUIRE toolbar ~yz/lib/wincc.f SET-OPT : b BYE ; : edit-resize { n ctl -- } \ размер поля ввода по максимальному числу символов n ctl limit-edit " W" ctl text-size SWAP n * 6 + SWAP 6 + ctl resize ; 0 VALUE g : make-grids GRID -boxed \ пересекает поле \ GRID -bevel \ выглядит нормально edit 15 this edit-resize | GRID; TO g GRID " Текст1" label | g | " Текст2" label | GRID; winmain -grid! ; : run WINDOWS... 0 dialog-window TO winmain " Пример глюка -boxed" winmain -text! make-grids winmain wincenter winmain winshow ...WINDOWS BYE ; run BYE Раньше рамки рисовались нормально, но в коде сделано много изменений Как бы еще сделать аналоги -bevel, чтоб была рамочка выпуклая, одноцветная и др. варианты? |
Автор: | ygrek [ Вт апр 03, 2007 19:17 ] |
Заголовок сообщения: | |
как временное решение - заменить в файле winctl.f строку Код: ym 2/ - SWAP xm 2/ - SWAP R> another-place на Код: ym 2/ - 4 - SWAP xm 2/ - SWAP R> another-place
но это сдвигает bevel Получается разное смещение за счёт того что bevel реализовано как кнопка, а boxed как static контрол. надо экспериментировать. |
Автор: | ygrek [ Ср апр 25, 2007 22:05 ] |
Заголовок сообщения: | |
Можно ещё так обходить - в начале сетки которая -boxed ставить пустой ряд Код: "" label |
=== |
Автор: | Гость [ Пн июн 04, 2007 15:01 ] |
Заголовок сообщения: | |
Набросал небольшой интерфейс на WinLib. И возникли некоторые вопросы 1. Что добавить, чтобы содержание формы при начальном отображении соответствовало заложенному. ( пока только через шаманство на форме после ее отображения.) 2. Как можно улучшить взаимопересчет элементов, например при движении сплиттера? 3. ... Код: DIS-OPT \ для версий ниже 4.00 build 10
REQUIRE WINDOWS... ~yz/lib/winlib.f REQUIRE button ~yz/lib/winctl.f REQUIRE toolbar ~yz/lib/wincc.f REQUIRE splitter ~yz/lib/splitter.f SET-OPT 0 VALUE win 0 VALUE win2 0 VALUE win3 0 VALUE times \ ----------------------------------- PROC: quit winmain W: wm_close ?send DROP PROC; PROC: hello " Привет!" msg PROC; WINAPI: SelectObject GDI32.DLL WINAPI: TextOutA GDI32.DLL PROC: paint times windc SelectObject DROP " Привет всем!" ASCIIZ> SWAP 0 0 windc TextOutA DROP PROC; \ Вложенное меню MENU: inner hello MENUITEM Тоже привет MENU; \ Основное меню MENU: filemenu hello MENUITEM &Привет\tF5 inner SUBMENU &Вложенное меню ' NOOP DISABLED MENUITEM Отключено LINE quit MENUITEM &Quit\tAlt-X MENU; MENU: mainmenu filemenu SUBMENU Файл MENU; \ ------------------------------------- MESSAGES: my M: wm_contextmenu filemenu lparam LOWORD lparam HIWORD show-menu TRUE M; WINAPI: WinHelpA USER32.DLL M: wm_help 0 W: help_helponhelp 0 winmain -hwnd@ WinHelpA DROP M; MESSAGES; \ ------------------------------------- \ Таблица быстрых клавиш KEYTABLE hello ONKEY vk_f5 quit ONKEY alt+X KEYTABLE; 0 VALUE t 0 VALUE hd 0 VALUE tv 0 VALUE lv WINAPI: ImageList_Create COMCTL32.DLL WINAPI: ImageList_ReplaceIcon COMCTL32.DLL WINAPI: ImageList_GetImageCount COMCTL32.DLL : create-il ( size -- il ) >R 5 5 W: ilc_color8 R> DUP ImageList_Create ; : add-icon ( resno il -- ) >R IMAGE-BASE LoadIconA -1 R> ImageList_ReplaceIcon DROP ; WINAPI: FindFirstFileA KERNEL32.DLL WINAPI: FindNextFileA KERNEL32.DLL WINAPI: FindClose KERNEL32.DLL : fill-listview { \ no fh [ 400 ] fdata } 32 create-il DUP 1 SWAP add-icon W: lvsil_normal lv -imagelist! 16 create-il DUP 1 SWAP add-icon W: lvsil_small lv -imagelist! " Имя файла" 0 0 lv add-column " Размер" 1 1 lv add-column fdata " *.f" FindFirstFileA TO fh BEGIN fdata 11 CELLS + 0 0 lv add-item \ следующий фокус с вечно нулевым последним подъэлементом не проходит, \ когда включена автосортировка: номера конкретной иконки все время меняются \ тогда надо запоминать уникальный param и пользоваться lv-param>i fdata 8 CELLS@ S>D <# 0 HOLD #S #> DROP 0 1 lv -isubitem! fdata fh FindNextFileA 0= UNTIL fh FindClose DROP ; : fill-header,treeview 0 " Имя" none 0 0 hd add-item 0 " Фамилия" none 0 1 hd add-item 0 " Отчество" none 0 2 hd add-item 90 0 hd -iwidth! 100 1 hd -iwidth! 100 2 hd -iwidth! \ 16 create-il DUP 1 SWAP add-icon 0 tv -imagelist! " yz" 0 0 0 W: tvi_first 0 tv add-item >R " prog" 0 0 0 W: tvi_first R> tv add-item >R " winlib" 0 0 0 W: tvi_first R> tv add-item >R " winlib-example" 0 0 0 W: tvi_last R@ tv add-item DROP " winctl-example" 0 0 0 W: tvi_last R@ tv add-item DROP " wincc-example" 0 0 0 W: tvi_last R> tv add-item DROP ; : make-tabs ( -- tab) 0 tabcontrol 16 create-il DUP 1 SWAP add-icon 0 this -imagelist! \ Вкладка 1 =========================== GRID === " Индикатор:" label | === progress -xspan 60 this +pos! " Это пример индикатора" this -tooltip! | === " Ползунок: " label | === W: tbs_autoticks trackbar -xspan 80 this -pos! " А вот ползунок" this -tooltip! | === " Строка ввода со спином:" label | === edit -xspan " 40" this -text! W: uds_setbuddyint this add-updown " А это просто строка" this -tooltip! | GRID; " Первая" 0 0 this add-item \ Вкладка 2 ========================== GRID 0 header DUP TO hd -xspan -yfixed | === (* tvs_haslines tvs_linesatroot tvs_hasbuttons *) treeview DUP TO tv 150 200 this ctlresize | 0 calendar -xfixed | fill-header,treeview GRID; " Вторая" 0 1 this add-item \ Вкладка 3 ======================== GRID 0 listview DUP TO lv -xspan -yspan fill-listview | GRID; " Третья" 0 2 this add-item ; PROC: tbutt " Кнопка на панели инструментов!" msg PROC; PROC: mode1 lv icon-view PROC; PROC: mode2 lv smallicon-view PROC; PROC: mode3 lv list-view PROC; PROC: mode4 lv report-view PROC; : make-toolbar 0 winmain create-toolbar W: idb_view_small_color winmain -toolbar@ add-std-bitmap DROP none 0 W: btns_button mode1 0 winmain -toolbar@ add-item none 1 W: btns_button mode2 1 winmain -toolbar@ add-item none 2 W: btns_button mode3 2 winmain -toolbar@ add-item none 3 W: btns_button mode4 3 winmain -toolbar@ add-item winmain -toolbar@ separate none 4 W: btns_wholedropdown tbutt 4 winmain -toolbar@ add-item none 5 W: btns_button tbutt 5 winmain -toolbar@ add-item ; WINAPI: CreateHatchBrush GDI32.DLL : run WINDOWS... \ 0 - нет родительского окна 0 create-window TO win \ Объявим главное окно, при закрытии которого программа завершится win TO winmain win create-tooltip make-toolbar GRID GRID multiedit -xspan -yspan | GRID; GRID make-toolbar GRID make-tabs -xspan -yspan | GRID; GRID win dialog-window TO win2 GRID; hsplitter 0 -xmargin 0 -ymargin -xspan -yspan | GRID; splitter 0 -xmargin 0 -ymargin -xspan -yspan | GRID; winmain -grid! \ заголовки окон " Пример окна верхнего уровня" win -text! " Дочернее окно" win2 -text! \ размер и положение дочернего окна 100 100 win2 winresize 100 100 win2 winmove \ цвет дочернего окна win2 -bgbrush@ DeleteObject DROP blue >bgr W: hs_bdiagonal CreateHatchBrush win2 -bgbrush! \ добавить меню к основному окну mainmenu win attach-menubar \ создать шрифт " Times New Roman Cyr" 36 bold italic create-font TO times \ установить процедуру отрисовки окна paint win -painter! \ установить наш обработчик сообщений my win -wndproc! \ показать окна, поскольку по умолчанию они невидимые win wincenter win winshow win2 wincenter win2 winshow ...WINDOWS ." Программа завершилась" times delete-font BYE ; \ 0 TO SPF-INIT? ' ANSI>OEM TO ANSI><OEM \ TRUE TO ?GUI \ ' run MAINX ! \ S" winlib-example.exe" SAVE run BYE |
Автор: | in4 [ Вт июн 05, 2007 13:18 ] |
Заголовок сообщения: | |
Гость писал(а): 1. Что добавить, чтобы содержание формы при начальном отображении соответствовало заложенному. ( пока только через шаманство на форме после ее отображения.) Можно поподробнее? Что хочется сделать и что именно работает не так? Желательно выделить для примера только то, что иллюстирует проблему. В библиотеке для ячейки сетки предусмотрено еще несколько настроек. Может, нужно использовать какие-то из них? Гость писал(а): 2. Как можно улучшить взаимопересчет элементов, например при движении сплиттера? Работа сплиттера будет улучшена. Иллюстрирующие примеры переданы автору. Гость писал(а): 3. ...
Пример запустил. Видны части кода демо из библиотеки. А что должно быть? |
Автор: | Гость [ Вт июн 05, 2007 16:08 ] |
Заголовок сообщения: | |
Гость писал(а): 3. ... Пример запустил. Видны части кода демо из библиотеки. А что должно быть?[/quote] Для начала можно попробовать погонять элементы управления. Например свернуть развернуть на полный экран и к исходному размеру. Элементами настройки не удалось вывести форму, чтобы таб панель выравнивалась по верху и горизонтальный сплиттер был виден. Хотя при работе с ней она может принять соответствующее ей положение. Как правильнее сформировать структуру окон, чтобы фоновая надпись основного окна не влияла на контроллы верхнего слоя? Хочется, чтобы активная область основного окна не наползала на кнопки находящиеся ниже меню. На первой вкладке слово индикатор становится именем закладки. Сами вкладки возникают в рабочем поле, а могли быть небольшими полосками при активизации небольшими полосками над областью табов. Примерно так, возможно сказанное легко реализуется или объясняется. P.S. Глюк вызванный искажением подсказок связан с моим неправильным способом их создания:) Использование атрибута -bevel тоже как то ни так. Не видно эффекта применения команд изменения размера к главному окну. Можно сделать, чтобы вкладки табулов находились на уровне кнопок. при задании соответствующей сетки. Спасибо за взаимодействие с ~yz. |
Автор: | Гость [ Вт июн 05, 2007 16:19 ] |
Заголовок сообщения: | |
Одно из пожеланий добавить в библиотечку опции рисования точками, линиями из разработки ~yz пакетного редактора ged. и отслеживания текущих мышинных координат в окне. |
Автор: | Гость [ Вт июн 05, 2007 16:32 ] |
Заголовок сообщения: | |
Еще на приводимом примере можно попробовать обменять местами табы и окно редактирования. У меня наблюдалась нестабильность в работе при попытке изменения размера окна. |
Автор: | yz [ Вт июн 05, 2007 18:46 ] |
Заголовок сообщения: | |
Anonymous писал(а): Одно из пожеланий добавить в библиотечку
опции рисования точками, линиями из разработки ~yz пакетного редактора ged. и отслеживания текущих мышинных координат в окне. Вы имеете в виду рисование границ? Это не так просто, как кажется. Для этого надо полностью выкидывать отрисовку элементов системой и рисовать их самому. Координаты мыши отслеживаются перехватом сообщения WM_MOUSEMOVE. |
Автор: | in4 [ Вт июн 05, 2007 18:48 ] |
Заголовок сообщения: | |
Надеюсь, документация прочитана... Внимательно прочитана. Гость писал(а): Для начала можно попробовать погонять элементы управления. Элементы не могут быть меньше минимального размера(обычно, но есть способы ). Этот размер определяется при создании.Например свернуть развернуть на полный экран и к исходному размеру. -xfixed -yfixed -xspan -yspan (/ -size 300 100 /) Гость писал(а): Элементами настройки не удалось вывести форму, чтобы таб панель выравнивалась по верху и горизонтальный сплиттер был виден. Хотя при работе с ней она может принять соответствующее ей положение. Это проблемы сплиттера. Будет исправлено. Гость писал(а): Как правильнее сформировать структуру окон, чтобы фоновая надпись основного окна не влияла на контроллы верхнего слоя? Хочется, чтобы активная область основного окна не наползала на кнопки находящиеся ниже меню. Я не использую фоновую надпись, использую label . По-видимому при ее использовании нужно учитывать и размер toolbar-а А зачем она нужна? Просто интересно... Ее ведь все равно закроют контролы сеток... Гость писал(а): На первой вкладке слово индикатор становится именем закладки. Сами вкладки возникают в рабочем поле, а могли быть небольшими полосками при активизации небольшими полосками над областью табов. А это как по иерархии. Если табы внутри сетки, а тулбар для всего окна - то все правильно Или надо чтоб тулбав был в табах? Это надо сделать по-другому, но я так еще не пробовал... Гость писал(а): Использование атрибута -bevel тоже как то ни так. Автору сообщено. Проблема появиласть при изменении версий. Изучаем, исправим... Гость писал(а): Не видно эффекта применения команд изменения размера к главному окну. У меня - работает. Но задаваемый размер д.б. больше минимального размера элементов. Иначе эффекта действительно не будет видно. Гость писал(а): Можно сделать, чтобы вкладки табулов находились на уровне кнопок. при задании соответствующей сетки. не понял, можно примерчик... или небольшой иллюстрирующий рисунок (скриншот, где такое есть)? Гость писал(а): Одно из пожеланий добавить в библиотечку опции рисования точками, линиями из разработки ~yz пакетного редактора ged. и отслеживания текущих мышинных координат в окне. есть прямоугольники. Мало? Мышиные координаты отслеживать-то можно, но зачем? Для взаимодействия с контролами простого отслеживания недостаточно. Надо для графического редактора? Тогда лучше сообщением или процедурой. Думаю, что смог бы сделать вызов заданного PROC из обработчика событий мышки. Похожее для другой цели уже сделал. Можно поподробнее, что именно требуется? А если будет известно, для чего, м. м.б. сделать аналог другими средствами... Гость писал(а): Еще на приводимом примере можно попробовать обменять местами
табы и окно редактирования. У меня наблюдалась нестабильность в работе при попытке изменения размера окна. Я стараюсь делать минимальные примеры, где видно проблему. Они же будут тестами при проведении изменений. Рекомендую поступать так же. Тут многие жаловались на отсутствие телепатических способностей... |
Автор: | yz [ Вт июн 05, 2007 21:14 ] |
Заголовок сообщения: | |
Anonymous писал(а): Как правильнее сформировать структуру окон, чтобы фоновая надпись
основного окна не влияла на контроллы верхнего слоя? Выводите фоновую надпись в обработчике -paint основного окна. Тогда контролы будут всегда поверх нее. |
Автор: | Гость [ Ср июн 06, 2007 08:55 ] |
Заголовок сообщения: | |
yz писал(а): Anonymous писал(а): Как правильнее сформировать структуру окон, чтобы фоновая надпись основного окна не влияла на контроллы верхнего слоя? Выводите фоновую надпись в обработчике -paint основного окна. Тогда контролы будут всегда поверх нее. Так вроде и делается. P.S. Где можно будет взять исправленный splitter и посмотреть тестовый пример? У меня splitter на полном экране сильно тормозит и не отрисовывается основное изображение пока он перемещается. |
Автор: | in4 [ Ср июн 06, 2007 13:41 ] |
Заголовок сообщения: | |
Гость писал(а): P.S. Где можно будет взять исправленный splitter и посмотреть тестовый пример?
У меня splitter на полном экране сильно тормозит и не отрисовывается основное изображение пока он перемещается. Это связано со сложностью разделяемых сплиттером сеток. У меня на более простых сетках получше. М. надо бы использовать не "честное" изображение, а картинку? |
Автор: | Гость [ Ср июн 06, 2007 14:27 ] |
Заголовок сообщения: | |
in4 писал(а): Это связано со сложностью разделяемых сплиттером сеток. У меня на более простых сетках получше. М. надо бы использовать не "честное" изображение, а картинку?
А как отрабатывает сплиттер у ~day в библиотеке wfl? Пробую перехватывать сообщение мышки для отрисовки ее перемещения по рабочему полю в нажатом состоянии и еще не получилось. Как это более правильно сделать? Нужно для перемещения рисунка схемы по рабочей области окна. P.S. C вертикальным сплиттером заметил особенность в текущем своем тесте что если его дернуть то контролы выравниваются. Может это происходит при использовании force-redraw. У меня при попытке скрыть вертикальный сплиттер, по нажатию кнопки, интерфейс вылетает. С горизонтальным такое не происходит. По кнопке включаю/выключаю отображение контролов на рабочем поле. |
Автор: | in4 [ Ср июн 06, 2007 15:35 ] |
Заголовок сообщения: | |
Гость писал(а): Как это более правильно сделать?
Думаю, кое-что можно, используя что-то вроде: Код: MESSAGES: wmes
M: wm_mousemove { | x y } lparam LOWORD TO x lparam HIWORD TO y ... M; ... MESSAGES; ... wmes winmain -wndproc! ... А желательно сделать простейший пример, к-й сразу можно запустить и который показывает, что надо. Удобнее будет и добавлять, и хорошая иллюстрация используемых техник... |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |