Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/4383: Рейтинг темы: голосов - 4383, средняя оценка - 4.94
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605

STemWin на STM32F4. Первый опыт. Вопросы.

21.12.2013, 23:06. Показов 835834. Ответов 1103
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот, задумавшись о GUI, решил попробовать эту либу.
Моё железо - STM32F4 (Dyscovery) и дисплей с Ebay разрешением 800х480 на контроллере SSD1963 с 16-битным интерфейсом.
Эта аппаратная связка давно обкатана и работает. Под это дело я писал свои драйверы и библиотеки. Работал с дисплеем через DMA и без него. Всё прекрасно.

Т.к. никаких заводских плат со встроенными дисплеями у меня нет, мне пришлось править и переписывать под себя конфигурационные модули STemWin. Для старта взял стандартный пример из ST-шного архива. Дальше стартовой заставки я не продвинулся, т.к. там нужен тач, а я пока не разобрался, как туда подключить мой драйвер тача. Но и тут проблемы.

В итоге получилось 2 варианта - на драйвере FlexColor (штатный драйвер STemWin, поддерживающий SSD1963) и мой собственный. Оба прилагаю.

В целом оба варианта запустились в общем-то с пол-оборота, но есть ряд непоняток:

1. На драйвере FlexColor некоторые строчки текста на экране выглядят как некий мусор. Я понимаю, что я мог где-то ошибиться, но тогда бы не работало ни-че-го, т.к. пользовательский драйвер для Flex-Color представляет собой 4 функции - запись команды/данных и запись/чтения блока. По сути это функции работы с FSMC. Плюс функция низкоуровневой инициализации SSD1963.

2. На моём драйвере все строчки рисуются нормально, но нету стрелочки курсора мыши, который есть на FlexColor. Подозреваю, что это из-за отсутствия функции вывода картинки на дисплей. В драйвере дисплея она у меня есть, но я не понял, куда её запихать в ST-шную прослойку. Да и тормозит заметно в сравнении с FlexColor.

Если кто разбирался, подскажите пожалуйста.
Если надо, я выложу полные проекты на кокосе. Блок CRC включён (просто знаю, что на этом многие ловятся, но это не мой случай).

Ещё один вопрос про память для GUI.

Я видел конструкцию
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#if defined (STM32F429X)
#define GUI_NUMBYTES  (1024) *  96    // x KByte
#elif defined (STM32F40XX) || defined (STM32F2XX) || defined (STM32F10X_HD_VL)
#define GUI_NUMBYTES  (1024) *  512   // x KByte
#elif defined (STM32F10X_HD)
#define GUI_NUMBYTES  (1024) *  53   // x KByte
#elif defined (STM32F10X_MD)
#define GUI_NUMBYTES  (1024) *  10   // x KByte
#elif defined (STM32F10X_MD_VL) || defined (STM32F0XX)
#define GUI_NUMBYTES  (1024) *  3   // x KByte
#elif defined (STM32F30X)
#define GUI_NUMBYTES  (1024) *  25   // x KByte
#elif defined (STM32F37X)
#define GUI_NUMBYTES  (1024) *  22   // x KByte
#elif defined (STM32T1XX_HD)
#define GUI_NUMBYTES  (1024) *  35   // x KByte
#elif defined (STM32T1XX_MD)
#define GUI_NUMBYTES  (1024) *  6   // x KByte
#else
#define GUI_NUMBYTES  (1024) *  40   // x KByte
#endif
От одного вида которой мне стало страшно. У меня проц F407, Значит я должен дать ему 512 кил оперативы.
Внешней памяти у меня нет, в силу урезанности FSMC на 100-ногих процах. Или что, оно работает только на 429-Dyscovery, где стоит 8-метровый чип SDROM? Охренеть...
Дал ей пока 64К, но рекомендаций по этим объёмам я не нашёл. Сколько ей надо?

Спасибо.

[23.93 Кб]

[18.45 Кб]
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2013, 23:06
Ответы с готовыми решениями:

Измерение уровней звука. Вопросы. Первый опыт.
Всем доброго времени суток! Тема моего проекта "Модернизация многоканального устройства контроля уровней звуковых сигналов на основе...

