ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
837383 Топик полностью
POV_ (03.05.2018 15:30, просмотров: 1) ответил 0men на Сами картинки статические (кроме данных и графиков)? Находятся во флешке фтди?
На накопителе лишь иконки. Если накопитель (DataFlash) отформатировать все останется как есть, лишь без пиктограмм... кнопки все градиентные - рисуется силами дисплея. Сделал что-то типа объектов ф'ля делфи: TButton, TLabel, TEdit, TGradientButton - передаю на вход параметры, а оно само рисуется. Передачей коротких команд стороннего API. void AddButtonGrad(TButton *btn, bit enabled, bit visible) { TRDCompact *res; BYTE *buf = SharedBuffer; WORD l = (*btn).Left, t = (*btn).Top, w = (*btn).Width, h = (*btn).Height, abris = (*btn).AbrisWidth; WORD a4, a8; DWORD rgb0, rgb1; bit pressed; if ((*btn).AbrisWidth == ABRIS_MINIMAL) { a4 = 0; a8 = 0; abris = 1; } else { a4 = 4*abris; a8 = 8*abris; } if (!v) { PassBitmap((*btn).Bitmap); return; } if ((*btn).Group != -1) { // çàïîëíÿåì ñïèñîê êíîïîê â ãðóïïå Groups[(*btn).Group].Buttons[Groups[(*btn).Group].Number] = (*btn).Tag; Groups[(*btn).Group].Number++; if ((*btn).AllowUp) { // êíîïêó ìîæíî "îòæàòü", îíà îäíà â ãðóïïå if ((*btn).Tag == TagPressed) Groups[(*btn).Group].Pressed = !Groups[(*btn).Group].Pressed; pressed = Groups[(*btn).Group].Pressed; } else { // îäíà èç êíîïîê ãðóïïû âñåãäà íàæàòà pressed = (Groups[(*btn).Group].Pressed == (*btn).Tag); } } else { // ïðîñòàÿ íîïêà áåç óäåðæèâàíèÿ pressed = ((*btn).Tag == TagPressed); } if (pressed) { rgb0 = (*btn).ClLeftPressed; rgb1 = (*btn).ClRightPressed; } else { rgb0 = (*btn).ClLeft; rgb1 = (*btn).ClRight; } if (en) Ft_App_WrCoCmd_Buffer(phost,COLOR_A(255)); else Ft_App_WrCoCmd_Buffer(phost,COLOR_A(100)); if (en && v) Ft_App_WrCoCmd_Buffer(phost,TAG((*btn).Tag)); else Ft_App_WrCoCmd_Buffer(phost,TAG(1)); Ft_App_WrCoCmd_Buffer(phost,SCISSOR_XY(l+a4, t+a4)); Ft_App_WrCoCmd_Buffer(phost,SCISSOR_SIZE(w-a8, h-a8)); Ft_Gpu_CoCmd_Gradient(phost,l+a4, t, rgb0, l+w-a4, t, rgb1); Ft_App_WrCoCmd_Buffer(phost,SCISSOR_XY(0, 0)); Ft_App_WrCoCmd_Buffer(phost,SCISSOR_SIZE(FT_DispWidth, FT_DispHeight)); if (abris > 0) { abris *= 16; Ft_App_WrCoCmd_Buffer(phost,LINE_WIDTH(abris)); Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV(rgb1)); l *= 16; t *= 16; w *= 16; h *= 16; Ft_App_WrCoCmd_Buffer(phost,BEGIN(LINE_STRIP)); Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+abris, t+abris)); Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+abris, t+h-abris)); Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+w-abris, t+h-abris)); Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+w-abris, t+abris)); Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+abris, t+abris)); Ft_App_WrCoCmd_Buffer(phost,END()); l /= 16; t /= 16; w /= 16; h /= 16; } if (fs_ReadFileInfo((*btn).Bitmap, buf)) { // spi_SetMode(DISPLAY_BITRATE, 0x40); res = (TRDCompact*)buf; if ((*res).RCType == RC_TYPE_IMAGE) { l += ((int)w - (*res).Width)/2; t += ((int)h - (*res).Height)/2; if (pressed && (*btn).ClRepaintPressed != BITMAP_NOT_REPAINT) Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClRepaintPressed)); else if (!pressed && (*btn).ClRepaint != BITMAP_NOT_REPAINT) Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClRepaint)); else Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV(CL_WHITE)); AddBitmap((*btn).Bitmap, l, t, 0, true); } } if (strlen((*btn).Text > 0)) { if (pressed) Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClLeft)); else Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClLeftPressed)); if (pressed) { Ft_Gpu_CoCmd_Text(phost,l+w/2-1, t+h/2, (*btn).TextSize, OPT_CENTER, (*btn).Text); Ft_Gpu_CoCmd_Text(phost,l+w/2+1, t+h/2, (*btn).TextSize, OPT_CENTER, (*btn).Text); } else Ft_Gpu_CoCmd_Text(phost,l+w/2, t+h/2, (*btn).TextSize, OPT_CENTER, (*btn).Text); } } typedef struct { WORD Left, Top; WORD Width, Height; WORD AbrisWidth; DWORD ClLeft, ClRight; DWORD ClLeftPressed, ClRightPressed; BYTE Tag; BYTE Bitmap[16]; DWORD ClRepaint, ClRepaintPressed; BYTE Group; BYTE AllowUp; BYTE Text[16]; BYTE TextSize; } TButton;