Aplikacje biblioteki STM32 Embedded GUI: miniPaint na STM32F4DISCOVERY
Tworzenie i wyświetlanie komponentów
Tworzenie komponentu ButtonColor wygląda podobnie jak tworzenie komponentu Button z jedną tylko różnicą: zamiast przypisania tekstu jest przypisywany kolor. Za jego wyświetlanie odpowiada funkcja (plik graphicObject.c):
static GL_ErrStatus SetButtonColorVisible (GL_PageControls_TypeDef* pObj,
GL_Coordinates_TypeDef objCoordinates)
{
GL_ButtonColor_TypeDef* pGUIObj = (GL_ButtonColor_TypeDef*)(pObj->objPTR);
uint16_t maxX = objCoordinates.MaxX;
uint16_t minY = objCoordinates.MinY;
uint16_t color = 0;
// Check if pGUIObj == NULL
if(!pGUIObj)
{
return GL_ERROR;
}
color = pGUIObj->Color;
pGUIObj -> Control_Visible = GL_TRUE;
GL_SetForegroundColor(Black);
GL_DrawRectangle( maxX, minY, 28, 28);
GL_DrawFilledRectangle( maxX-1, minY+1, 26, 26, color);
return GL_OK;
}
W oddzielnym pliku Drawbox.c zdefiniowano następujące funkcje:
- ClearDrawbox() – czyszczenie obszaru w którym odbywa się rysowanie,
- NewDrawbox() – tworzenie komponentu o zadanych wymiarach,
- SetCurrentColor() – ustawienie bieżącego koloru,
- SetDrawboxVisible() – wyświetlanie komponentu.
Oprócz powyższych zdefiniowano również funkcję rysującą „punkty” tworzące linię rysowania:
void Draw_Point (GL_PageControls_TypeDef* pControl,
uint16_t x,
uint16_t y)
{
#if 0
// Rysowanie pojedynczego piksela
LCD_PutPixel(x, y, CurrentColor, SinglePixel);
#else
// Rysowanie małego koła
if( ((pControl->objCoordinates.MaxX)-2 > x) &&
((pControl->objCoordinates.MinX)+2 < x) &&
((pControl->objCoordinates.MaxY)-2 > y) &&
((pControl->objCoordinates.MinY)+2 < y)){
GL_SetForegroundColor(CurrentColor);
GL_DrawLine(x+2, y, 1, Vertical);
GL_DrawLine(x+1, y-1, 3, Vertical);
GL_DrawLine(x+0, y-2, 5, Vertical);
GL_DrawLine(x-1, y-1, 3, Vertical);
GL_DrawLine(x-2, y, 1, Vertical);
}
#endif
}
Integracja komponentu
Aby skorzystać z nowych komponentów należy uzupełnić warstwę Library o kilka elementów. Pierwsza modyfikacja to poszerzenie funkcji AddPageControlObj() o dwa dodatkowe warunki:
else if (objPTR -> objType == GL_BUTTON_COLOR){
// Pobierz wskaźnik na obiekt graficzny
GL_ButtonColor_TypeDef* pTmp = ((GL_ButtonColor_TypeDef*)(objPTR -> objPTR));
// Przypisz funkcje rysująca dany obiekt graficzny
objPTR -> SetObjVisible = SetButtonColorVisible;
// Skopiuj ID do struktury nadrzędnej
objPTR -> ID = pTmp -> ID;
// Przypisz wstępne wymiary obiektu
objCoordinates.MinX = PosX - 28;
objCoordinates.MaxY = PosY + 28;
}
else if (objPTR -> objType == GL_DRAWBOX){
GL_Drawbox_TypeDef* pTmp = ((GL_Drawbox_TypeDef*)(objPTR -> objPTR));
objPTR -> SetObjVisible = SetDrawboxVisible;
objPTR -> ID = pTmp->ID;
objCoordinates.MinX = PosX - pTmp -> Width + 1;
objCoordinates.MaxY = PosY + pTmp -> Height - 1;
}
oraz funkcji GetObjSize():
else if (pPageControl->objType == GL_BUTTON_COLOR){
dimensions.Length = 28;
dimensions.Height = 28;
}
else if (pPageControl->objType == GL_DRAWBOX){
GL_Drawbox_TypeDef* pTmp;
pTmp = (GL_Drawbox_TypeDef*)(pPageControl->objPTR);
dimensions.Length = pTmp->Width;
dimensions.Height = pTmp->Height;
}
Dodanie nowej opcji w bloku switch funkcji CallPreEvents():
case GL_DRAWBOX: Draw_Point(pControl, u32_TSXCoordinate, u32_TSYCoordinate); break;
oraz w bloku switch funkcji CallEvent():
case GL_BUTTON_COLOR: pTmp = (GL_ButtonColor_TypeDef*)(pControl->objPTR); ((GL_ButtonColor_TypeDef*)pTmp)->EventHandler(); break;


POWER UP. Wybór przekaźników do bezpiecznych stacji ładowania prądem przemiennym: normy, wymagania i rozwiązania
Cztery dekady Vision Engineering Germany – precyzja, innowacje i ergonomiczna mikroskopia od 1986 roku
Taśma poliimidowa (Kapton®) w elektronice: zastosowania i właściwości 


![https://www.youtube.com/watch?v=gHcP8AajoN4 Szymon Robak oprowadza po katowickim Laboratorium Badań Kompatybilności Elektromagnetycznej w Sieć Badawcza Łukasiewicz - Instytucie Sztucznej Inteligencji i Cyberbezpieczeństwa. Zapraszamy na film! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/06/Szymon-Robak-tytulowe.png)
![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)