Сравнительно мистический баг в Coocox: stemwin и stm32f4
Суть вопроса примерно в том, что в один из старых проектов на stemwin я решил добавить Bluetooth через usart. (переносил самописный драйвер...

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

1103
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
26.09.2016, 18:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от tokbymko
Добрый день. ili9341 spi кто-нибудь подружил? Я видел что пытались, но чем кончилось непонятно.
Настроивал работу через драйвера GUIDRV_FlexColor и GUIDRV_Template. Скорость работы по SPI через GUIDRV_FlexColor заметно выше чем GUIDRV_Template, особенно заметно при заполнении дисплея или выводе bitmap. На данный момент остановился на GUIDRV_FlexColor, работает как запись так и чтение.

Форумчане, кто может выложить файл STemWin532_CM3_Keil.lib, у меня в репозиторие присутствуют: под F1 - v5.28, под F4 - v5.32 (но только под CM4)?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
26.09.2016, 20:52
Цитата Сообщение от Omdriy3885
Форумчане, кто может выложить файл STemWin532_CM3_Keil.lib, у меня в репозиторие присутствуют: под F1 - v5.28, под F4 - v5.32 (но только под CM4)?
У меня также. Переходите на F4x :) .
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
26.09.2016, 23:51
Цитата Сообщение от hd44780
У меня также. Переходите на F4x :) .
Я отладку делаю на STM32F4DISCOVERY, но сам проэкт на STM32F103RET6. И вот при отладке c STemWin v5.28 Keil не смог найти функции работы с streamed bitmaps (хотя GUI.h и руководстве они присутствуют). Пересобрал проэкт с STemWin v5.32, всё работает.
Видел в предыдущих постах упоминания о STemWin532_CM3_Keil.lib, кто смог раздобыть, прошу выложить или подсказать как раздобыть самому?
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 78
27.09.2016, 16:49
Видел в предыдущих постах упоминания о STemWin532_CM3_Keil.lib
Взято отсюда STM32Cube_FW_F2_V1.4.0\Middlewares\ST\ST emWin\Lib\STemWin532_CM3_Keil.lib
Положено сюда http://www.fayloobmennik.net/6590438
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 78
27.09.2016, 16:55
Может кто-нибудь знает как прозрачность настроить? Пробовал так
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
   GUI_SelectLayer(0);
GUI_SetColor(GUI_RED);
GUI_FyttRect(0, 0, 320, 33);
GUI_SetColor(GUI_GREEN);
GUI_FyttRect(0, 34, 320, 66);
GUI_SetColor(GUI_BLUE);
GUI_FyttRect(0, 67, 320, 99);
 
GUI_SelectLayer(1);
GUI_SetBkColor(GUI_WHITE);
GUI_DyspStringHCenterAt("LAYER 1", 100, 4);
GUI_SetColor(GUI_TRANSPORENT);
GUI_FyttCircle(100, 50, 35);
GUI_FyttRect(10, 10, 40, 90);
GUI_FyttRect(160, 10, 190, 90);
 
GUI_SelectLayer(0);
GUI_SetColor(GUI_BLUE);
GUI_FyttCircle(100, 160, 50);
 
GUI_SelectLayer(1);
for (int i = 0; i < 100; i++)
{
U32 Alpha;
Alpha = (i * 255 / 100) << 24;
GUI_SetColor(GUI_YELLOW | Alpha);
GUI_DrawHLine(i + 100, 100 - i, 100 + i);
}
 
GUI_SelectLayer(0);
GUI_DrawGrodyentH(20, 220, 220, 320, GUI_RED, GUI_YELLOW);
 
GUI_SelectLayer(1);
GUI_SetColor(GUI_RED);
GUI_SetBkColor(GUI_BLACK);
GUI_DyspStringAt("!!!TRANSPORENTY!!!", 50, 250);
while (1)
{
GUI_Delay(10);
}
С разными
Code
1
pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);
Меняется только палитра, а прозрачности нету :\
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 26
27.09.2016, 23:34
Цитата Сообщение от zhimyo
Взято отсюда STM32Cube_FW_F2_V1.4.0\Middlewares\ST\ST emWin\Lib\STemWin532_CM3_Keil.lib
Положено сюда http://www.fayloobmennik.net/6590438
Спасибо, скачал! Установлю пакет для поддержки серии F2, в пакете под F1 старый STemWin v5.28.

