GUI de origem popular. Testes beta abertos. - página 24

 

Reli todo o fio novamente, e vi muitos exemplos de como "a interface é projetada em uma linguagem de marcação". Mas eu não vi um único exemplo de Peter que mostrasse exatamente como o "código de interface" interagiria com o programa principal do desenvolvedor.

Nikolai e eu tentamos várias vezes reduzir Peter a este tópico, mas em nenhum lugar eu vi qualquer código de exemplo para a interação entre o programa principal e a GUI.

Encontrei também a expressão "código de impressão" várias vezes enquanto lia o fio. Piotr, qual é o significado desta frase? Acho que existe até um tal comando na "vigin" de Petr ..... Por que imprimir código? Por que não pode ser salvo em um arquivo de texto com o nome certo e no lugar certo?

Peter, não apresse o visualizador, vamos lidar com a aplicabilidade de sua sugestão em um contexto geral.

Ou seja, desenhe um formulário com um par de botões, com uma combobox, com um par de caixas de seleção e com um campo de entrada. Por enquanto, como se referir a esses controles em código de procedimento, dar-lhes valores e obter valores deles.

Uma vez resolvido isso, você vai seguir em frente.

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

Reli todo o fio novamente, e vi muitos exemplos de como "a interface é projetada em uma linguagem de marcação". Mas eu não vi um único exemplo de Peter que mostrasse exatamente como o "código de interface" interagiria com o programa principal do desenvolvedor.

Nikolai e eu tentamos várias vezes reduzir Peter a este tópico, mas em nenhum lugar eu vi qualquer código de exemplo para a interação entre o programa principal e a GUI.

Encontrei também a expressão "código de impressão" várias vezes enquanto lia o fio. Piotr, qual é o significado desta frase? Acho que existe até um tal comando na "vigin" de Petr ..... Por que imprimir código? Por que não pode ser salvo em um arquivo de texto com o nome certo e no lugar certo?

Peter, não apresse o visualizador, vamos lidar com a aplicabilidade de sua sugestão em um contexto geral.

Ou seja, desenhe um formulário com um par de botões, com uma combobox, com um par de caixas de seleção e com um campo de entrada. Por enquanto, como se referir a esses controles em código de procedimento, dar-lhes valores e obter valores deles.

Assim que você descobrir, você seguirá em frente.

Encontre o perfil de Oleg Papkov. Fiz dele um guião de 11 janelas com muitos elementos diferentes na linguagem de marcação, um ano atrás. Tudo funciona. Ele sabe melhor do que ninguém do que está falando. Estou muito ocupado no momento.

@Oleg Papkov

EAlexandr Atagyan(aqui está seu painel)

 

Aqui está o arquivo de conexão para este painel. Afinal de contas, foi encontrado.

Arquivos anexados:
 

Este arquivo contém a funcionalidade de chamar controles, recuperar seus valores, definir valores e estados. A funcionalidade é padrão e o usuário não precisa olhar para o arquivo.

Arquivos anexados:
 
Реter Konow:

Aqui está o arquivo de conexão para este painel. Afinal de contas, foi encontrado.

Eu não vi nenhuma interação entre o programa principal e a interface neste código. Aparentemente, falamos idiomas completamente diferentes.

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

Eu não vi nenhuma interação entre o programa principal e a interface neste código. Aparentemente, falamos idiomas completamente diferentes.

Eu não tenho o programa principal. As pessoas a quem eu fiz essas interfaces o têm. A GUI foi conectada ao programa deles(cujo código não vi em absoluto) através de recursos. E agora, a conexão será integrada por dentro. Ou seja, funcionará sem recursos. Diretamente.

 
Реter Konow:

Eu não tenho o programa principal. As pessoas a quem eu fiz essas interfaces o têm. A GUI foi conectada ao programa deles(cujo código não vi em absoluto) através de recursos. E agora, a conexão será integrada por dentro. Ou seja, funcionará sem recursos. Diretamente.

Não é exatamente assim que funciona. Você está fazendo um editor de interface visual. A parte visual de sua aplicação é exatamente a GUI que sua aplicação cria. E o que é feito "nos bastidores", como os novos textos da GUI são criados, é o programa principal.

Mas como você tem sua própria visão da programação.....

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

Isso não está muito certo. Você está fazendo um editor de interface visual. A parte visual de sua aplicação é exatamente a GUI que sua aplicação cria. E o que é feito "nos bastidores", como os textos da nova GUI são criados, é o programa principal.

Mas como você tem sua própria visão da programação.....

Temos uma enorme divergência de pontos de vista, Alexey. É melhor deixar as coisas assim. Não é possível encontrar uma linguagem comum de imediato e isso leva muito tempo. Eu terminarei a versão mínima e você verá por si mesmo. Tentarei fazer isso até depois de amanhã.

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

Eu não vi nenhuma interação entre o programa principal e a interface neste código. Aparentemente, falamos idiomas completamente diferentes.

Acho que é isso que você quer dizer:

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 são as duas funções que permitem à GUI "se comunicar" com o programa. Eles recebem mensagens, decodificam-nas e as encaminham para os elementos ou para o programa.

 
Реter Konow:

Acho que era isso que você queria dizer:

Estas são as duas funções que garantem a "comunicação" da GUI com o programa. Eles recebem mensagens, decodificam-nas e as encaminham para os elementos ou para o programa.

Esta é uma obra-prima :)

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

Se algo precisa ser refeito, em uma semana você não se lembrará do que está relacionado a quê.