Interfaz gráfica de usuario de origen colectivo. Prueba beta abierta. - página 24

 

He vuelto a releer todo el hilo y he visto muchos ejemplos de cómo "la interfaz está diseñada en un lenguaje de marcas". Pero no vi un solo ejemplo de Peter que mostrara exactamente cómo el "código de interfaz" interactuaría con el programa principal del desarrollador.

Nikolai y yo hemos intentado varias veces reducir a Peter a este tema, pero en ninguna parte vi ningún código de ejemplo para la interacción entre el programa principal y la GUI.

También me encontré con la expresión "imprimir código" varias veces mientras leía el hilo. Piotr, ¿qué significa esta frase? Creo que incluso hay una orden de este tipo en el "vigin" de Petr ..... ¿Por qué imprimir el código? ¿Por qué no se puede guardar en un archivo de texto con el nombre correcto y en el lugar adecuado?

Peter, no te precipites con el visualizador, tratemos la aplicabilidad de tu sugerencia en un contexto general.

Es decir, dibujar un formulario con un par de botones, con un combobox, con un par de casillas de verificación y con un campo de entrada. Por ahora, cómo referirse a estos controles en el código de procedimiento, darles valores y obtener valores de ellos.

Una vez resuelto eso, seguirás adelante.

 
Алексей Барбашин:

He vuelto a releer todo el hilo y he visto muchos ejemplos de cómo "la interfaz está diseñada en un lenguaje de marcas". Pero no vi un solo ejemplo de Peter que mostrara exactamente cómo el "código de interfaz" interactuaría con el programa principal del desarrollador.

Nikolai y yo hemos intentado varias veces reducir a Peter a este tema, pero en ninguna parte vi ningún código de ejemplo para la interacción entre el programa principal y la GUI.

También me encontré con la expresión "imprimir código" varias veces mientras leía el hilo. Piotr, ¿qué significa esta frase? Creo que incluso hay una orden de este tipo en el "vigin" de Petr ..... ¿Por qué imprimir el código? ¿Por qué no se puede guardar en un archivo de texto con el nombre correcto y en el lugar adecuado?

Peter, no te precipites con el visualizador, tratemos la aplicabilidad de tu sugerencia en un contexto general.

Es decir, dibujar un formulario con un par de botones, con un combobox, con un par de casillas de verificación y con un campo de entrada. Por ahora, cómo referirse a estos controles en el código de procedimiento, darles valores y obtener valores de ellos.

En cuanto lo descubras, seguirás adelante.

Encuentra el perfil de Oleg Papkov. Le hice un gui de 11 ventanas con muchos elementos diferentes en el lenguaje de marcas, hace un año. Todo funciona. Él sabe mejor que nadie de lo que habla. Estoy muy ocupado en este momento.

@Oleg Papkov

YAlexandr Atagyan(aquí está su panel)

 

Aquí está el archivo de conexión para este panel. Lo encontré después de todo.

Archivos adjuntos:
 

Este archivo contiene la funcionalidad para llamar a los controles, recuperar sus valores, establecer valores y estados. La funcionalidad es estándar y el usuario no necesita buscar en el archivo.

Archivos adjuntos:
 
Реter Konow:

Aquí está el archivo de conexión para este panel. Lo encontré después de todo.

No he visto ninguna interacción entre el programa principal y la interfaz en este código. Al parecer, hablamos idiomas completamente diferentes.

 
Алексей Барбашин:

No he visto ninguna interacción entre el programa principal y la interfaz en este código. Al parecer, hablamos idiomas completamente diferentes.

No tengo el programa principal. Las personas a las que hice estas interfaces lo tienen. La GUI estaba conectada a su programa(cuyo código no he visto en absoluto) a través de recursos. Y ahora, la conexión se integrará en el interior. Es decir, funcionará sin recursos. Directamente.

 
Реter Konow:

