Posts by Andrzej

    Hi

    I want to put NUMBER on position x = 250, y = 40. I have the following code. Why can't I do that? How to declare GUI_RECT?

    static void _cbCallback(WM_MESSAGE * pMsg) {
      WM_HWIN hWin;
      WM_HWIN hItem;
      int NCode;
      int Id;
    GUI_RECT Rect = {10, 10, 40, 80};


      hItem = pMsg->hWin;
      switch (pMsg->MsgId) {
      case WM_INIT_DIALOG:


      WINDOW_SetBkColor(hItem, GUI_BLUE);


      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
      BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
      BUTTON_SetText(hItem, "START");
      BUTTON_SetSkin(hItem, _ButtonSkin);


      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
      BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
      BUTTON_SetText(hItem, "STOP");
      BUTTON_SetSkin(hItem, _ButtonSkin);


      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
      BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
      BUTTON_SetText(hItem, "UP");
      BUTTON_SetTextColor(hItem, BUTTON_CI_PRESSED, GUI_RED);
      BUTTON_SetSkin(hItem, _ButtonSkin);


      hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
      BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
      BUTTON_SetText(hItem, "DOWN");
      BUTTON_SetTextColor(hItem, BUTTON_CI_PRESSED, GUI_RED);
      BUTTON_SetSkin(hItem, _ButtonSkin);


      break;


      case WM_PAINT:


      GUI_DispStringInRectEx("NUMBER", &Rect,
      GUI_TA_HCENTER | GUI_TA_VCENTER, 10, GUI_ROTATE_CCW);


      break;


      default:
      WM_DefaultProc(pMsg);
      break;
      }
    }


    /*********************************************************************
     *
     * CreateWindow
     */
    WM_HWIN CreateWindow(void) {
      WM_HWIN hWin;


      hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),
      _cbCallback, WM_HBKWIN, 0, 0);
      return hWin;
    }


    void MainTask(void) {


      GUI_Init();
      WM_MULTIBUF_Enable(1);
      CreateWindow();
      while (1) {
      GUI_Delay(100);
      }
    }

    I want to rotate the inscription on the button. What's wrong here?

    #define ID_WINDOW_0 (GUI_ID_USER + 0x00)
    #define ID_BUTTON_0 (GUI_ID_USER + 0x01) // START
    #define ID_BUTTON_1 (GUI_ID_USER + 0x02) // STOP
    #define ID_BUTTON_2 (GUI_ID_USER + 0x03) // UP
    #define ID_BUTTON_3 (GUI_ID_USER + 0x04) // DOWN

    static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { {
    WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 272,
    WM_CF_SHOW, 0 }, { BUTTON_CreateIndirect, "START",
    ID_BUTTON_0, 30, 20, 40, 232 }, { BUTTON_CreateIndirect, "STOP",
    ID_BUTTON_1, 90, 20, 40, 232 }, { BUTTON_CreateIndirect, "UP",
    ID_BUTTON_2, 150, 20, 40, 232 }, { BUTTON_CreateIndirect, "DOWN",
    ID_BUTTON_3, 210, 20, 40, 232 } };


    static void _cbCallback(WM_MESSAGE * pMsg) {


    WM_HWIN hWin;
    WM_HWIN hItem;


    int NCode;
    int Id;


    hItem = pMsg->hWin;
    switch (pMsg->MsgId) {
    case WM_INIT_DIALOG:
    WINDOW_SetBkColor(hItem, GUI_BLUE);


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
    BUTTON_SetText(hItem, "START");
    BUTTON_SetTextColor(hItem, BUTTON_CI_PRESSED, GUI_RED);
    GUI_DispStringInRectEx("START", hItem, GUI_TA_HCENTER | GUI_TA_VCENTER,
    6, GUI_ROTATE_CCW);


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
    BUTTON_SetText(hItem, "STOP");


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
    BUTTON_SetText(hItem, "UP");


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
    BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
    BUTTON_SetText(hItem, "DOWN");


    break;


    default:
    WM_DefaultProc(pMsg);
    break;
    }
    }


    WM_HWIN CreateWindow(void) {
    WM_HWIN hWin;


    hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),
    _cbCallback, WM_HBKWIN, 0, 0);
    return hWin;
    }


    void MainTask(void) {


    CreateWindow();


    }

    Hello.
    If you need to display some variable with constant refreshing period (for example 200 ms) you can use Timer for it.
    Here is a small example that explains the principle:

    Thank you. However, I don't know how to integrate it into my program. I have the external variable "poster", they have to be numbers 1 to 6. They change in another part of the program. I want to display the variable value on an ongoing basis. I have prepared ID_TEXT_3 but I do not know how to display it to reflect the changes.

    Thank you for the changes and comments on the programming style. Now I will check how it goes.

    /*
    * myrolster.c
    *
    * Created on: 04.02.2019
    * Author: P
    */


    #include "stm32746g_discovery.h"
    #include "stm32746g_discovery_lcd.h"
    #include "stm32746g_discovery_sdram.h"
    #include "stm32746g_discovery_ts.h"


    #include "GUI.h"
    #include "DIALOG.h"
    #include "WM.h"
    #include "BUTTON.h"
    #include "EDIT.h"


    #define ID_WINDOW_0 (GUI_ID_USER + 0x00)
    #define ID_BUTTON_0 (GUI_ID_USER + 0x01)
    #define ID_BUTTON_1 (GUI_ID_USER + 0x02)
    #define ID_BUTTON_2 (GUI_ID_USER + 0x03)
    #define ID_SPINBOX_0 (GUI_ID_USER + 0x08)
    #define ID_SPINBOX_1 (GUI_ID_USER + 0x09)
    #define ID_TEXT_0 (GUI_ID_USER + 0xA0)
    #define ID_TEXT_1 (GUI_ID_USER + 0xA1)
    #define ID_TEXT_2 (GUI_ID_USER + 0xA2)
    #define ID_TEXT_3 (GUI_ID_USER + 0xA3)


    #define WORK 600


    extern int posters;
    extern int poster;
    extern int showing;


    void Stop(void);
    void Up(void);
    void Down(void);
    void Working(void);


    static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 272, 0, 0x0,
    0 }, { BUTTON_CreateIndirect, "scrollset", ID_BUTTON_0, 20, 10,
    440, 60, 0, 0x0, 0 }, { BUTTON_CreateIndirect, "up",
    ID_BUTTON_1, 20, 100, 170, 50, 0, 0x0, 0 }, { BUTTON_CreateIndirect,
    "down", ID_BUTTON_2, 20, 190, 170, 50, 0, 0x0, 0 }, {
    SPINBOX_CreateIndirect, "postershow", ID_SPINBOX_0, 290, 100,
    170, 50, 0, 0x0, 0 }, { SPINBOX_CreateIndirect, "time",
    ID_SPINBOX_1, 290, 190, 170, 50, 0, 0x0, 0 }, { TEXT_CreateIndirect,
    "signatureposters", ID_TEXT_0, 265, 140, 160, 40, 0, 0x0, 0 }, {
    TEXT_CreateIndirect, "signaturetime", ID_TEXT_1, 275, 230, 160,
    40, 0, 0x0, 0 }, { TEXT_CreateIndirect, "signatureposter",
    ID_TEXT_2, 120, 160, 160, 40, 0, 0x0, 0 }, { TEXT_CreateIndirect,
    "poster", ID_TEXT_3, 165, 75, 100, 100, 0, 0x0, 0 }, };


    static void _cbDialog(WM_MESSAGE * pMsg) {
    WM_HWIN hItem;
    WM_HWIN hEdit;
    int NCode;
    int Id;
    static int isButton_0 = 1;


    switch (pMsg->MsgId) {
    case WM_INIT_DIALOG:


    hItem = pMsg->hWin;
    WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(0x00A00000));


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetFont(hItem, GUI_FONT_32B_ASCII);
    BUTTON_SetText(hItem, "SETTING");


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetFont(hItem, GUI_FONT_24B_ASCII);
    BUTTON_SetText(hItem, "UP");
    BUTTON_SetTextColor(hItem, BUTTON_CI_PRESSED, GUI_RED);


    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    BUTTON_SetFont(hItem, GUI_FONT_20B_ASCII);
    BUTTON_SetText(hItem, "DOWN");
    BUTTON_SetTextColor(hItem, BUTTON_CI_PRESSED, GUI_RED);


    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);
    hEdit = SPINBOX_GetEditHandle(hItem);
    EDIT_SetDecMode(hEdit, 0, 1, 6, 0, 0);
    EDIT_SetTextAlign(hEdit, GUI_TA_HCENTER);
    SPINBOX_SetEdge(hItem, SPINBOX_EDGE_CENTER);
    SPINBOX_SetFont(hItem, GUI_FONT_32B_ASCII);
    SPINBOX_SetTextColor(hItem, SPINBOX_CI_ENABLED, GUI_RED);


    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
    hEdit = SPINBOX_GetEditHandle(hItem);
    EDIT_SetDecMode(hEdit, 0, 10, 180, 0, 0);
    EDIT_SetTextAlign(hEdit, GUI_TA_HCENTER);
    SPINBOX_SetEdge(hItem, SPINBOX_EDGE_CENTER);
    SPINBOX_SetFont(hItem, GUI_FONT_32B_ASCII);
    SPINBOX_SetStep(hItem, 10);
    SPINBOX_SetTextColor(hItem, SPINBOX_CI_ENABLED, GUI_RED);


    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
    TEXT_SetFont(hItem, GUI_FONT_24B_ASCII);
    TEXT_SetTextColor(hItem, GUI_WHITE);
    TEXT_SetText(hItem, "POSTERS");


    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
    TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
    TEXT_SetFont(hItem, GUI_FONT_24B_ASCII);
    TEXT_SetTextColor(hItem, GUI_WHITE);
    TEXT_SetText(hItem, "SHOW TIME");


    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
    TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
    TEXT_SetFont(hItem, GUI_FONT_24B_ASCII);
    TEXT_SetTextColor(hItem, GUI_WHITE);
    TEXT_SetText(hItem, "POSTER");


    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
    TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
    TEXT_SetFont(hItem, GUI_FONT_D80);
    TEXT_SetTextColor(hItem, GUI_RED);


    break;


    case WM_NOTIFY_PARENT:
    Id = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch (Id) {
    case ID_BUTTON_0:
    switch (NCode) {
    case WM_NOTIFICATION_CLICKED:
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    if (isButton_0) {
    isButton_0 = 0;
    BUTTON_SetText(hItem, "SCROLLING");
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetTextColor(hItem, 0, GUI_RED);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    WM_DisableWindow(hItem);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    WM_DisableWindow(hItem);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);
    WM_DisableWindow(hItem);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
    WM_DisableWindow(hItem);
    } else {
    isButton_0 = 1;
    BUTTON_SetText(hItem, "SETTING");
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetTextColor(hItem, 0, GUI_BLACK);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    WM_EnableWindow(hItem);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    WM_EnableWindow(hItem);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);
    WM_EnableWindow(hItem);
    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
    WM_EnableWindow(hItem);
    }
    break;
    case WM_NOTIFICATION_RELEASED:
    if (!isButton_0) {
    Working();
    }
    break;
    }
    break;
    case ID_BUTTON_1:
    switch (NCode) {
    case WM_NOTIFICATION_CLICKED:
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    if (isButton_0) {
    Up();
    }
    break;
    case WM_NOTIFICATION_RELEASED:
    Stop();
    break;
    }
    break;
    case ID_BUTTON_2:
    switch (NCode) {
    case WM_NOTIFICATION_CLICKED:
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    if (isButton_0) {
    Down();
    }
    break;
    case WM_NOTIFICATION_RELEASED:
    Stop();
    break;
    }
    break;
    case ID_SPINBOX_0:
    switch (NCode) {
    case WM_NOTIFICATION_VALUE_CHANGED:
    posters = SPINBOX_GetValue(pMsg->hWinSrc);
    break;
    }
    break;
    case ID_SPINBOX_1:
    switch (NCode) {
    case WM_NOTIFICATION_VALUE_CHANGED:
    showing = SPINBOX_GetValue(pMsg->hWinSrc);
    break;
    }
    break;
    }
    break;
    default:
    WM_DefaultProc(pMsg);
    break;
    }
    }


    WM_HWIN CreateWindow(void);


    WM_HWIN CreateWindow(void) {
    WM_HWIN hWin;


    hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),
    _cbDialog, WM_HBKWIN, 0, 0);
    return hWin;
    }


    void MainTask(void);


    void MainTask(void) {
    GUI_Clear();
    CreateWindow();
    }

    Thank you. However, I don't know how to integrate it into my program. I have the external variable "poster", they have to be numbers 1 to 6. They change in another part of the program. I want to display the variable value on an ongoing basis. I have prepared ID_TEXT_3 but I do not know how to display it to reflect the changes.

    I want to read the number set in SPINBOX, can it be that way?

    case ID_SPINBOX_1:
    switch (NCode) {
    case WM_NOTIFICATION_VALUE_CHANGED:
    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
    showing = SPINBOX_GetValue(pMsg->hWinSrc);
    break;
    }
    break;