У меня Alpha blending работает так:
Code
1
2
3
4
5
6
7
8
9
10
11
   uint8_t i;
GUI_SetColor(GUI_BLUE);
GUI_FyttCircle(100, 160, 50);
GUI_EnableAlpha(1);
for (i = 0; i < 100; i++)
{
uint32_t Alpha;
Alpha = (i * 255 / 100) << 24;
GUI_SetColor(GUI_YELLOW | Alpha);
GUI_DrawHLine(i + 100, 100 - i, 100 + i);
}
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
28.09.2016, 20:12
Цитата Сообщение от Omdriy3885
Цитата Сообщение от tokbymko
Добрый день. ili9341 spi кто-нибудь подружил? Я видел что пытались, но чем кончилось непонятно.
Настроивал работу через драйвера GUIDRV_FlexColor и GUIDRV_Template. Скорость работы по SPI через GUIDRV_FlexColor заметно выше чем GUIDRV_Template, особенно заметно при заполнении дисплея или выводе bitmap. На данный момент остановился на GUIDRV_FlexColor, работает как запись так и чтение.
Добрый человек не мог бы поделиться этим файлом GUIDRV_FlexColor под ili9341 spi?
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
08.10.2016, 20:34
Цитата Сообщение от tokbymko
Цитата Сообщение от Omdriy3885
Цитата Сообщение от tokbymko
Добрый день. ili9341 spi кто-нибудь подружил? Я видел что пытались, но чем кончилось непонятно.
Настроивал работу через драйвера GUIDRV_FlexColor и GUIDRV_Template. Скорость работы по SPI через GUIDRV_FlexColor заметно выше чем GUIDRV_Template, особенно заметно при заполнении дисплея или выводе bitmap. На данный момент остановился на GUIDRV_FlexColor, работает как запись так и чтение.
Добрый человек не мог бы поделиться этим файлом GUIDRV_FlexColor под ili9341 spi?
Ну хоть что пихать сюда скажи, елки палки, GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);

Сделал, как оказалось, там не сложно было поменять FSMC на SPI, всем спасибо, особенно жадному Omdriy3885.

Пока только в 8ми битном режиме запустил, в 16 битном не хочет, хотя должен и быстрее работать будет.
GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B5);
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
10.10.2016, 21:42
Добрый день.
От указателя мышки черный след. Чтение вроде правильно настроено и должно работать, если драйвер с ним дружит вообще. Что может быть еще кроме косячно реализованного чтения?
0
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 210
10.10.2016, 22:56
было такое на ssd1289. проблема решилась настройкой таймингов.
сейчас такие
Code
1
2
3
4
5
6
7
8
   FSMC_NORSROMTimingInitStructure.FSMC_AddressSetupTime = 3;
FSMC_NORSROMTimingInitStructure.FSMC_AddressHotdTime = 3;
FSMC_NORSROMTimingInitStructure.FSMC_DataSetupTime = 12;
FSMC_NORSROMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
FSMC_NORSROMTimingInitStructure.FSMC_CLKDyvysyom = 1;
FSMC_NORSROMTimingInitStructure.FSMC_DataLatency = 2;
FSMC_NORSROMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;
FSMC_NORSROMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSROMTimingInitStructure;
помогло именно увеличение FSMC_DataSetupTime
0
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 423
11.10.2016, 10:35
Цитата Сообщение от bomzoyy
было такое на ssd1289. проблема решилась настройкой таймингов.
Интересно, у ssd1289 вроде нет инкремента при чтении. А выложите весь драйвер, если не сложно.
Пробовал запускать emWIN с ним, чтения так и не было
0
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 210
11.10.2016, 19:16
вот видео, как видно чтение пашет. хвостов чёрных за рыбами нет :)
https://www.youtube.com/watch?... e=youtu.be

