Kitle kaynaklı GUI. Açık beta testi. - sayfa 24

 

Tüm şubeyi tekrar okudum, "arayüzün biçimlendirme dilinde nasıl tasarlandığına" dair birçok örnek gördüm. Ancak, "arayüz kodunun" geliştiricinin ana programıyla nasıl etkileşime gireceğini tam olarak gösterecek olan Peter'ın örneğini hiçbir yerde görmedim.

Nikolay ve ben birkaç kez Peter'ı bu konuya getirmeye çalıştık, ancak hiçbir yerde ana program ile gösterilen GUI arasındaki etkileşim örneğinin kodu yoktu.

Ayrıca şubeyi okuma sürecinde birkaç kez "kodu yazdır" ifadesine rastladım. Peter, bu cümleyi nasıl anlamalı? Görünüşe göre Peter'ın "vizyonunda" böyle bir komut bile var .... Kodu neden yazdıralım? Neden doğru adla ve doğru yerde bir metin dosyasına kaydedilemiyor?

Piotr, görselleştiriciyi ortaya çıkarmak için acele etmeyin, teklifinizin genel bağlamda uygulanabilirliğini bulalım.

Yani, birkaç düğme, bir birleşik giriş kutusu, birkaç onay kutusu ve bir giriş alanı içeren bir form çizin. Şimdilik prosedürel kodda bu kontrollere nasıl ulaşılır, bunlara nasıl değer verilir ve onlardan değer alınır.

Bu sorunu halleder çözmez hemen devam edeceğiz.

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

Tüm şubeyi tekrar okudum, "arayüzün biçimlendirme dilinde nasıl tasarlandığına" dair birçok örnek gördüm. Ancak, "arayüz kodunun" geliştiricinin ana programıyla nasıl etkileşime gireceğini tam olarak gösterecek olan Peter'ın örneğini hiçbir yerde görmedim.

Nikolay ve ben birkaç kez Peter'ı bu konuya getirmeye çalıştık, ancak hiçbir yerde ana program ile gösterilen GUI arasındaki etkileşim örneğinin kodu yoktu.

Ayrıca şubeyi okuma sürecinde birkaç kez "kodu yazdır" ifadesine rastladım. Peter, bu cümleyi nasıl anlamalı? Görünüşe göre Peter'ın "vizyonunda" böyle bir komut bile var .... Kodu neden yazdıralım? Neden doğru adla ve doğru yerde bir metin dosyasına kaydedilemiyor?

Piotr, görselleştiriciyi ortaya çıkarmak için acele etmeyin, teklifinizin genel bağlamda uygulanabilirliğini bulalım.

Yani, birkaç düğme, bir birleşik giriş kutusu, birkaç onay kutusu ve bir giriş alanı içeren bir form çizin. Şimdilik prosedürel kodda bu kontrollere nasıl ulaşılır, bunlara nasıl değer verilir ve onlardan değer alınır.

Bu sorunu halleder çözmez hemen devam edeceğiz.

Oleg Papkov'un profilini bulun. Onu bir yıl önce biçimlendirme dilinde birçok farklı öğeye sahip 11 pencereli bir GUI yaptım. Her şey çalışıyor. Ne dediğini herkesten daha iyi anlıyor. Şu anda çok meşgulüm.

@Oleg Papkov

Ve ayrıca Alexandr Atagyan (işte onun paneli)

 

İşte bu panel için bağlantı dosyası. Neyse buldum.

Dosyalar:
 

Bu dosya, kontrolleri çağırmak, değerlerini almak, değerleri ve durumları ayarlamak için işlevsellik içerir. İşlevsellik normaldir ve kullanıcının dosyaya bakmasına gerek yoktur.

Dosyalar:
 
Реter Konow :

İşte bu panel için bağlantı dosyası. Neyse buldum.

Bu kodda ana programın arayüz ile etkileşimini görmedim. Görünüşe göre tamamen farklı diller konuşuyoruz.

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

Bu kodda ana programın arayüz ile etkileşimini görmedim. Görünüşe göre tamamen farklı diller konuşuyoruz.

Ana programım yok. Bu arayüzleri yaptığım kişiler için. GUI, programlarına ( kodunu hiç görmediğim ) kaynaklar aracılığıyla bağlandı. Ve şimdi, bağlantı içeriye entegre edilecek. Onlar. kaynaklar olmadan çalışacaktır. Direkt olarak.

 
Реter Konow :

Bir ana programım yok . Bu arayüzleri yaptığım kişiler için. GUI, programlarına ( kodunu hiç görmediğim ) kaynaklar aracılığıyla bağlandı. Ve şimdi, bağlantı içeriye entegre edilecek. Onlar. kaynaklar olmadan çalışacaktır. Direkt olarak.

Bu tamamen doğru değil. Görsel bir arayüz editörü yapıyorsunuz. Uygulamanızın görsel kısmı, yalnızca uygulamanızın oluşturduğu GUI'dir. Ancak "perde arkasında" ne yapılır, yeni GUI metinlerinin nasıl oluşturulduğu - bu ana programdır.

Ama kendi programlama görüşünüz olduğu için .....

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

Bu tamamen doğru değil. Görsel bir arayüz editörü yapıyorsunuz. Uygulamanızın görsel kısmı, yalnızca uygulamanızın oluşturduğu GUI'dir. Ancak "perde arkasında" ne yapılır, yeni GUI metinlerinin nasıl oluşturulduğu - bu ana programdır.

Ama kendi programlama görüşünüz olduğu için .....

Büyük fikir ayrılıklarımız var Alexey. Bırak gitsin. Ortak bir dil hemen bulunamıyor ve çok zaman alıyor. Minimal versiyonu bitireceğim ve kendiniz göreceksiniz. Yarından sonraki gün bitirmeye çalışıyorum.

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

Bu kodda ana programın arayüz ile etkileşimini görmedim. Görünüşe göre tamamen farklı diller konuşuyoruz.

Sanırım şunu demek istiyorsun:

 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 ;
     //-------------------------------------------------------------------------------------------------------      
   }
   
}

Bunlar, GUI ve program arasında "iletişim" sağlayan iki işlevdir. Mesajları alırlar, şifrelerini çözerler ve bunları ya öğelere ya da programa iletirler.

 
Реter Konow :

Sanırım şunu demek istiyorsun:

Bunlar, GUI ve program arasında "iletişim" sağlayan iki işlevdir. Mesajları alırlar, şifrelerini çözerler ve bunları ya öğelere ya da programa iletirler.

bir başyapıt :)

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

Bir şeyin yeniden yapılması / tamamlanması gerekiyorsa, bir hafta içinde neyin neye ait olduğunu hatırlamayacaksınız.