No tengo el programa principal. Las personas a las que hice estas interfaces lo tienen. La GUI estaba conectada a su programa(cuyo código no he visto en absoluto) a través de recursos. Y ahora, la conexión se integrará en el interior. Es decir, funcionará sin recursos. Directamente.

No es exactamente así como funciona. Estás haciendo un editor de interfaz visual. La parte visual de su aplicación es exactamente la interfaz gráfica de usuario que crea su aplicación. Y lo que se hace "entre bastidores", cómo se crean los nuevos textos de la GUI, es el programa principal.

Pero como usted tiene su propia visión de la programación.....

 
Алексей Барбашин:

Eso no es del todo correcto. Estás haciendo un editor de interfaz visual. La parte visual de su aplicación es exactamente la interfaz gráfica de usuario que crea su aplicación. Y lo que se hace "entre bastidores", cómo se crean los textos de la nueva GUI, es el programa principal.

Pero como usted tiene su propia visión de la programación.....

Tenemos una gran divergencia de opiniones, Alexey. Es mejor dejarlo así. No se puede encontrar un lenguaje común de inmediato y se necesita mucho tiempo. Voy a terminar la versión mínima y lo verás por ti mismo. Intentaré tenerlo hecho para pasado mañana.

 
Алексей Барбашин:

No he visto ninguna interacción entre el programa principal y la interfaz en este código. Al parecer, hablamos idiomas completamente diferentes.

Creo que eso es lo que quieres decir:

void SMSG(string par0 = "0", string par1 = "0", string par2 = "0", string par3 = "0")
{
 
 SEND send; uint i1 = 0;
 if(par0 != "0"){MSG += par0 + "`" + par1 + "`" + par2 + "`" + par3 + "~";}
 if(MSG != NULL && (par0 == (string)DRIVE_IS_READY || GUI_ЗАГРУЖЕН))
   {
 
    StringToCharArray(MSG,send.char_Send);
    ResourceCreate("::DRIVE_2_EA",send.uint_Send,8000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);
    //ArrayInitialize(send.char_Send,0);
    while(send.uint_Send[i1]){send.uint_Send[i1] = 0; i1++;}
    MSG = NULL;
   } 
}
//--------------------------------------------------------------------

