Краткий Курс - программирование AVR - часть VI

Тема закрыта Создать новую тему
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12
+
-
edit
 

termostat

Опытный

по поводу изменения цвета мне такое подсказали:

"придется ловить wm_paint на этот чек-бокс и перекрашивать вручную"

ты понимаешь что это означает?
+
-
edit
 

Yuran

Опытный

termostat> по поводу изменения цвета мне такое подсказали:
termostat> "придется ловить wm_paint на этот чек-бокс и перекрашивать вручную"
termostat> ты понимаешь что это означает? [»]

Это делается через WM_CTLCOLOR сообщение.


How to change the background color of an MFC edit control


Explains how to override the OnCtlColor () message-handling function of the window to change the background color of an edit control in an MFC application.

// support.microsoft.com
 

 
+
-
edit
 

termostat

Опытный

Спасибо! читаю...

SAA

Втянувшийся

termostat> по поводу изменения цвета мне такое подсказали:
termostat> "придется ловить wm_paint на этот чек-бокс и перекрашивать вручную"
termostat> ты понимаешь что это означает? [»]

Да понимаю но у меня ощущения такие что wm_paint и другие сообщение к окну не пойимать, я пробовал у меня не получилось, хотя в доке

On_gadget_notify ()

как раз таки калбэк функция в которую из VMLab передаются сообщения к GDAGETXX. Т.е. все просто - ждешь там wm_paint и:

FillRect(dc,&rect,CreateBrushSolid(цвет в формате ARGB));

где dc можно получить через GetDC(GET_HANDLE(GADTGETXX))

Ну а rect объявить и заполнить:

RECT rect;
rect.top=..., rect.left=..., rect.right=...., rect.bottom=....
 

SAA

Втянувшийся

termostat>> по поводу изменения цвета мне такое подсказали:
termostat>> "придется ловить wm_paint на этот чек-бокс и перекрашивать вручную"
termostat>> ты понимаешь что это означает? [»]
Yuran> Это делается через WM_CTLCOLOR сообщение.
Yuran> http://support.microsoft.com/default.aspx?scid=kb;en-us;117778 [»]

А ты уверен что это сообщение не из MFC, т.е. по сути не относится к WinAPI?
 
+
-
edit
 

termostat

Опытный

SAA, попробовал я твою модель графического LCD.

Нужно раза в 3 увеличить размер экрана индикатора, а тож не видно низги!
Это возможно?


Попробовал перекомпилировать твой код - получаю ошибки:

