Discussão do artigo "Interfaces Gráficas XI: Controles renderizados (build 14.2)" - página 3

 
Artyom Trishkin:

Tol, em qual dos artigos desta série você pode ler sobre CKeys?

...

Ou seja: eu inicio um programa e começo a pressionar Backspace - todos os controles são excluídos a cada pressionamento de Backspace, começando pelo último adicionado. Eventualmente, a janela de formulário já vazia também é excluída.

...


GUIs X: elemento de campo de entrada de texto com várias linhas (compilação 8)

Não foi possível reproduzir a situação em que o pressionamento da tecla Backspace exclui elementos da GUI.

 
Artyom Trishkin:

Se você escrever uma linha em Program.mqh em TestLibrary14 - alteração da cor do título da janela:

Então, minimizar a janela retorna a cor para o valor padrão. E as dicas de ferramentas, os botões minimizar/não modificar e fechar são repintados na cor do título da janela que foi definida programaticamente. E a cor desses botões muda para a cor padrão somente quando o cursor é passado sobre eles.

...

Esqueci de acrescentar a alteração da cor do título do formulário ao passar o mouse. Isso estará em uma das próximas atualizações.

No momento, a cor precisa ser definida para ambos os estados:

...
   m_window.CaptionColor(clrDimGray);
   m_window.CaptionColorHover(clrDimGray);
...

//---

Para os botões, a cor pode ser definida por meio de seus ponteiros e após a criação do formulário.

...
   m_window.GetCollapseButtonPointer().BackColorHover(clrGray);
   m_window.GetTooltipButtonPointer().BackColorHover(clrGray);
//---
   m_window.GetCollapseButtonPointer().BackColorPressed(clrGray);
   m_window.GetTooltipButtonPointer().BackColorPressed(clrGray);
...

//---


 

Em minha opinião, o termo "núcleo de biblioteca" usado no artigo não está correto. O termo "mecanismo de biblioteca" foi usado anteriormente, mas não se encaixa perfeitamente.

O termo "núcleo" deve se referir a uma matriz estática que combina todas as informações necessárias, e o termo "mecanismo" deve se referir a um mecanismo que trabalha com essas informações e implementa um conjunto de tarefas.

O termo "biblioteca" em programação significa uma funcionalidade diversa, díspar e independente que serve como um kit de ferramentas para resolver um conjunto de tarefas e não está unida em torno de um único centro. Esse kit de ferramentas não é um "mecanismo" nem um "núcleo", mas apenas um conjunto de ferramentas para criar mecanismos de usuário.

Se uma biblioteca contém um kernel e um mecanismo, ela não é mais uma biblioteca, mas um sistema que funciona como um todo.

A transformação de uma biblioteca gráfica em um mecanismo integral para a criação de GUI é um estágio natural de desenvolvimento, após o qual a biblioteca como tal não existirá mais. Ou seja, não haverá necessidade de funcionalidades diferentes, porque um mecanismo pronto resolve um conjunto de tarefas com muito mais eficiência.

Talvez agora a biblioteca esteja se transformando em um mecanismo desse tipo, mas no momento isso ainda não aconteceu. Portanto, os termos "núcleo" e "mecanismo" da biblioteca não são muito corretos.

imho.

 

Olá, o conjunto de controles é muito bom e útil, mas seria ainda melhor se você pudesse lidar melhor com configurações de DPI mais altas.

Obviamente, os bitmaps serão exibidos corretamente, mas o texto não. Ele é deslocado para baixo e cortado, conforme mostrado na imagem abaixo:

Eu uso as seguintes configurações de exibição :


 
Artur Zas:

Olá, o conjunto de controles é muito bom e útil, mas seria ainda melhor se você pudesse lidar melhor com configurações de DPI mais altas.

Obviamente, os bitmaps serão exibidos corretamente, mas o texto não. Ele é deslocado para baixo e cortado, conforme mostrado na imagem abaixo:

Eu uso as seguintes configurações de exibição :


 
Facundo Laje:
Olá, ele pode ser usado com o MT4?

 
Facundo Laje:
Olá, ela poderia ser usada com o MT4?

Tecnicamente falando, sim, pois o OBJ-BITMAP_LABEL também está disponível na MQL4, mas você precisaria ajustar o código da biblioteca, pois há alguns lugares em que o código simplesmente não compila usando o compilador MQL4.