//--------------------- -----------------------------------------------
void RMSG(bool Internal_message = 0)
{
 READ read; uint width,height, i1 = 0; string msg[], pars[]; bool q1 = 0,q2 = 0,q3 = 0;bool t = 0; string msg2read = NULL;
 int Номер_колонки = 0,T_header = 0,Программный_вызов = 0,Элемент = 0;
 read.uint_Read[0] = 0;
 //------------------------------------------------------------------------------------
 EA_ADRESS = ObjectGetString(0,"EA_2_DRIVE",OBJPROP_TEXT);
 
 //------------------------------------------------------------------------------------
 if(!Internal_message)t = ResourceReadImage(EA_ADRESS + "::EA_2_DRIVE",read.uint_Read,width,height);

 if(read.uint_Read[0] || Internal_message)
   { 
    int cnvs[100];
    int cnvs_2[100];
    //--------------------------------------
    ArrayInitialize(cnvs,0);
    ArrayInitialize(cnvs_2,0);
    //--------------------------------------
    Не_рисовать = 1;
    int Полная_перерисовка_канваса = 0;
    //--------------------------------------
    if(!Internal_message)msg2read = CharArrayToString(read.char_Read);
    else                 msg2read = i_MSG;
    //---------------------------------------------------------------------   
    ushort Msep = StringGetCharacter("~",0);
    int s = StringSplit(msg2read,Msep,msg);
    //---------------------------------------------------------------------    
    for(int a1 = 0; a1 < s; a1++)
      {
       ushort Psep = StringGetCharacter("`",0);
       int   w1   = StringSplit(msg[a1],Psep,pars);
       //--------------------------------------
       if(w1)
       {
       //------------------------------------------------------------------
       if((int)pars[0] == INIT_GUI && !GUI_ЗАГРУЖЕН)
         {
          Загрузить_GUI();         
         }        
       //--------------------------------------------------  
       if(GUI_ЗАГРУЖЕН)
       {
       if((int)pars[0] == M_COLOR)
         {
          G_CORE[(int)pars[1]][G_CORE[(int)pars[1]][_CURRENT_STATE]] = (int)pars[3];
          //---------------------------------------------
          G_CORE[(int)pars[1]][_REDROW] = 1;
          q1 = 1;  
         } 
       //------------------------------------------------------------------- 
       if((int)pars[0] == T_COLOR)
         {
          G_CORE[G_CORE[(int)pars[1]][_HIS_TEXT]][G_CORE[(int)pars[1]][_CURRENT_STATE]] = (int)pars[3];
          //---------------------------------------------
          if(!G_CORE[(int)pars[1]][_PARAMETER])
            {
             G_CORE[(int)pars[1]][_REDROW] = 1;
             q1 = 1;
            } 
          else
            {
             G_CORE[(int)pars[1]][_REDROW] = 2;
             q2 = 1;
            }      
         }
       //-------------------------------------------------------------------
       if((int)pars[0] == F_COLOR)
         {
          int Состояние_элемента = G_CORE[(int)pars[1]][_CURRENT_STATE];
          if(!Состояние_элемента)Состояние_элемента = _NEUTRAL_STATE;
          //---------------------------------------------
          switch(Состояние_элемента)
           {
            case _NEUTRAL_STATE:           G_CORE[(int)pars[1]][_N_FRAME_COLOR]  = (int)pars[3]; break;
            case _NEUTRAL_HIGHLIGHTED:     G_CORE[(int)pars[1]][_NH_FRAME_COLOR] = (int)pars[3]; break;
            case _ACTIVATED_STATE:         G_CORE[(int)pars[1]][_A_FRAME_COLOR]  = (int)pars[3]; break;
            case _ACTIVATED_HIGHLIGHTED:   G_CORE[(int)pars[1]][_AH_FRAME_COLOR] = (int)pars[3]; break;
           } 
         //---------------------------------------------
          G_CORE[(int)pars[1]][_REDROW] = 1;
          q1 = 1;
        }
      //-------------------------------------------------------------------
      if((int)pars[0] == STATE)
        {
         G_CORE[(int)pars[1]][_CURRENT_STATE] = (int)pars[3];
         //---------------------------------------------
          G_CORE[(int)pars[1]][_REDROW] = 1;
          q1 = 1; 
        }
      //-------------------------------------------------------------------     
      if((int)pars[0] == DEST_GUI)
        {
         for(int s1 = 2; s1 < 500; s1++){if(Открыто_окно[s1])Явление_окон(s1,_WINDOW_CLOSE);} 
         Стереть_Edit();   
        }
      //------------------------------------------------------------------- 
      if((int)pars[0] == SET_VALUE_BY_MAGIC || (int)pars[0] == SORT_COLOMN)
        {
         Номер_колонки = (int)MathRound((int)pars[2]/100000);
         T_header      = (int)pars[2] - (Номер_колонки*100000);
         Элемент       = Элемент_по_T_header_и_колонке(T_header,Номер_колонки,(int)pars[1]);        
        }
      //-------------------------------------------------------------------       
      if((int)pars[0] == SET_VALUE_BY_MAGIC || (int)pars[0] == SORT_COLOMN || (int)pars[0] == DELETE_ROW || (int)pars[0] == DELETE_ALL_ROWS)
        {
         if((int)pars[0] != SORT_COLOMN)int _Канвас = G_CORE[T_header][_CANVAS];
         Программный_вызов          = 1;
        }
      //-------------------------------------------------------------------   
      if((int)pars[0] == SET_VALUE_BY_MAGIC)
        {  
         //--------------------------------------------------
        
         //--------------------------------------------------        
         if(!Элемент)
           {         
            Полная_перерисовка_канваса = 1;
            //--------------------
            Явление_рядов(NEW_ROW,T_header,(int)pars[1]);
            Элемент      = Элемент_по_T_header_и_колонке(T_header,Номер_колонки,(int)pars[1]);
           } 
         //--------------------------------------------------
         
         //--------------------------------------------------
         Контроль_значений_движка(Элемент, pars[3], 1);
         //-------------------------------------------------- 
        }
      //------------------------------------------------------------------- 
      if((int)pars[0] == SORT_COLOMN)
        {
         Явление_рядов(SORT_COLOMN,T_header,Номер_колонки,(int)pars[3]);
        }
      //-------------------------------------------------------------------
      if((int)pars[0] == DELETE_ROW)     
        {
         Явление_рядов(DELETE_ROW,(int)pars[2],(int)pars[1]);
        } 
      //-------------------------------------------------------------------  
      if((int)pars[0] == DELETE_ALL_ROWS)
        {
         Явление_рядов(DELETE_ALL_ROWS,(int)pars[2],(int)pars[1]);
        } 
      //-------------------------------------------------------------------
      if((int)pars[0] == SET_RANGE_N_STEP)
        {
         P_CORE[(int)pars[1]][_V_MIN]  = (string)pars[2];
         P_CORE[(int)pars[1]][_V_MAX]  = (string)pars[3];
         P_CORE[(int)pars[1]][_V_STEP] = (string)pars[4];
         P_CORE[(int)pars[1]][_DIGITS] = (string)pars[5];
        }
      //-------------------------------------------------------------------
      //ВЫСКАКИВАЕТ НА КАЖДОМ ОБРАЩЕНИИ К ФУНКЦИИ.
      //------------------------------------------------------------------  
      /*if((int)pars[0] == W_CAPTION)
        {Alert("(int)pars[0] == W_CAPTION");
         CONTENT[G_CORE[WND[(int)pars[2]]][_WINDOW_NAME]] = pars[1];
         CONTENT[G_CORE[G_CORE[WND[(int)pars[2]]][_CAPTION_OBJECT]][_N_TEXT]] = pars[1];
         //-----------------------------------------------------------------------------
         int Длинна_текста = 0,Высота_текста = 0;
         //------------------------------------------------
         if(!TextSetFont("Microsoft JhengHei Light",10 *-10,FW_NORMAL,0)){Alert("*",__FUNCTION__,"*","Ошибка настройки параметров шрифта! ",GetLastError());}  
         TextGetSize(pars[1],Длинна_текста,Высота_текста);
         //------------------------------------------------
         G_CORE[WND[(int)pars[2]]][_CAPTION_X_SIZE] = Длинна_текста;
         G_CORE[WND[(int)pars[2]]][_CAPTION_Y_SIZE] = Высота_текста;   
         G_CORE[G_CORE[WND[(int)pars[2]]][_CAPTION_OBJECT]][_TEXT_X_SIZE] = Длинна_текста;
         G_CORE[G_CORE[WND[(int)pars[2]]][_CAPTION_OBJECT]][_TEXT_Y_SIZE] = Высота_текста;                       
         //------------------------------------------------
         Объект((int)pars[2]);
         Нарисовать_элемент(WND[(int)pars[2]] + 1,REDROW_WHOLE_CANVAS);
        }  */
      //-------------------------------------------------------------------       
      Программный_вызов = 0;
      //-------------------------------------------------------------------
      if((int)pars[0] == _SYNC_P_CORE)
        {
         if(!Internal_message)Контроль_значений_движка((int)pars[1], pars[3], 1);
         else                 Контроль_значений_движка((int)pars[1], pars[3]);
         q2 = 1;   
        } 
      //------------------------------------------------------------------- 
      if((int)pars[0] == OPEN_WINDOW) Явление_окон((int)pars[1],_WINDOW_OPEN,NULL);         
      if((int)pars[0] == CLOSE_WINDOW)Явление_окон((int)pars[1],_WINDOW_CLOSE,NULL);  
      //-------------------------------------------------------------------   
      if((int)pars[0] == ONLY_READ)G_CORE[(int)pars[1]][_READ_ONLY] = (int)pars[3];
      //=========================================================================================      
      
      //=========================================================================================          
      int Канвас = G_CORE[(int)pars[1]][_CANVAS];
      if((int)pars[0] == SET_VALUE_BY_MAGIC || (int)pars[0] == SORT_COLOMN)Канвас = G_CORE[Элемент][_CANVAS];
      //----------------------------------------------
      for(int r6 = 0; r6 < 100; r6++)
        { 
         if(cnvs[r6] == Канвас)break; 
         //--------------------------
         if(!cnvs[r6])
           {
            cnvs[r6]   = Канвас;
            cnvs_2[r6] = REDROW_CHANGED_ELEMENTS;
            //-----------------------------------
            if(Полная_перерисовка_канваса)
              {
               cnvs_2[r6] = REDROW_WHOLE_CANVAS;
               Полная_перерисовка_канваса = 0;
              } 
            //----------------------------------- 
            break;
           }
         //--------------------------
        }
       //=========================================================================================
       
       //=========================================================================================  
       
       //========================================================================================= 
        }
      } 
    }
    //------------------------------------------------------------------------------------------------------- 
    if(!q1 && q2)q3 = 1;
    else q3 = 0;
    //-------------------------------------------------------------------------------------------------------
    for(int f1 = 0; f1 < 100; f1++)
      {
       if(!cnvs[f1])break;
       if(Открыто_окно[G_CORE[cnvs[f1]][_WS_NUMBER]] && !G_CORE[cnvs[f1]][_HIDE] && cnvs_2[f1] == REDROW_CHANGED_ELEMENTS)
         {
          Нарисовать_элемент(cnvs[f1],REDROW_CHANGED_ELEMENTS);
         } 
       if(cnvs_2[f1] == REDROW_WHOLE_CANVAS)
         {
          Установить_параметры_прокрутки(cnvs[f1]);
          //----------------------------------------------------------
          //Перерисовываем канвас V_BOX-а.
          //----------------------------------------------------------
          Нарисовать_элемент(G_CORE[G_CORE[cnvs[f1]][_MAIN]][_CANVAS],G_CORE[cnvs[f1]][_MAIN]);
          //----------------------------------------------------------
          //Перерисовываем весь канвас.
          //----------------------------------------------------------    
          Нарисовать_элемент(cnvs[f1],REDROW_WHOLE_CANVAS);
          //---------------------------------------------------------- 
         }
      }
    i1 = 0;  
    //-------------------------------------------------------------------------------------------------------
    if(!Internal_message)while(read.uint_Read[i1]){read.uint_Read[i1] = 0; i1++;} 
    //ArrayInitialize(read.char_Read,0);
    //ResourceCreate("::EA_2_DRIVE",read.uint_Read,8000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);
    //-------------------------------------------------------------------------------------------------------
    Не_рисовать = 0;
   // MSG = NULL;
    i_MSG = NULL;
    //-------------------------------------------------------------------------------------------------------      
   }
   
}

Estas son las dos funciones que permiten a la GUI "comunicarse" con el programa. Reciben los mensajes, los desencriptan y los reenvían a los elementos o al programa.

 
Реter Konow:

Creo que eso es lo que querías decir:

Estas son las dos funciones que garantizan que la interfaz gráfica de usuario se "comunique" con el programa. Reciben los mensajes, los descifran y los reenvían a los elementos o al programa.

Es una obra maestra :)

Открыто_окно[G_CORE[cnvs[f1]][_WS_NUMBER]]

Si hay que rehacer o hacer algo, en una semana no recordarás qué se relaciona con qué.