Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср мар 27, 2024 09:12

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Особенности работы WinLib by ~yz+~ygrek
СообщениеДобавлено: Вт апр 03, 2007 01:13 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Почему-то рамка пересекает окошко 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, чтоб была рамочка выпуклая, одноцветная и др. варианты?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 03, 2007 19:17 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
как временное решение - заменить в файле 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 контрол. надо экспериментировать.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 25, 2007 22:05 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Можно ещё так обходить - в начале сетки которая -boxed ставить пустой ряд
Код:
"" label |
===

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 13:18 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Гость писал(а):
1. Что добавить, чтобы содержание формы при начальном отображении соответствовало
заложенному. ( пока только через шаманство на форме после ее отображения.)

Можно поподробнее? Что хочется сделать и что именно работает не так?
Желательно выделить для примера только то, что иллюстирует проблему.

В библиотеке для ячейки сетки предусмотрено еще несколько настроек. Может, нужно использовать какие-то из них?
Гость писал(а):
2. Как можно улучшить взаимопересчет элементов, например при движении сплиттера?

Работа сплиттера будет улучшена. Иллюстрирующие примеры переданы автору. :)
Гость писал(а):
3. ...

Пример запустил. Видны части кода демо из библиотеки.
А что должно быть?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 16:08 
Гость писал(а):
3. ...

Пример запустил. Видны части кода демо из библиотеки.
А что должно быть?[/quote]
Для начала можно попробовать погонять элементы управления.
Например свернуть развернуть на полный экран и к исходному размеру.

Элементами настройки не удалось вывести форму, чтобы таб панель
выравнивалась по верху и горизонтальный сплиттер был виден.
Хотя при работе с ней она может принять соответствующее ей положение.

Как правильнее сформировать структуру окон, чтобы фоновая надпись
основного окна не влияла на контроллы верхнего слоя?

Хочется, чтобы активная область основного окна не наползала на кнопки
находящиеся ниже меню.

На первой вкладке слово индикатор становится именем закладки.
Сами вкладки возникают в рабочем поле, а могли быть небольшими полосками
при активизации небольшими полосками над областью табов.

Примерно так, возможно сказанное легко реализуется или объясняется.

P.S. Глюк вызванный искажением подсказок связан с моим неправильным
способом их создания:)
Использование атрибута -bevel тоже как то ни так.
Не видно эффекта применения команд изменения размера к главному окну.

Можно сделать, чтобы вкладки табулов находились на уровне кнопок.
при задании соответствующей сетки.

Спасибо за взаимодействие с ~yz.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 16:19 
Одно из пожеланий добавить в библиотечку
опции рисования точками, линиями из разработки ~yz
пакетного редактора ged. и отслеживания текущих мышинных координат в окне.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 16:32 
Еще на приводимом примере можно попробовать обменять местами
табы и окно редактирования.
У меня наблюдалась нестабильность в работе при попытке изменения
размера окна.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 18:46 
Не в сети

Зарегистрирован: Сб янв 27, 2007 22:00
Сообщения: 106
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Anonymous писал(а):
Одно из пожеланий добавить в библиотечку
опции рисования точками, линиями из разработки ~yz
пакетного редактора ged. и отслеживания текущих мышинных координат в окне.

Вы имеете в виду рисование границ? Это не так просто, как кажется. Для этого надо полностью выкидывать отрисовку элементов системой и рисовать их самому.

Координаты мыши отслеживаются перехватом сообщения WM_MOUSEMOVE.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 18:48 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Надеюсь, документация прочитана... ;) Внимательно прочитана. :)

Гость писал(а):
Для начала можно попробовать погонять элементы управления.
Например свернуть развернуть на полный экран и к исходному размеру.
Элементы не могут быть меньше минимального размера(обычно, но есть способы ;) ). Этот размер определяется при создании.
-xfixed -yfixed -xspan -yspan
(/ -size 300 100 /)
Гость писал(а):
Элементами настройки не удалось вывести форму, чтобы таб панель
выравнивалась по верху и горизонтальный сплиттер был виден.
Хотя при работе с ней она может принять соответствующее ей положение.

Это проблемы сплиттера. Будет исправлено.
Гость писал(а):
Как правильнее сформировать структуру окон, чтобы фоновая надпись
основного окна не влияла на контроллы верхнего слоя?
Хочется, чтобы активная область основного окна не наползала на кнопки
находящиеся ниже меню.

Я не использую фоновую надпись, использую label .
По-видимому при ее использовании нужно учитывать и размер toolbar-а
А зачем она нужна? Просто интересно... ;)
Ее ведь все равно закроют контролы сеток... ;)
Гость писал(а):
На первой вкладке слово индикатор становится именем закладки.
Сами вкладки возникают в рабочем поле, а могли быть небольшими полосками
при активизации небольшими полосками над областью табов.