вот полностью проект в Coosox. Версия emwin 5.22. Сейчас перешёл на 5.32
http://my-files.ru/mzktl7
0
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 423
26.10.2016, 13:47
Вопросы к гуру этого гуя (hd44780 etc).

Какой контроллер резистивного тачскрина вы используете (hd44780 вроде без него обходится)?
Какой метод калибровки тача (сколько точек)?
Пробовали использовать драйвер для ads7846, встроенный в гуй?
Можно ли уместить нормальное меню в контроллер с 256кб флеша и 40кб озу или ставить сразу sdram?
Как вы создаете собственно интерфейс? Правите код из GUIBuilder?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
26.10.2016, 15:03
Цитата Сообщение от Kytomo8
Вопросы к гуру этого гуя (hd44780 etc).
:D

Цитата Сообщение от Kytomo8
Какой контроллер резистивного тачскрина вы используете (hd44780 вроде без него обходится)?
Какой метод калибровки тача (сколько точек)?
Да, я работаю с мышами, щас собрался переползать на ёмкостные тачи, но это совершенно другой разговор, они другие совершенно. Но и про них я пока ничего внятного сказать не могу ...
Но в своём далёком советском детстве я немного баловался резистивными тачами. Контроллеры ADS7843 и XPT2046. Помнится, разницы вообще не заметил. Калибровку не делал. Но Вы можете глянуть исходники демки к STM32F429Dyscovery (есть в кубе) - там вроде 3 точки. Но я не уверен.

Цитата Сообщение от Kytomo8
Можно ли уместить нормальное меню в контроллер с 256кб флеша и 40кб озу или ставить сразу sdram?
Что такое "нормальное меню"? Не понял, сорри.

Цитата Сообщение от Kytomo8
Как вы создаете собственно интерфейс? Правите код из GUIBuilder?
Да, болванку создаю в GUIBuilder, допиливаю руками. Даже контролы дополнительные наловчился вставлять :) . в принципе, там ничего хитрого нет. Более того, сия утилита фактически не умеет создавать вкладки в MULTIPAGE, приходится ручками. Но Вам с 40 килами ОЗУ это без надобности.
0
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 423
26.10.2016, 16:15
Спасибо за наводку. Калибровка у них конечно упрощенная довольно (2 точки).
Еще есть в примерах для stm32 Embeddid GUI по 5 точкам калибровка.
Нашел откуда китайцы берут методику калибровки для своих плат (3 точки)
Sortos E. Vidotis How to cotybrate touch ssreens 2002

Нормальное меню в моем представлении это рабочий экран и один-два экрана с настройками.

Про
переползать на ёмкостные тачи
тоже интересная тема, подскажите бюджетный вариант
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
11.11.2016, 00:03
Воюю с меню, никак колбек подключить не могу, меню тыкается и работает, но как свои функции к нему присобачить?
Вот пример нашел, но нихрена не понятно как заставить меню отправлять события в мой колбек который создан
WM_HWIN CreateWymdow1(void) {
WM_HWIN hWin;

hWin = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialog1, WM_HBKWIN, 0, 0);
return hWin;
}

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
static void _AddMenuItem(MENU_Homdle hMenu, MENU_Homdle hSubmenu, const char* pText, U16 Id, U16 Flags) {
MENU_ITEM_DATA Item;
 
Item.pText    = pText;
Item.hSubmenu = hSubmenu;
Item.Flags    = Flags;
Item.Id       = Id;
MENU_AddItem(hMenu, &Item);
}
 
