Crowdsourced GUI. Offene Betatests. - Seite 24

 

Ich habe den ganzen Thread noch einmal gelesen und viele Beispiele dafür gesehen, dass "die Schnittstelle in einer Auszeichnungssprache entworfen wurde". Aber ich habe kein einziges Beispiel von Peter gesehen, das genau zeigt, wie der "Schnittstellencode" mit dem Hauptprogramm des Entwicklers interagieren würde.

Nikolai und ich haben mehrmals versucht, Peter auf dieses Thema zu reduzieren, aber ich habe nirgendwo einen Beispielcode für die Interaktion zwischen dem Hauptprogramm und der grafischen Benutzeroberfläche gesehen.

Beim Lesen des Themas bin ich auch mehrmals auf den Ausdruck "Code drucken" gestoßen. Piotr, was bedeutet dieser Satz? Ich glaube, es gibt sogar einen solchen Befehl in Petr's "vigin" ..... Warum Code drucken? Warum kann sie nicht in einer Textdatei mit dem richtigen Namen und an der richtigen Stelle gespeichert werden?

Peter, überstürzen Sie nichts mit dem Visualisierer, sondern lassen Sie uns die Anwendbarkeit Ihres Vorschlags in einem allgemeinen Kontext untersuchen.

Das heißt, Sie zeichnen ein Formular mit mehreren Schaltflächen, einer Combobox, mehreren Kontrollkästchen und einem Eingabefeld. Im Moment geht es darum, wie man sich in prozeduralem Code auf diese Steuerelemente bezieht, ihnen Werte gibt und Werte von ihnen erhält.

Wenn Sie das geklärt haben, können Sie weitermachen.

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

Ich habe den ganzen Thread noch einmal gelesen und viele Beispiele dafür gesehen, dass "die Schnittstelle in einer Auszeichnungssprache entworfen wurde". Aber ich habe kein einziges Beispiel von Peter gesehen, das genau zeigt, wie der "Schnittstellencode" mit dem Hauptprogramm des Entwicklers interagieren würde.

Nikolai und ich haben mehrmals versucht, Peter auf dieses Thema zu reduzieren, aber ich habe nirgendwo einen Beispielcode für die Interaktion zwischen dem Hauptprogramm und der grafischen Benutzeroberfläche gesehen.

Beim Lesen des Themas bin ich auch mehrmals auf den Ausdruck "Code drucken" gestoßen. Piotr, was bedeutet dieser Satz? Ich glaube, es gibt sogar einen solchen Befehl in Petr's "vigin" ..... Warum Code drucken? Warum kann sie nicht in einer Textdatei mit dem richtigen Namen und an der richtigen Stelle gespeichert werden?

Peter, überstürzen Sie nichts mit dem Visualisierer, sondern lassen Sie uns die Anwendbarkeit Ihres Vorschlags in einem allgemeinen Kontext untersuchen.

Das heißt, Sie zeichnen ein Formular mit mehreren Schaltflächen, einer Combobox, mehreren Kontrollkästchen und einem Eingabefeld. Im Moment geht es darum, wie man in prozeduralem Code auf diese Steuerelemente verweist, ihnen Werte gibt und Werte von ihnen erhält.

Sobald Sie es herausgefunden haben, werden Sie weitermachen.

Finden Sie das Profil von Oleg Papkov. Ich habe ihm vor einem Jahr eine 11-Fenster-GUI mit vielen verschiedenen Elementen in der Markup-Sprache erstellt. Alles funktioniert. Er weiß besser als jeder andere, wovon er spricht. Ich bin im Moment sehr beschäftigt.

@Oleg Papkov

UndAlexandr Atagyan(hier ist sein Panel)

 

Hier ist die Verbindungsdatei für dieses Panel. Ich habe es doch noch gefunden.

Dateien:
 

Diese Datei enthält Funktionen zum Aufrufen von Steuerelementen, zum Abrufen ihrer Werte und zum Setzen von Werten und Zuständen. Die Funktionalität ist Standard und der Benutzer muss nicht in die Datei schauen.

Dateien:
 
Реter Konow:

Hier ist die Verbindungsdatei für dieses Panel. Ich habe es doch noch gefunden.

Ich habe in diesem Code keine Interaktion zwischen dem Hauptprogramm und der Schnittstelle gesehen. Offenbar sprechen wir völlig unterschiedliche Sprachen.

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

Ich habe in diesem Code keine Interaktion zwischen dem Hauptprogramm und der Schnittstelle gesehen. Offenbar sprechen wir völlig unterschiedliche Sprachen.

Ich habe das Hauptprogramm nicht. Die Leute, denen ich diese Schnittstellen gemacht habe, haben sie. Die grafische Benutzeroberfläche war über Ressourcen mit ihrem Programm verbunden(dessen Code ich überhauptnicht gesehen habe). Und jetzt wird die Verbindung auch noch integriert. Das heißt, es wird ohne Ressourcen funktionieren. Unmittelbar.

 
Реter Konow:

Ich habe das Hauptprogramm nicht. Die Leute, denen ich diese Schnittstellen gemacht habe, haben sie. Die grafische Benutzeroberfläche war über Ressourcen mit ihrem Programm verbunden(dessen Code ich überhauptnicht gesehen habe). Und jetzt wird die Verbindung auch noch integriert. Das heißt, es wird ohne Ressourcen funktionieren. Unmittelbar.

So funktioniert das nicht ganz. Sie erstellen einen visuellen Schnittstellen-Editor. Der visuelle Teil Ihrer Anwendung ist genau die grafische Benutzeroberfläche, die Ihre Anwendung erstellt. Und was "hinter den Kulissen" geschieht, wie die neuen GUI-Texte erstellt werden, ist das Hauptprogramm.

Aber da Sie Ihre eigene Vorstellung von der Programmierung haben.....

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

Das ist nicht ganz richtig. Sie erstellen einen visuellen Schnittstellen-Editor. Der visuelle Teil Ihrer Anwendung ist genau die grafische Benutzeroberfläche, die Ihre Anwendung erstellt. Und was "hinter den Kulissen" geschieht, wie die Texte der neuen GUI erstellt werden, ist das Hauptprogramm.

Aber da Sie Ihre eigene Vorstellung von der Programmierung haben.....

Wir haben eine große Meinungsverschiedenheit, Alexey. Es ist besser, es dabei zu belassen. Man kann nicht sofort eine gemeinsame Sprache finden und es braucht viel Zeit. Ich werde die Minimalversion fertigstellen, dann können Sie sich selbst davon überzeugen. Ich werde versuchen, sie bis übermorgen fertig zu stellen.

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

Ich habe in diesem Code keine Interaktion zwischen dem Hauptprogramm und der Schnittstelle gesehen. Offenbar sprechen wir völlig unterschiedliche Sprachen.

Ich glaube, das ist es, was Sie meinen:

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

Dies sind die beiden Funktionen, die es der grafischen Benutzeroberfläche ermöglichen, mit dem Programm zu "kommunizieren". Sie empfangen Nachrichten, entschlüsseln sie und leiten sie entweder an die Elemente oder an das Programm weiter.

 
Реter Konow:

Ich glaube, das haben Sie gemeint:

Diese beiden Funktionen sorgen dafür, dass die grafische Benutzeroberfläche mit dem Programm "kommuniziert". Sie empfangen Nachrichten, entschlüsseln sie und leiten sie entweder an die Elemente oder an das Programm weiter.

Das ist ein Meisterwerk :)

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

Wenn etwas neu gemacht werden muss, werden Sie sich in einer Woche nicht mehr daran erinnern, was zu was gehört.