А это как по иерархии. Если табы внутри сетки, а тулбар для всего окна - то все правильно ;)
Или надо чтоб тулбав был в табах? Это надо сделать по-другому, но я так еще не пробовал... :(
Гость писал(а):
Использование атрибута -bevel тоже как то ни так.

Автору сообщено. Проблема появиласть при изменении версий. Изучаем, исправим... ;)
Гость писал(а):
Не видно эффекта применения команд изменения размера к главному окну.

У меня - работает. Но задаваемый размер д.б. больше минимального размера элементов. Иначе эффекта действительно не будет видно.
Гость писал(а):
Можно сделать, чтобы вкладки табулов находились на уровне кнопок.
при задании соответствующей сетки.

не понял, можно примерчик... ;) или небольшой иллюстрирующий рисунок (скриншот, где такое есть)?
Гость писал(а):
Одно из пожеланий добавить в библиотечку
опции рисования точками, линиями из разработки ~yz
пакетного редактора ged. и отслеживания текущих мышинных координат в окне.

есть прямоугольники. Мало? ;)
Мышиные координаты отслеживать-то можно, но зачем? Для взаимодействия с контролами простого отслеживания недостаточно. :(
Надо для графического редактора?
Тогда лучше сообщением или процедурой. Думаю, что смог бы сделать вызов заданного PROC из обработчика событий мышки. Похожее для другой цели уже сделал. ;)
Можно поподробнее, что именно требуется? А если будет известно, для чего, м. м.б. сделать аналог другими средствами... ;)
Гость писал(а):
Еще на приводимом примере можно попробовать обменять местами
табы и окно редактирования.
У меня наблюдалась нестабильность в работе при попытке изменения
размера окна.

Я стараюсь делать минимальные примеры, где видно проблему. Они же будут тестами при проведении изменений. Рекомендую поступать так же. Тут многие жаловались на отсутствие телепатических способностей... :(

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 05, 2007 21:14 
Не в сети

Зарегистрирован: Сб янв 27, 2007 22:00
Сообщения: 106
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Anonymous писал(а):
Как правильнее сформировать структуру окон, чтобы фоновая надпись
основного окна не влияла на контроллы верхнего слоя?

Выводите фоновую надпись в обработчике -paint основного окна. Тогда контролы будут всегда поверх нее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 06, 2007 08:55 
yz писал(а):
Anonymous писал(а):
Как правильнее сформировать структуру окон, чтобы фоновая надпись
основного окна не влияла на контроллы верхнего слоя?

Выводите фоновую надпись в обработчике -paint основного окна. Тогда контролы будут всегда поверх нее.


Так вроде и делается.

P.S. Где можно будет взять исправленный splitter и посмотреть тестовый пример?
У меня splitter на полном экране сильно тормозит и не отрисовывается
основное изображение пока он перемещается.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 06, 2007 13:41 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Гость писал(а):
P.S. Где можно будет взять исправленный splitter и посмотреть тестовый пример?
У меня splitter на полном экране сильно тормозит и не отрисовывается
основное изображение пока он перемещается.

Это связано со сложностью разделяемых сплиттером сеток. У меня на более простых сетках получше.
М. надо бы использовать не "честное" изображение, а картинку?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 06, 2007 14:27 
in4 писал(а):
Это связано со сложностью разделяемых сплиттером сеток. У меня на более простых сетках получше. М. надо бы использовать не "честное" изображение, а картинку?


А как отрабатывает сплиттер у ~day в библиотеке wfl?

Пробую перехватывать сообщение мышки для отрисовки ее перемещения по
рабочему полю в нажатом состоянии и еще не получилось.
Как это более правильно сделать?
Нужно для перемещения рисунка схемы по рабочей области окна.

P.S. C вертикальным сплиттером заметил особенность в текущем своем тесте
что если его дернуть то контролы выравниваются. Может это происходит
при использовании force-redraw. У меня при попытке скрыть вертикальный
сплиттер, по нажатию кнопки, интерфейс вылетает. С горизонтальным
такое не происходит. По кнопке включаю/выключаю отображение
контролов на рабочем поле.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 06, 2007 15:35 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Гость писал(а):
Как это более правильно сделать?

Думаю, кое-что можно, используя что-то вроде:
Код:
MESSAGES: wmes

M: wm_mousemove { | x y }
  lparam LOWORD TO x  lparam HIWORD TO y
...
M;
...
MESSAGES;
...
  wmes winmain -wndproc!
...

А желательно сделать простейший пример, к-й сразу можно запустить и который показывает, что надо. Удобнее будет и добавлять, и хорошая иллюстрация используемых техник... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB