Если кому-нибудь интересно, я выложил исходники своей кривой незаконченной GUI-библиотеки:
http://poddubny.hut1.ru
GUI компоненты для MeOS
хм... Всё конечно хорошо, но Иван, она же для С--!
Если бы для асма!...
Если бы для асма!...
Для асма нужна поддержка ООП, которой пока нет.
В том то и дело! Я например для того асм и учу, чтоб под меось покодить. А на С я и так смогу, но нет желания.Иван Поддубный wrote:Для асма нужна поддержка ООП, которой пока нет.
Вопрос немного не в тему, а больше уже относится к ООП на асме (не знаю стоит ли пока начинать новую тему, поэтому кинул сюда)
Вобщем все мы ждём выхода в свет менеджера памяти, ждём и лелеем надежду что вот вот оно появится ...
В связи с этим возникают некоторые вопросы на счёт выделения памяти...
Самый мучительный вопрос для меня пока это - создание динамических обьектов...
Каким макаром копировать образ обьекта (которая записана в struc) в оператоиву и как с ним потом обращаться, вызывая стандартные методы и свойства?
Вобщем все мы ждём выхода в свет менеджера памяти, ждём и лелеем надежду что вот вот оно появится ...
В связи с этим возникают некоторые вопросы на счёт выделения памяти...
Самый мучительный вопрос для меня пока это - создание динамических обьектов...
Каким макаром копировать образ обьекта (которая записана в struc) в оператоиву и как с ним потом обращаться, вызывая стандартные методы и свойства?
Вот давеча вчера ночью сидел и чесал репу, каким образом надо отлавливать фокус ввода (да и вообще фокус на текущий момент контрола под указателм мышки)... И пока ничего лучшего, чем просмотр массива , в котором занесены данные о границах контролов (т.е. площадь, какую они занимают на форме)
Первое что мне помешало, так это невипительный БАГ в эмуляторе Халявина, версия 0.33... на десятой функции (отлов события) указатель команд улетает в ниибенную даль без ведомых причин... в MeOSEmul всё работает нормально, за исключением шрифтов (кто подскажет как с этим бороться? Вместо символов выдаются прямоугольники со всяким бредом )
Вобщем идея такова у меня - юзер водит мышью, соответственно меняются её координаты, в текущий момент мышь может находиться тока над одним контролом, поэтому надо проверить в теккущий момент какому контролу она принадлежит...
что бы не вызывать каждый раз метод всех контролов .CheckFocus , как это я делал раньше, я создаю массив (в идеале будет список), в котором будут храниться структуры вида GControl:
struc TRect ;описание прямоугольника
{
.X1 dw 0
.Y1 dw 0
.X2 dw 0
.Y2 dw 0
}
struc GControl
{
.ID dw 0 ;идентификатор контрола
; .Focus db 0 ; признак активного фокуса
.Area TRect
.Activate dd 0; указатель на функцию активации контрола (подсветка, выступ, подчёркивание и т.п.)
.DefaultAction dd 0 ;указатель на функцию по умолчанию (при клике: ввод текста, перемещение и т.п.)
}
Вобщем допустим есть процедуры типа
1)RegisterControl - регистрируется текущий контрол в массиве
2)UnregisterControl - удаляется из него
3)CheckActiveFocus - проверка по массиву, в области которого контрола находится указатель мышки, заносится в переменную ActiveControl...
Вобщем выложу ниже наброски, но пока они не рабочие (не до конца), если есть возможность что то улучшить или прооптимизировать, пишите нижу я обязательно прочту!
И ещё, можно ли с массивами работать через строковые регистры edi и esi командами lods movs scas? (проблема в том что массив не просто байтовый, а осстоит из структур)... На С-- переходить не сильно хоцца ИМХО смысл МеОСи и его фичи просто отпадает...
И так мои наброски
Первое что мне помешало, так это невипительный БАГ в эмуляторе Халявина, версия 0.33... на десятой функции (отлов события) указатель команд улетает в ниибенную даль без ведомых причин... в MeOSEmul всё работает нормально, за исключением шрифтов (кто подскажет как с этим бороться? Вместо символов выдаются прямоугольники со всяким бредом )
Вобщем идея такова у меня - юзер водит мышью, соответственно меняются её координаты, в текущий момент мышь может находиться тока над одним контролом, поэтому надо проверить в теккущий момент какому контролу она принадлежит...
что бы не вызывать каждый раз метод всех контролов .CheckFocus , как это я делал раньше, я создаю массив (в идеале будет список), в котором будут храниться структуры вида GControl:
struc TRect ;описание прямоугольника
{
.X1 dw 0
.Y1 dw 0
.X2 dw 0
.Y2 dw 0
}
struc GControl
{
.ID dw 0 ;идентификатор контрола
; .Focus db 0 ; признак активного фокуса
.Area TRect
.Activate dd 0; указатель на функцию активации контрола (подсветка, выступ, подчёркивание и т.п.)
.DefaultAction dd 0 ;указатель на функцию по умолчанию (при клике: ввод текста, перемещение и т.п.)
}
Вобщем допустим есть процедуры типа
1)RegisterControl - регистрируется текущий контрол в массиве
2)UnregisterControl - удаляется из него
3)CheckActiveFocus - проверка по массиву, в области которого контрола находится указатель мышки, заносится в переменную ActiveControl...
Вобщем выложу ниже наброски, но пока они не рабочие (не до конца), если есть возможность что то улучшить или прооптимизировать, пишите нижу я обязательно прочту!
И ещё, можно ли с массивами работать через строковые регистры edi и esi командами lods movs scas? (проблема в том что массив не просто байтовый, а осстоит из структур)... На С-- переходить не сильно хоцца ИМХО смысл МеОСи и его фичи просто отпадает...
И так мои наброски
Code: Select all
struc TRect
{
.X1 dw 0
.Y1 dw 0
.X2 dw 0
.Y2 dw 0
}
struc GControl
{ .C_START:
.ID dw 0
.Focus db 0
.Area TRect
.Activate dd 0 ;pointer
.DefaultAction dd 0 ;pointer
.C_END:
}
Control GControl
Cursor dw 0
Registered dw 0 ;iteration
XMouse dw 0 ;temporarely here...
YMouse dw 0 ;Will be used Evt.XMouse or Evt.Mouse.X instead
ControlSize = Control.C_END-Control.C_START
Components rb 2*(ControlSize) ; Array of Components [1..MaxCount] MaxCount=...? List is better, but now i haven't it
RegisterControl:
;19 байт на структуру
inc [Registered] ;i=i+1
mov ebx,Components ;загоняем указатель на массив компонент
xor edx,edx ;очищаем переменный регистр
mov dx,[Control.ID] ;ID
mov word [ebx+Components+Cursor+0],dx ;записываем слово (ID)
mov dl,[Control.Focus]
mov byte [ebx+Components+Cursor+2],dl ;записываем байт (бит еденица или ноль - тип булев) признак фокуса
mov dx,[Control.Area.X1]
shl edx,16
mov dx,[Control.Area.Y1]
mov dword [ebx+Components+Cursor+2+1],edx ; записали верхнюю точку прямоугольника области контрола
mov dx,[Control.Area.X2]
shl edx,16
mov dx,[Control.Area.Y2]
mov dword [ebx+Components+Cursor+2+1+4],edx ; записали нижнюю точку прямоугольника области контрола
mov edx,[Control.Activate]
mov dword [ebx+Components+Cursor+2+1+4+4],edx ; записали адрес обработчика события активации контрола
mov edx,[Control.DefaultAction]
mov dword [ebx+Components+Cursor+2+1+4+4+4],edx ; записали адрес обработчика события поумолчанию (текст, флажок, скролл и тп)
mov eax,dword [Registered]
mov edx,[ControlSize]
add eax,dword [Cursor]
ret
FocusLoop:
.I dw 0
xor eax,eax
mov ebx,Components
mov cx,[Registered]
.@@BeginScanControlFocus:
inc [.I]
mov eax,dword [.I]
mov edx,[ControlSize]
mul edx
mov dx,word [ebx+eax+3]
;проверка X>=Х1?
;...
cmp [E.XMouse],dx
jnge .@@NotInArea
mov dx,word [ebx+eax+3+2]
;проверка Y>=Y1?
cmp [E.YMouse],dx
jnge .@@NotInArea
mov dx,word [ebx+eax+3+2+2]
;X<=X2?
cmp [E.XMouse],dx
jnle .@@NotInArea
mov dx,word [ebx+eax+3+2+2+2]
cmp [E.YMouse],dx
jnle .@@NotInArea
;Y<=Y2?
;now cursor in Area of Control, must call .Activate (highlight for example)
mov edx,[ebx+eax+3+2+2+2+2] ;get pointer to .Activate method
cmp edx,0
je .@@NotInArea
call edx ;call .Activate
.@@NotInArea:
loop .@@BeginScanControlFocus
.@@EndScanning:
ret
вобщем не решил себе трахать мозги и программить контролы на С-- (это конечно не идеал, но хотяб так на первое время, тем более скорее всего все они будут в динамических либах)..
кто знает как связаться с Иваном Поддубным? за основу взял его контролы, иедя понятно не пока не до конца, хотелось бы с ним побеседовать.. если кто знает его координаты типа аси и прочего просьба скинуть мне на асю 166399000...
кто знает как связаться с Иваном Поддубным? за основу взял его контролы, иедя понятно не пока не до конца, хотелось бы с ним побеседовать.. если кто знает его координаты типа аси и прочего просьба скинуть мне на асю 166399000...
Здравствулте! все. Я читаю эти форумы на немного дней и я заметил эту резьбу здесь поэтому я думал я вывесит некоторые подобные идеи.
http://babelfish.altavista.com/.../Project:Gui/Widgets/Widget_Manager
Я надеюсь что легко увидеть я пытаюсь сделать. Я надеюсь текст переводит наилучшим образом достаточно. Я использую переводчика (меня могу прочитать английскую язык только) поэтому я хотел был бы знать вы думаете этого проекта. Мнения, идеи, оптимизирования... все радушны. Будет моим первым проектом агрегата поэтому я могу некоторая помощь но я не иметь идеи совсем работаться вне в моем разуме до v1.0.
http://babelfish.altavista.com/.../Project:Gui/Widgets/Widget_Manager
Я надеюсь что легко увидеть я пытаюсь сделать. Я надеюсь текст переводит наилучшим образом достаточно. Я использую переводчика (меня могу прочитать английскую язык только) поэтому я хотел был бы знать вы думаете этого проекта. Мнения, идеи, оптимизирования... все радушны. Будет моим первым проектом агрегата поэтому я могу некоторая помощь но я не иметь идеи совсем работаться вне в моем разуме до v1.0.
огорченно
Я не уверен почему то соединение не работает. Вы можете перевести эту страницу
http://menuet.homelinux.net/Project:Gui ... et_Manager
путем использование
http://babelfish.altavista.com
Я не уверен почему то соединение не работает. Вы можете перевести эту страницу
http://menuet.homelinux.net/Project:Gui ... et_Manager
путем использование
http://babelfish.altavista.com
Paizle
Babel Fish - very poor translator. I transferred this phrase with its aid and I think you wonderfully you see as it it mangles words. We little that is what understood from your previous communication, but from the soul they laughed...
Babel Fish - very poor translator. I transferred this phrase with its aid and I think you wonderfully you see as it it mangles words. We little that is what understood from your previous communication, but from the soul they laughed...
I can see from the translation I am reading now that my post is a bit mangled. Here is my post in English... basically
Hi all.
I have been reading these forums for the past few days now (not long). I noticed that this thread is a bit is on a related topic so I will post some similar ideas.
http://menuet.homelinux.net/Project:Gui ... et_Manager
I hope the text can be translated well enough for you too understand. I have been using a translator for these forums (I read English only) and I wanted to know what you think of this project.
Opinions, ideas, optimizations... all are welcome. This will be my first project in assembly so I may need some help, however I have the ideas worked out mostly, right up until version 1.0
Hi all.
I have been reading these forums for the past few days now (not long). I noticed that this thread is a bit is on a related topic so I will post some similar ideas.
http://menuet.homelinux.net/Project:Gui ... et_Manager
I hope the text can be translated well enough for you too understand. I have been using a translator for these forums (I read English only) and I wanted to know what you think of this project.
Opinions, ideas, optimizations... all are welcome. This will be my first project in assembly so I may need some help, however I have the ideas worked out mostly, right up until version 1.0
Всем здрасти! Я вернулся, работу над 3D я пока отложу до лучших времен
Вообще со времен работы русских с МЕОС было собранно много отечественных ГУИ, даже я когда-то этим занимался
правда исходники сейчас утеряны. Хотелось бы узнать желательно в этой теме кто какие ГУИ сейчас разрабатывает
на каком языке и какие приемущества имеются? Что касается динамического ГУИ это я думаю реализуемо даже на асме...
А что такое ООП???
Вообще со времен работы русских с МЕОС было собранно много отечественных ГУИ, даже я когда-то этим занимался
правда исходники сейчас утеряны. Хотелось бы узнать желательно в этой теме кто какие ГУИ сейчас разрабатывает
на каком языке и какие приемущества имеются? Что касается динамического ГУИ это я думаю реализуемо даже на асме...
А что такое ООП???
Интересный вопрос... - это же святая святых програминга - ОбьектноОриентированноеПрограммированиеА что такое ООП???
По теме, чтото иссякло желание этим заниматься в силу сырости оси
Ну я скоро выложу пример нового динамического (в виде динамического стека) ГУЙ на асме
Помню когда-то с Немом мы делали nobodybasic помоему правда потом я утерял исходники
ща взялся заново, получилось нечто по хоже но уже лучше
Только мне кажется в ядре не хватает функций... например
как мне кажется очень! нужен новый тип кнопок который реагирует не на клик , а на просто нажатие...
еще интересует вопрос что делать с входящими событиями events?
Вот мой план:
с перересовкой все просто просто перересовываются все компоненты в окне
событья клавы поступают в компонент на который наведен фокус
нажатие кнопки предается компоненту которму эта кнопка пренадлежит
что делать с событиями от мыши и от ipc я пока не думал...
Кроме того окно я думаю не стоит считать за компонент вообще.
вот сырая версия ГУЙ можете кидат помидоры
http://www.deck4.narod.ru/-V-GUI.rar
Помню когда-то с Немом мы делали nobodybasic помоему правда потом я утерял исходники
ща взялся заново, получилось нечто по хоже но уже лучше
Только мне кажется в ядре не хватает функций... например
как мне кажется очень! нужен новый тип кнопок который реагирует не на клик , а на просто нажатие...
еще интересует вопрос что делать с входящими событиями events?
Вот мой план:
с перересовкой все просто просто перересовываются все компоненты в окне
событья клавы поступают в компонент на который наведен фокус
нажатие кнопки предается компоненту которму эта кнопка пренадлежит
что делать с событиями от мыши и от ipc я пока не думал...
Кроме того окно я думаю не стоит считать за компонент вообще.
вот сырая версия ГУЙ можете кидат помидоры
http://www.deck4.narod.ru/-V-GUI.rar
Архив обновлен теперь можно удалять компоненты
таблица состоит из input боксов (это не новый компонент)
Новое обновление теперь можно навести на компонент фокус с помощью TAB или мыши и удалить его нажатием на кнопку FocDel. Кроме того решены проблемы с динамическим стеком, теперь можно, удалять вставлять блоки памяти без глюков.
Начата работа над проекцией компонента на канву, но так как текст невозможно отобразить на канву, то проекция будет не полноценна. Я думаю требуется в вести в ядро или в GFX дрова от mike.dld спец функции которые будут выводит примитивы не только на экран но и на канву.
устаревший скриншот
таблица состоит из input боксов (это не новый компонент)
Новое обновление теперь можно навести на компонент фокус с помощью TAB или мыши и удалить его нажатием на кнопку FocDel. Кроме того решены проблемы с динамическим стеком, теперь можно, удалять вставлять блоки памяти без глюков.
Начата работа над проекцией компонента на канву, но так как текст невозможно отобразить на канву, то проекция будет не полноценна. Я думаю требуется в вести в ядро или в GFX дрова от mike.dld спец функции которые будут выводит примитивы не только на экран но и на канву.
устаревший скриншот
Who is online
Users browsing this forum: No registered users and 21 guests