クラウドソーシングによるGUI。オープンベータテストを実施。 - ページ 24

 

改めてスレッド全体を読み返してみると、「インターフェイスはマークアップ言語で設計されている」という例が多く見られました。しかし、「インターフェース・コード」が開発者のメイン・プログラムとどのように相互作用するかを正確に示した例は、ピーターからは1つも出てきませんでした。

Nikolaiと私は何度かPeterをこのトピックに減らそうと試みましたが、メインプログラムとGUIの間のインタラクションのサンプルコードはどこにもありませんでした。

また、このスレッドを読んでいて、「プリントコード」という表現に何度か出会いました。ピョートル、この言葉はどういう意味だ?ペツルの「ビギン」にもそんなコマンドがあったような・・・・。なぜコードを印刷するのか?なぜ、正しい名前で正しい場所にあるテキストファイルに保存できないのですか?

ピーター ビジュアライザーを急がせないで、あなたの提案の適用性を一般的な文脈で処理しましょう。

つまり、いくつかのボタン、コンボボックス、いくつかのチェックボックス、入力フィールドを 持つフォームを描きます。とりあえず、手続き的なコードでこれらのコントロールを参照し、値を与え、値を取得する方法について説明します。

それを整理した上で、次に進むのです。

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

改めてスレッド全体を読み返してみると、「インターフェイスはマークアップ言語で設計されている」という例が多く見られました。しかし、「インターフェース・コード」が開発者のメイン・プログラムとどのように相互作用するかを正確に示した例は、ピーターからは1つも出てきませんでした。

Nikolaiと私は何度かPeterをこのトピックに減らそうと試みましたが、メインプログラムとGUIの間のインタラクションのサンプルコードはどこにもありませんでした。

また、このスレッドを読んでいて、「プリントコード」という表現に何度か出会いました。ピョートル、この言葉はどういう意味だ?ペツルの「ビギン」にもそんなコマンドがあったような・・・・。なぜコードを印刷するのか?なぜ、正しい名前で正しい場所にあるテキストファイルに保存できないのですか?

ピーター ビジュアライザーを急がせないで、あなたの提案の適用性を一般的な文脈で処理しましょう。

つまり、いくつかのボタン、コンボボックス、いくつかのチェックボックス、入力フィールド を持つフォームを描きます。とりあえず、手続き的なコードでこれらのコントロールを参照し、値を与え、値を取得する方法について説明します。

それがわかれば、すぐに次のステップに進むことができます。

Oleg Papkovのプロフィールを見る。1年前にマークアップ言語で、いろいろな要素を盛り込んだ11ウィンドウのGUIを作ってあげました。すべてがうまくいく。彼は自分が何を言っているのか、誰よりもよく知っている。今、とても忙しいんです。

オレグ・パプコフ

そして、Alexandr Atagyan(彼のパネルがこちら)。

 

このパネルの接続ファイルはこちらです。やっぱり見つけた。

ファイル:
 

このファイルには、コントロールの 呼び出し、値の取得、値や状態の設定などの機能が含まれています。機能は標準的なもので、ユーザーがファイルを覗き込む必要はありません。

ファイル:
 
Реter Konow:

このパネルの接続ファイルはこちらです。やっぱり見つけた。

このコードには、メインプログラムとインターフェイスの間の相互作用が見当たりませんでした。どうやら私たちは全く違う言語を話しているようです。

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

このコードでは、メインプログラムとインターフェイスの間のインタラクションは見当たりませんでした。どうやら私たちは全く違う言語を話しているようです。

メインプログラムを持っていない。このインターフェースを作った相手には、それがある。GUIはリソース経由で彼らのプログラム(そのコードは全く見て いない)に接続されていました。そして今回、その接続部分が内部に統合されることになりました。つまり、リソースがなくても動作します。 直接的に

 
Реter Konow:

メイン プログラムがないんです。このインターフェースを作った相手には、それがある。GUIはリソース経由で彼らのプログラム(そのコードは全く見て いない)に接続されていました。そして今回、その接続部分が内部に統合されることになりました。つまり、リソースがなくても動作します。直接的に

それはちょっと違いますね。ビジュアルインターフェースのエディターを作っているんですね。アプリケーションのビジュアル部分は、まさにアプリケーションが作成するGUIです。そして、その「裏」で何が行われているかというと、新しいGUIのテキストがどのように作られているかというと、メインプログラムなのです。

でも、あなたにはあなたなりのプログラミングの考え方があるのだから......。

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

それはちょっと違うんじゃないですか?ビジュアルインターフェースのエディターを作っているんですね。アプリケーションのビジュアル部分は、まさにアプリケーションが作成するGUIです。そして、その「裏」で何が行われているかというと、新しいGUIのテキストがどのように作られているかが、メインのプログラムになっています。

でも、あなたにはあなたなりのプログラミングの考え方があるのだから......。

私たちは大きな見解の相違がありますね、アレクセイ。そのままにしておいたほうがいい。すぐに共通言語が見つかるわけではないし、時間もかかる。ミニマム版を完成させるので、自分の目で確かめてください。明後日までに完成させるようにします。

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

このコードでは、メインプログラムとインターフェイスの間のインタラクションは見当たりませんでした。どうやら私たちは全く違う言語を話しているようです。

ということなんでしょうね。

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

この2つの機能は、GUIとプログラムとの「コミュニケーション」を可能にするものです。メッセージを受信し、復号してエレメントかプログラムに転送する。

 
Реter Konow:

ということだと思います。

この2つの機能は、GUIとプログラムとの "コミュニケーション "を確保するためのものです。メッセージを受信し、解読して、エレメントかプログラムのどちらかに転送するのです。

これは傑作だ :)

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

もし、何かをやり直す必要があったとしても、1週間もすれば、何が何に関連しているのか思い出せなくなるでしょう。