Error ld.cpp 136: Undefined symbol 'byterow' in function class_LCD8544::RX_bit(unsigned long)
Error ld.cpp 137: Statement missing ; in function class_LCD8544::RX_bit(unsigned long)
  • 2 errors in Compile ***
  • Exit Code = 1

    SAA

    Втянувшийся

    termostat>>> по поводу изменения цвета мне такое подсказали:
    SAA> termostat>> "придется ловить wm_paint на этот чек-бокс и перекрашивать вручную"
    SAA> termostat>> ты понимаешь что это означает? [»]
    Yuran>> Это делается через WM_CTLCOLOR сообщение.
    Yuran>> http://support.microsoft.com/default.aspx?scid=kb;en-us;117778 [»]
    SAA> А ты уверен что это сообщение не из MFC, т.е. по сути не относится к WinAPI? [»]

    Извиняюсь виноват, сначало проверить надо было потом говорить, есть тако:

    Сообщение: wm_CtlColor

    Дает pодительскому окну или дочеpнему оpгану упpавления возможность изменить
    цвета фона и текста, котоpыми наpисован дочеpний элемент.

    Паpаметpы:

    wParam: Является описателем контекста дисплея для дочеpнего окна.

    lParamLo: Является описателем дочеpнего окна.

    lParamHi: Является одной из констант ctlcolor_. Опpеделяет тип дочеpнего окна.
    См. pаздел "Флаги упpавления цветом (ctlcolor_) в главе 1.

    Возвpащаемое значение: Не используется.

    Комментаpии: Стандаpтным действием, выполняемым в функции DefWindowProc,
    является использование стандаpтных системных цветов.
     
    Прикреплённые файлы:

    api.zip (скачать) [259,22кбайт, 16 загрузок] [attach=18473]
     

    SAA

    Втянувшийся

    termostat> SAA, попробовал я твою модель графического LCD.
    termostat> Нужно раза в 3 увеличить размер экрана индикатора, а тож не видно низги!
    termostat> Это возможно?
    termostat> =============

    Дык коненчо так и задумывалось. Просто пока башку переклинило не могу линейный адрес в памяти LCD->RAM перевести в адресацию реального LCD. Из всез моих попытко чехарда какаято, потому не стал пока делать 2x,3x,4x, решаю проблему с правильной адресацией.

    termostat> Попробовал перекомпилировать твой код - получаю ошибки:
    termostat> Error ld.cpp 136: Undefined symbol 'byterow' in function class_LCD8544::RX_bit(unsigned long)
    termostat> Error ld.cpp 137: Statement missing ; in function class_LCD8544::RX_bit(unsigned long)
    termostat> *** 2 errors in Compile ***
    termostat> Exit Code = 1 [»]

    Все правильно начало моих попыток структуировать линейный адрес ;) убрать надо эту строчку, прицепляю новый исходник, там проблема с адресом осталось (и даже усугубилась), но вернуть можно все назад исправив строчку

    addr = row*(offset*8)+col; // offset+(AC/8);

    надо ее привести к виду:

    addr = offset+(AC/B);

    в процедуре обновления LCD. Тогда будет все по старому, и доступ в следующую строку экрана будет неправильный ;) Но помогите же кто нибудь уже весь мозг сломал. Нужно что бы адрес был параметризирован только по row и col!

    У меня
    offset - смещение до первого байта в следующей строке RAM LCD
    B - ширина LCD в точках
    AC - счетчик адреса в RAM LCD
    H - высота LCD опять же в точках
    row - текущая строка в LCD (для данного LCD строка это номер группы из 8 пихелей в высоту)
    col - текущая колонка В LCD (для данного LCD это номер пикселя по X)



     

    SAA

    Втянувшийся

    termostat> Надоб узнать побыстрей.

    Тут вроде бы вопрос решился, не получится через wm_CtlColor в On_gadget_notify(...), значит можно будет сделать в On_time_step(...) обыкновенным FillRect по изменению цвета прямоугольника по заданным координатом. Предпочтительней конечно через wm_CtlColor.

    termostat> У меня Боланд Си++ 5 - там Хелпов несколько мегабайт - но ни фига не могу найти где вообще описываются чекбоксы и текстовые поля.

    Не там наверное смотришь смотри Win32 SDK у того же борланда, если ты конечно ставил эту часть help системы. Я выше кидал краткий справочник по Win32 API, там тоже это есть. Ну лучше всего это разжовано у Чарльза Петзольда:

    1 том - http://support.kharkiv.ukrtelecom.ua/lib/BookI.pdf
    2 том - http://support.kharkiv.ukrtelecom.ua/lib/BookII.pdf

    termostat> Если ты найдешь что можно менять цвет я быстренко сварганю из полей сегменты.

    Я попробую сегодня.

    termostat>
    SAA>
    termostat> Да кстати ты в курсе что кол-во ресурсов ограничено для VMLab как я понял из guide? GADGET1..GADGET31.
    termostat>
     

    termostat> Ну сделаем модель двух индикаторов - это 16 сегментов, но наверно можно две модели запустить одновременно под разными именами? Или даже скомпилировать сразу две разных модели одного и того же.
    termostat> [quote]

    Можно, но ты же вроде хотел одну линейку для управления динамической индикацией, там колво гаджетов до 32 будет конечно маловатым. Но в принципе вопрос решается гораздо проще.


    termostat> Файл состоит из строк например, каждая строка это номер такта на котором что-то изменилось, и дальше через запятую: байт или два означающий состояние цифровое 8 или 16 линий и сколько то байт означающих 10 битные аналоговые величины.
    termostat> =======

    Достаточно просто вообщем-то, хватило бы времени на все это ;)

    termostat> Но щас бы довести до ума твою модель LCD и 7-сегментник.

    Чем и занимаюсь. LCD конечно на первом плане, но 7-сег тоже не забываю.

    termostat> Вот еще интересный графический дисплей - популярный:
    termostat> ELM - Audio Spectrum Monitor
    termostat> LCD SG12232C FFT library - Audio Spectrum Monitor [»]

    Интересная ссылка, жалко раньше не находил ;)


    Вот бы кто еще подарил бы ссылку на pdf для LCD от Siemens A60 (цветной) и для LCD C-100 (цветной высокого разрешения). Так как их у меня на валом просто ;)
     

    SAA

    Втянувшийся

    Вот елки опять цеплял и опять он говорит что только не с этим расширенеим.
    Еще раз source от lcd.dll с некоторыми исправлениями в функциональности.


    to termostat:

    В этом исходнике проба поймать сообщение типа wm_ в callback On_gadget_notify(...).

    Так вот результаты так себе - не ловится. Ловятся только события связанные с мышью и клавой. Попробуй щелкнуть в бокс редактирования и увидишь измненения части фона бокса в другой цвет. Но при наездах на бокс другим окном ничего не происходит, т.е. события типа wm_, VMLab гасит. Остатется только путь с On_time_step(...). Но это не так плохо.
    Прикреплённые файлы:

    ld_dll_src.rar (скачать) [25,81кбайт, 15 загрузок] [attach=18474]
     

    SAA

    Втянувшийся

    Исправление ошибок с адресом в следующую строку.


    Прикреплённые файлы:

    lcd_dll_src.rar (скачать) [26,07кбайт, 13 загрузок] [attach=18475]
     

    SAA

    Втянувшийся

    Увеличение точки в двое. В принципе легко регулируется в процедуре DrawBitmap(...) в исходниках. См функцию StretchBlt там где *2, ставтье свою размерность.

    to termostat: Как думаешь приостановится с LCD заняться вплотную 7-seg?
    Прикреплённые файлы:

    lcd_dll_src_x2.rar (скачать) [25,5кбайт, 19 загрузок] [attach=18342]
     
    +
    -
    edit
     

    termostat

    Опытный

    Я был бы счаслив! однозначно.

    Последние идеи.

    Если трудно менять цвет текстовых полей, то можно их просто выводить - сегмент включен, убрал - сегмент выключен.

    Можно ли програмно играть атрибутом видимости? Если можно то изначально сегменты можно изобразить кнопками - они серые. А когда нужно зажечь сегмент то выводить текстовое поле - оно белое, либо менять их атрибут видимости. Т.е. у кнопки и текстового поля будут одинаковые координаты и размеры.


    Хочу письмо им написать, раз они хотят делать новый релиз програмирования юзер-компонентов пусть делают на ВизБейсике или Делфае иль ВижуалСи на крайняк.

    SAA

    Втянувшийся

    termostat> Я был бы счаслив! однозначно.
    termostat> Последние идеи.
    termostat> Если трудно менять цвет текстовых полей, то можно их просто выводить - сегмент включен, убрал - сегмент выключен.

    Я это сделал несколько подругому, не знаю на сколько эстетично, см вложение.

    termostat> Можно ли програмно играть атрибутом видимости? Если можно то изначально сегменты можно изобразить кнопками - они серые. А когда нужно зажечь сегмент то выводить текстовое поле - оно белое, либо менять их атрибут видимости. Т.е. у кнопки и текстового поля будут одинаковые координаты и размеры.
    termostat> ===========

    Можно, но ты забываешь про ограничения в GADGET1....GADGET31!

    termostat> Хочу письмо им написать, раз они хотят делать новый релиз програмирования юзер-компонентов пусть делают на ВизБейсике или Делфае иль ВижуалСи на крайняк. [»]

    Это и сейчас можно сделать. Нужно тебе глядеть доку на VisualBasic по организации DLL модулей в нем и пробовать. Если имена процедур клабеков он не исковеркает всякой мутью типа ___,@@@ и прочими токенами, то все получится не хуже чем в C++ Borland. На дельфе не знаю но очень может быть что можно и сейас при помощи префиксов stdcall. VisualC гарантированно можно сейчас, просто я не особенно хорошо с ним лажу.


    P.S. Организация внешнего вида для динамической индикации 7segx8, в коде в On_begin_simulation(...).
    При компиляции 7seg с библиотекой dll должен находится как отдельная папка 7seg в директории userlib!!!!!! Это связано с тем что blackbox.h хидер имеет фиксированное размещение, а он цепляется в каждом файле проекта.
    Прикреплённые файлы:

    7seg.rar (скачать) [24,25кбайт, 14 загрузок] [attach=18356]

    _7seg_vmlab_avr.rar (скачать) [1,42кбайт, 14 загрузок] [attach=18357]
     
    +
    -
    edit
     

    termostat

    Опытный



    Я разобраляся - ты оказывается просто сделал рисование сегментов.

    ну ты не бросай меня, а то я управление не осилю кажется.

    только постарайся коменты в текст втыкать.


    Я нашел команды в хелпе Win32 боланда

    Сделал цвета в RGB фон как у "контрол панел"

    выключеные сегменты белые, а включеные красные.

    добавил точки.
    Прикреплённые файлы:

    7seg_w_dots.png (скачать) [11,75кбайт, 8 загрузок] [attach=18367]

    7wr_dots.rar (скачать) [3,87кбайт, 15 загрузок] [attach=18368]
    Это сообщение редактировалось 01.09.2005 в 18:21

    SAA

    Втянувшийся

    termostat> Я разобраляся - ты оказывается просто сделал рисование сегментов.
    termostat> ну ты не бросай меня, а то я управление не осилю кажется.

    О чем речь? ;) Только уж ты помогай, тестируй, вноси предложения, правь код.

    termostat> только постарайся коменты в текст втыкать.

    С эти всегда у меня проблема, они сдерживают творческий посыл ;) когда с творчеством намели - вот тогда я пишу кмоенты ;) Но я стараюсь кое где есть. Если что пиши где непонятно.

    termostat> ==================
    termostat> Я нашел команды в хелпе Win32 боланда
    termostat> Сделал цвета в RGB фон как у "контрол панел"
    termostat> выключеные сегменты белые, а включеные красные.
    termostat> добавил точки.

    Я пока не стал включать изменения твои в тескт программы и за перехода к объектной модели индикатора, думаю ты сам это сделаешь. Вот лови свеженькие исходники, с тестовой програмкой для ATMega8. Пока один семисегментный индикатор.

    P.S. Мы тут собственно по теме все эти вещи выкладываем? Может нам уйти лучше в приват?

    Прикреплённые файлы:

    7seg.rar (скачать) [26,97кбайт, 17 загрузок] [attach=18325]
     
    +
    -
    edit
     

    Serge77

    Модератор
    ★★★☆
    Всё по теме, не сомневайтесь! ;^))

    SAA

    Втянувшийся

    Работа над ошибками, оптимизация.
    Новое работает "сетка" или катод индикатора E0(port C0) :-) только я его помоему не инверсным сделал ;) Это легко исправляется в RISE - должен выключаться, в FAIL - включаться.
    Прикреплённые файлы:

    7seg.rar (скачать) [25,58кбайт, 14 загрузок] [attach=18158]

    7seg_avr_demo.rar (скачать) [1,59кбайт, 15 загрузок] [attach=18160]
     
    MD bezobraznic #05.09.2005 15:49
    +
    -
    edit
     

    bezobraznic

    Новичок
    Подскажите плиз как этот dll прицепить к vmlab, а то ничего не получается!!
     
    +
    -
    edit
     

    termostat

    Опытный

    я и SAA делали по pdf инструкции с amctools.com - все получилось.
    +
    -
    edit
     

    SAA

    Втянувшийся

    bezobraznic> Подскажите плиз как этот dll прицепить к vmlab, а то ничего не получается!! [»]

    Смотри my_idea.prj - это текстовик, там в последней строке подключение dll.
     

    SAA

    Втянувшийся

    Новая версия, уже с восемью входами разрешения, правда опять не иверсными, как просил termostat. Пример тоже аттачу.

    Прикреплённые файлы:

    7seg_lib.rar (скачать) [26,2кбайт, 15 загрузок] [attach=18219]

    7seg_avr_src.rar (скачать) [1,74кбайт, 14 загрузок] [attach=18220]
     
    +
    -
    edit
     

    termostat

    Опытный

    наверно желательно чекбокс добавь "EN инверсн."

    и есть ли задержка выключения свечения одного индикатора после снятия ЕН ? чтоб динамическую индикацию моделировать.

    SAA

    Втянувшийся

    termostat> наверно желательно чекбокс добавь "EN инверсн."

    Наверное надо.

    termostat> и есть ли задержка выключения свечения одного индикатора после снятия ЕН ? чтоб динамическую индикацию моделировать.

    Можно попробовать, просто пока руки не дошли. А в текущей версии не получается динамически? Не пробовал?!


     
    +
    -
    edit
     

    termostat

    Опытный

    я не пробовал но симулятор же медленно работает, и будет видно что горит лишь один индикатор в данный момент времени.

    т.е. нужен еще один чек-бокс: "с паузой" или "реальный" индикатор.
    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

    в начало страницы | новое
    Поиск
    Настройки
    Персональное
    Новости сайта
    Статистика
    Яндекс.Метрика



     
    Сайт работает на сервере ETegro Technologies