Tentarei brincar com a biblioteca e o informarei se, de alguma forma, for capaz de portá-la para MQL4. Você também pode tentar por conta própria. Basta renomear a extensão .mq5 do EA de exemplo para .mq4 e tentar compilar o código.

Obviamente, você obterá erros de compilação, mas poderá verificar onde e quais são eles.

 

Hi,

Estou tentando desenvolver meu próprio painel de controle seguindo esta série de artigos... Estou interessado na parte do modo de várias janelas (Artigo04), mas usei a Biblioteca14 atualizada (Artigo10).

O que consegui até agora (nas fotos anexadas):


imagem1

imagem2

O que eu perdi porque a janela 2 e a janela 3 não estão se movendo, não estão fechando quando pressiono os botões de fechar e o botão de recolher está faltando...

Aqui estão as partes do código das janelas 2 e 3:

//-------- Window2-------
#resource "\\Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp"
bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- Armazenar o ponteiro da janela
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_mb_contextmenu1);
//--- Coordenadas
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- Propriedades
   m_window2.Movable(true);
   m_window2.Alpha(200);
   m_window2.XSize(300);
   m_window2.YSize(100);
   m_window2.IconXGap(3);
   m_window2.IconYGap(2);
   m_window2.WindowType(W_DIALOG);
   m_window2.CloseButtonIsUsed(true);
   m_window2.GetCloseButtonPointer().Tooltip("Close");
   m_window2.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window2.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- Criando um formulário
   if(!m_window2.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
//------------------Window3----------------
bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- Armazenar o ponteiro da janela
   CWndContainer::AddWindow(m_window3);
    m_window2.MainPointer(m_menubar);
//--- Coordenadas
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- Propriedades
   m_window3.Movable(true);
   m_window3.Alpha(200);
   m_window3.XSize(200);
   m_window3.YSize(200);
   m_window3.IconXGap(3);
   m_window3.IconYGap(2);
   m_window3.WindowType(W_DIALOG);
   m_window3.CloseButtonIsUsed(true);
   m_window3.GetCloseButtonPointer().Tooltip("Close");
   m_window3.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window3.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- Criando um formulário
   if(!m_window3.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }

e a parte OnEvent:

void CmyPanel_Test2::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {

   if(id==CHARTEVENT_CUSTOM+ON_CLICK_MENU_ITEM)
     {
      PRINT_EVENT(ON_CLICK_MENU_ITEM,id,lparam,dparam,sparam);
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
     PRINT_EVENT(ON_CLICK_BUTTON,id,lparam,dparam,sparam);
     
     if(lparam==1 && dparam==1)
     {
      m_window3.Show();
      return;
     }
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_CONTEXTMENU_ITEM)
     {
      if (dparam==0)
      m_window2.Show();
      PRINT_EVENT(ON_CLICK_CONTEXTMENU_ITEM,id,lparam,dparam,sparam);
      return;
     }

Obrigado.

 
zlory73:

Hi,

Estou tentando desenvolver meu próprio painel de controle seguindo esta série de artigos... Estou interessado na parte do modo de várias janelas (Artigo04), mas usei a Biblioteca14 atualizada (Artigo10).

O que consegui até agora (nas fotos anexadas):


O que eu perdi porque a janela 2 e a janela 3 não estão se movendo, não estão fechando quando pressiono os botões de fechar e o botão de recolher está faltando...

Aqui estão as partes do código das janelas 2 e 3:

e a parte OnEvent:

Obrigado.


Desculpe, modifiquei:

bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- Armazenar o ponteiro da janela
   CWndContainer::AddWindow(m_window3);
    m_window3.MainPointer(m_window);

e:

bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- Armazenar o ponteiro da janela
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_window);

ainda nada...

Por favor, me ajude1

 
Artur Zas:

Tecnicamente falando, deveria, pois OBJ-BITMAP_LABEL também está disponível em MQL4, mas você precisaria ajustar o código da biblioteca, pois há alguns lugares em que o código simplesmente não compila usando o compilador MQL4.

Tentarei brincar com a biblioteca e o informarei se, de alguma forma, for capaz de portá-la para MQL4. Você também pode tentar por conta própria. Basta renomear a extensão .mq5 do EA de exemplo para .mq4 e tentar compilar o código.

Obviamente, você obterá erros de compilação, mas poderá verificar onde e quais são eles.