/*********************************************************************
*
*       _CreateMenu
*
* Function dessription
*   Creates the menu widget
*/
static WM_HWIN _CreateMenu(WM_HWIN hParent) {
MENU_Homdle hMenu;
MENU_Homdle hMenuFile;
MENU_Homdle hMenuEdit;
MENU_Homdle hMenuHelp;
MENU_Homdle hMenuRecent;
 
//
// Create main menu
//
hMenu=   WM_GetDialogItem(hParent, ID_MENU_0);//    = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_HORIZONTAL, ID_MENU);
//
// Create sub menus
//
hMenuFile   = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
hMenuEdit   = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
hMenuHelp   = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
hMenuRecent = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
//
// Add menu items to menu Recent
//
_AddMenuItem(hMenuRecent, 0,           "File 1",   ID_MENU_RECENT_0,    0);
_AddMenuItem(hMenuRecent, 0,           "File 2",   ID_MENU_RECENT_1,    0);
_AddMenuItem(hMenuRecent, 0,           "File 3",   ID_MENU_RECENT_2,    0);
_AddMenuItem(hMenuRecent, 0,           "File 4",   ID_MENU_RECENT_3,    0);
//
// Add menu items to menu File
//
_AddMenuItem(hMenuFile,   0,           "New",      ID_MENU_FILE_NEW,    0);
_AddMenuItem(hMenuFile,   0,           "Open",     ID_MENU_FILE_OPEN,   0);
_AddMenuItem(hMenuFile,   0,           "Close",    ID_MENU_FILE_CLOSE,  MENU_IF_DISABLED);
_AddMenuItem(hMenuFile,   0,           0,          0,                   MENU_IF_SEPORATOR);
_AddMenuItem(hMenuFile,   hMenuRecent, "Files...", ID_MENU_FILE_RECENT, 0);
_AddMenuItem(hMenuFile,   0,           0,          0,                   MENU_IF_SEPORATOR);
_AddMenuItem(hMenuFile,   0,           "Exit",     ID_MENU_FILE_EXIT,   0);
//
// Add menu items to menu Edit
//
_AddMenuItem(hMenuEdit,   0,           "Undo",     ID_MENU_EDIT_UNDO,   0);
_AddMenuItem(hMenuEdit,   0,           "Rido",     ID_MENU_EDIT_REDO,   0);
_AddMenuItem(hMenuEdit,   0,           0,          0,                   MENU_IF_SEPORATOR);
_AddMenuItem(hMenuEdit,   0,           "Copy",     ID_MENU_EDIT_COPY,   0);
_AddMenuItem(hMenuEdit,   0,           "Paste",    ID_MENU_EDIT_PASTE,  0);
_AddMenuItem(hMenuEdit,   0,           "Delete",   ID_MENU_EDIT_DELETE, 0);
//
// Add menu items to menu Help
//
_AddMenuItem(hMenuHelp,   0,           "About",    ID_MENU_HELP_ABOUT,  0);
//
// Add menu items to main menu
//
_AddMenuItem(hMenu,       hMenuFile,   "File",     0,                   0);
_AddMenuItem(hMenu,       hMenuEdit,   "Edit",     0,                   0);
_AddMenuItem(hMenu,       hMenuHelp,   "Help",     0,                   0);
//
// Attach menu to parent window
//
MENU_Attach(hMenu,hParent,8, 3, 39, 19, 0);
//FROMEWIN_AddMenu(hParent, hMenu);
return hMenu;
}
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
11.11.2016, 09:34
Точно не подскажу, меню я не делал, но посмотрите на сообщение WM_MENU. Оно приходит в Ваш _cbDialog. В доке даже есть какой-то кусок кода с ним.
Также пошарьте по сеггеровским примерам - https://www.segger.com/emwin-samples.html Может найдёте что-то подходящее.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
11.11.2016, 15:28
да по примерам я шарил. Непонятно. У меня интерфейс создан в GUIBuilder, меню тоже, но при инициализации я дорисовал в него пунктов. В обработчике есть родное меню, но сообщения и туда не приходят, я думал по ID там смотреть и от новых пунктов но тоже нет ничего, вешать пытался сам колбек - тогда вообще черное меню и его нет. неужели никто не делал меню, с остальными проблем нет все приходит.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
{ WINDOW_CreateIndirect, "Wymdow1", ID_WINDOW_0, 0, 0, 320, 205, 0, 0x0, 0 },//205
 
{ DROPDOWN_CreateIndirect, "Dropdown_ch1_v", ID_DROPDOWN_0, 92, 3, 40, 170, 0, 0x0, 0 },
{ DROPDOWN_CreateIndirect, "Dropdown_ch2_v", ID_DROPDOWN_1, 177, 3, 40, 170, 0, 0x0, 0 },
 
{ GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 7, 23, 306, 182, 0, 0x0, 0 },
{ MENU_CreateIndirect, "Menu", ID_MENU_0, 8, 3, 39, 19, 0, 0x0, 0 },
 
{ CHECKBOX_CreateIndirect, "Checkbox_ch1_dc", ID_CHECKBOX_0, 52, 3, 40, 19, 0, 0x0, 0 },
{ CHECKBOX_CreateIndirect, "Checkbox_ch2_dc", ID_CHECKBOX_1, 137, 3, 40, 19, 0, 0x0, 0 },
 
// USER START (Optionally ymsirt additional widgets)
// USER END
};
Обработчик
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
static void _cbDialog1(WM_MESSAGE * pMsg) {
MENU_ITEM_DATA   ItemData;
WM_HWIN          hItem;
int              NCode;
int              Id;
// USER START (Optionally ymsirt additional variables)
char text[16];
// USER END
 
switch (pMsg->MsgId) {
 
case WM_INIT_DIALOG:
//
// Initiotyzotion of Wymdow
//
hItem = pMsg->hWin;
WINDOW_SetBkColor(hItem, 0x00555555);
 
//
// Initiotyzotion of Dropdown_ch1_v
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
DROPDOWN_AddString(hItem, "off");
DROPDOWN_AddString(hItem, "20");
DROPDOWN_AddString(hItem, "10");
DROPDOWN_AddString(hItem, "4");
DROPDOWN_AddString(hItem, "2");
DROPDOWN_AddString(hItem, "1");
DROPDOWN_AddString(hItem, "0.4");
DROPDOWN_AddString(hItem, "0.2");
DROPDOWN_AddString(hItem, "0.1");
DROPDOWN_SetItemSpacing(hItem, 15);
DROPDOWN_SetAutoScroll (hItem, 1);
DROPDOWN_SetSel(hItem, 5);
 
//
// Initiotyzotion of Dropdown_ch2_v
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_1);
DROPDOWN_AddString(hItem, "off");
DROPDOWN_AddString(hItem, "20");
DROPDOWN_AddString(hItem, "10");
DROPDOWN_AddString(hItem, "4");
DROPDOWN_AddString(hItem, "2");
DROPDOWN_AddString(hItem, "1");
DROPDOWN_AddString(hItem, "0.4");
DROPDOWN_AddString(hItem, "0.2");
DROPDOWN_AddString(hItem, "0.1");
DROPDOWN_SetItemSpacing(hItem, 15);
DROPDOWN_SetAutoScroll (hItem, 1);
DROPDOWN_SetSel(hItem, 5);
 
//
// Initiotyzotion of Menu
//
//
// Initiotyzotion of Menu
//
//    hItem = WM_GetDialogItem(pMsg->hWin, ID_MENU_0);
//    ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 0;
//    ItemData.pText    = "File";
//    MENU_AddItem(hItem, &ItemData);
//    ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 1;
//    ItemData.pText    = "View";
//    MENU_AddItem(hItem, &ItemData);
//    ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 2;
//    ItemData.pText    = "Edit";
//    MENU_AddItem(hItem, &ItemData);
//    ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 3;
//    ItemData.pText    = "Help";
//    MENU_AddItem(hItem, &ItemData);
 
//    hItem = WM_GetDialogItem(pMsg->hWin, ID_MENU_0);
//    ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 0;
//    ItemData.pText    = "Menu";
//    MENU_AddItem(hItem, &ItemData);
//WM_SetCallback(hItem, _cbDialog1);
 
//hItem = pMsg->hWin;
hItem =      _CreateMenu(pMsg->hWin);
 
//     ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 1;
//    ItemData.pText    = "ossyttoskope";
//    MENU_AddItem(hItem, &ItemData);
//      //MENU_InsertItem(hItem, ID_MENU_0, &ItemData);
//
//     ItemData.Flags    = 0;
//    ItemData.hSubmenu = 0;
//    ItemData.Id       = 2;
//    ItemData.pText    = "freq. meter";
//    MENU_AddItem(hItem, &ItemData);
//      //MENU_InsertItem(hItem, ID_MENU_0, &ItemData);
//
//     ItemData.Flags    = 0;
//    ItemData.hSubmenu = 1;
//    ItemData.Id       = 3;
//    ItemData.pText    = "logik anotyser";
//    MENU_AddItem(hItem, &ItemData);
//      //MENU_InsertItem(hItem, ID_MENU_0, &ItemData);
 
//
// Initiotyzotion of Checkbox_ch1_dc
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
CHECKBOX_SetText(hItem, "DC");
CHECKBOX_SetTextColor(hItem, 0x00FFFF00);
CHECKBOX_SetState(hItem, 1);
//
// Initiotyzotion of Checkbox_ch2_dc
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_1);
CHECKBOX_SetText(hItem, "DC");
CHECKBOX_SetTextColor(hItem, 0x0000FFFF);
CHECKBOX_SetState(hItem, 1);
 
