GUI компоненты для MeOS

Discussing libraries simplifying applications development
  • хм... Всё конечно хорошо, но Иван, она же для С--!
    Если бы для асма!...
  • Для асма нужна поддержка ООП, которой пока нет.
  • Иван Поддубный wrote:Для асма нужна поддержка ООП, которой пока нет.
    В том то и дело! Я например для того асм и учу, чтоб под меось покодить. А на С я и так смогу, но нет желания.
  • Вопрос немного не в тему, а больше уже относится к ООП на асме (не знаю стоит ли пока начинать новую тему, поэтому кинул сюда)

    Вобщем все мы ждём выхода в свет менеджера памяти, ждём и лелеем надежду что вот вот оно появится :)...

    В связи с этим возникают некоторые вопросы на счёт выделения памяти...

    Самый мучительный вопрос для меня пока это - создание динамических обьектов...

    Каким макаром копировать образ обьекта (которая записана в 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? (проблема в том что массив не просто байтовый, а осстоит из структур)... На С-- переходить не сильно хоцца ИМХО смысл МеОСи и его фичи просто отпадает...

    И так мои наброски

    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...
  • Здравствулте! все. Я читаю эти форумы на немного дней и я заметил эту резьбу здесь поэтому я думал я вывесит некоторые подобные идеи.
    http://babelfish.altavista.com/.../Project:Gui/Widgets/Widget_Manager

    Я надеюсь что легко увидеть я пытаюсь сделать. Я надеюсь текст переводит наилучшим образом достаточно. Я использую переводчика (меня могу прочитать английскую язык только) поэтому я хотел был бы знать вы думаете этого проекта. Мнения, идеи, оптимизирования... все радушны. Будет моим первым проектом агрегата поэтому я могу некоторая помощь но я не иметь идеи совсем работаться вне в моем разуме до v1.0.
  • огорченно

    Я не уверен почему то соединение не работает. Вы можете перевести эту страницу

    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...
  • 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
  • Всем здрасти! Я вернулся, работу над 3D я пока отложу до лучших времен

    Вообще со времен работы русских с МЕОС было собранно много отечественных ГУИ, даже я когда-то этим занимался
    правда исходники сейчас утеряны. Хотелось бы узнать желательно в этой теме кто какие ГУИ сейчас разрабатывает
    на каком языке и какие приемущества имеются? Что касается динамического ГУИ это я думаю реализуемо даже на асме...
    А что такое ООП???
  • А что такое ООП???
    Интересный вопрос... :) - это же святая святых програминга - ОбьектноОриентированноеПрограммирование

    По теме, чтото иссякло желание этим заниматься в силу сырости оси
  • Ну я скоро выложу пример нового динамического (в виде динамического стека) ГУЙ на асме
    Помню когда-то с Немом мы делали nobodybasic помоему правда потом я утерял исходники
    ща взялся заново, получилось нечто по хоже но уже лучше
    Только мне кажется в ядре не хватает функций... например
    как мне кажется очень! нужен новый тип кнопок который реагирует не на клик , а на просто нажатие...
    еще интересует вопрос что делать с входящими событиями events?

    Вот мой план:
    с перересовкой все просто просто перересовываются все компоненты в окне
    событья клавы поступают в компонент на который наведен фокус
    нажатие кнопки предается компоненту которму эта кнопка пренадлежит

    что делать с событиями от мыши и от ipc я пока не думал...

    Кроме того окно я думаю не стоит считать за компонент вообще.

    вот сырая версия ГУЙ можете кидат помидоры
    http://www.deck4.narod.ru/-V-GUI.rar
  • Архив обновлен теперь можно удалять компоненты
    таблица состоит из input боксов (это не новый компонент)

    Новое обновление теперь можно навести на компонент фокус с помощью TAB или мыши и удалить его нажатием на кнопку FocDel. Кроме того решены проблемы с динамическим стеком, теперь можно, удалять вставлять блоки памяти без глюков.
    Начата работа над проекцией компонента на канву, но так как текст невозможно отобразить на канву, то проекция будет не полноценна. Я думаю требуется в вести в ядро или в GFX дрова от mike.dld спец функции которые будут выводит примитивы не только на экран но и на канву.

    устаревший скриншот
    Image
  • Who is online

    Users browsing this forum: No registered users and 21 guests