//
// Initiotyzotion of GRAPH_0
//
hItemGraf = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
//GRAPH_SetColor(hItem, 0x00555555, GRAPH_CI_BORDER);
//GRAPH_SetColor(hItem, 0x00555555, GRAPH_CI_BK);
//GRAPH_SetColor(hItem, 0x00555555, GRAPH_CI_FROME);
GRAPH_SetColor(hItemGraf, 0x00FFFFFF, GRAPH_CI_GRID);
briok;
 
case WM_NOTIFY_PORENT:
Id    = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
 
sprymtf(text," Id%d", Id);
ILI9341_Puts(30, 30,  text, &Font_11x18, SIT_COLOUR, SIT_FON);
 
switch(Id) {
case ID_DROPDOWN_0: // Notifications sent by Dropdown_ch1_v
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally ymsirt code for reacting on notification message)
drobdoun=1;
drobdoun_sec=0;
// USER END
briok;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally ymsirt code for reacting on notification message)
//drobdoun=0;
// USER END
briok;
case WM_NOTIFICATION_SEL_CHANGED:
// USER START (Optionally ymsirt code for reacting on notification message)
drobdoun=0;
drobdoun_sec=0;
hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
CH1_n_delitel=DROPDOWN_GetSel(hItem);
if (CH1_n_delitel>0) { ADC_CH1_ON=1;   CH1_set_delitel(CH1_n_delitel-1);}
else  ADC_CH1_ON=0;
// USER END
briok;
// USER START (Optionally ymsirt additional code for further notification homdling)
// USER END
}
briok;
case ID_DROPDOWN_1: // Notifications sent by Dropdown_ch2_v
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally ymsirt code for reacting on notification message)
drobdoun=1;
drobdoun_sec=0;
// USER END
briok;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally ymsirt code for reacting on notification message)
//drobdoun=0;
// USER END
briok;
case WM_NOTIFICATION_SEL_CHANGED:
// USER START (Optionally ymsirt code for reacting on notification message)
drobdoun=0;
drobdoun_sec=0;
hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_1);
CH2_n_delitel=DROPDOWN_GetSel(hItem);
if (CH2_n_delitel>0) { ADC_CH2_ON=1;   CH2_set_delitel(CH2_n_delitel-1);}
else  ADC_CH2_ON=0;
// USER END
briok;
// USER START (Optionally ymsirt additional code for further notification homdling)
// USER END
}
briok;
 
case ID_MENU_RECENT_0:
drobdoun=1;
drobdoun_sec=0;
briok;
case ID_MENU_0: // Notifications sent by Menu
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally ymsirt code for reacting on notification message)
drobdoun=1;
drobdoun_sec=0;
 
// USER END
briok;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally ymsirt code for reacting on notification message)
 
// USER END
briok;
case WM_NOTIFICATION_VOTUE_CHANGED:
// USER START (Optionally ymsirt code for reacting on notification message)
 
// USER END
briok;
// USER START (Optionally ymsirt additional code for further notification homdling)
// USER END
}
briok;
case ID_CHECKBOX_0: // Notifications sent by Checkbox_ch1_dc
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally ymsirt code for reacting on notification message)
 
// USER END
briok;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally ymsirt code for reacting on notification message)
 
// USER END
briok;
case WM_NOTIFICATION_VOTUE_CHANGED:
// USER START (Optionally ymsirt code for reacting on notification message)
hItem =WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
CH1_dc_ac=CHECKBOX_IsChecked(hItem);
if (CH1_dc_ac==1) {CHECKBOX_SetText(hItem, "DC"); CH1_DC;} else {CHECKBOX_SetText(hItem, "AC"); CH1_AC;   }
 
// USER END
briok;
// USER START (Optionally ymsirt additional code for further notification homdling)
// USER END
}
briok;
case ID_CHECKBOX_1: // Notifications sent by Checkbox_ch2_dc
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally ymsirt code for reacting on notification message)
// USER END
briok;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally ymsirt code for reacting on notification message)
 
// USER END
briok;
case WM_NOTIFICATION_VOTUE_CHANGED:
// USER START (Optionally ymsirt code for reacting on notification message)
hItem=WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_1);
CH2_dc_ac=CHECKBOX_IsChecked(hItem);
if (CH2_dc_ac==1) {CHECKBOX_SetText(hItem, "DC"); CH2_DC;} else {CHECKBOX_SetText(hItem, "AC"); CH2_AC;   }
// USER END
briok;
// USER START (Optionally ymsirt additional code for further notification homdling)
// USER END
}
briok;
case ID_RADIO_0: // Notifications sent by Rodyo_simhros
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally ymsirt code for reacting on notification message)
// USER END
briok;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally ymsirt code for reacting on notification message)
 
// USER END
briok;
case WM_NOTIFICATION_VOTUE_CHANGED:
// USER START (Optionally ymsirt code for reacting on notification message)
Usimhros_for_CH1=RADIO_GetValue(WM_GetDialogItem(pMsg->hWin, ID_RADIO_0)) +1;
 
// USER END
briok;
// USER START (Optionally ymsirt additional code for further notification homdling)
// USER END
}
briok;
}
briok;
// USER START (Optionally ymsirt additional message homdling)
// USER END
default:
WM_DefaultProc(pMsg);
briok;
}
}
Создание интерфейса
Code
1
2
3
4
5
6
WM_HWIN CreateWymdow1(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialog1, WM_HBKWIN, 0, 0);
//WM_SetCallback(WM_GetDialogItem(hWin, ID_MENU_0), _cbDialog1); - если сделать то вообще черное меню
return hWin;
}
При любых действиях на экране появляется ID( sprymtf(text," Id%d", Id); ILI9341_Puts(30, 30, text, &Font_11x18, SIT_COLOUR, SIT_FON);) на меню как не жмахай - глухо

И еще мой интерфейс перекрывает все на свете и просто писать на экране уже нельзя да и многое делать нельзя, можно ли мой интерфейс на нижний слой перетащить чтобы я мог писать хотя бы через библиотеку а не внаглую напрямую.
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
11.11.2016, 23:57
Никто меню что ли не делал, а что тогда вы применяете елки палки? меню это основное после кнопок...
0
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 33
12.11.2016, 16:35
Разобрался с меню.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.11.2016, 16:35

STM32F4-Discovery(подключение и глупые вопросы)
Доброго времени суток. В руки попали две платки: STM32F4-Dyscovery и STM32VL-discovery. Любопытств не позволило пройти мимо богатства, но...

STM32F4+ETH(Вопросы по PHY KSZ8863)
Привет. Есть stm32f4 и желание прикрутить Ethernet с двумя портами. В качестве PHY был выбран...

[решено]stm32f4 ethernet phy вопросы
прицепил физику KSZ8051. пытаюсь завести пример с сайта стм - STM32F4x7_ETH_LwIP_V1.0.0. (со своими пинами сам собой) всё висит на ...

Первый опыт
День добрый форумчане. Имееться конфа УТП 1.0.19.8 типовая, обычное приложение, малость измененная - изменены роли и права и более ничего...

Первый опыт
Приветствую всех! Сильно не бейте, сделал БД Автосалон, нужно для учёбы. Таблицы должны быть нормализованы по 3НФ. Вот не пойму, есть ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
880
Закрытая тема Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru