Discussão do artigo "Interfaces gráficas XI: Integração da Biblioteca Gráfica Padrão (build 16)"

 

Novo artigo Interfaces gráficas XI: Integração da Biblioteca Gráfica Padrão (build 16) publicado:

Uma nova versão da biblioteca gráfica para a criação de gráficos científicos (a classe CGraphic) foi apresentada recentemente. Esta atualização da biblioteca desenvolvida para criar interfaces gráficas irá introduzir uma versão com um novo controle para a criação de gráficos. Agora está ainda mais fácil de visualizar os dados de diferentes tipos.

Abaixo encontramos o aspecto da interface gráfica do aplicativo MQL de teste:

 Fig. 3. Controles da segunda guia (Indents & history) do aplicativo MQL de teste.

Fig. 3. Controles da segunda guia (Indents & history) do aplicativo MQL de teste.

 
Ótimo artigo.
 

Ótima biblioteca!

 

Parabéns novamente! Bom trabalho!

 

Boa tarde.

O problema apareceu de onde eu não estava esperando...

Havia um programa - uma janela principal, uma janela de diálogo. Tudo estava bem. Adicionei outra janela de diálogo.

Agora é assim que eles se comportam. Abrimos uma janela de diálogo - está tudo bem, funciona. Feche-a. Abra a segunda, os elementos nela não reagem aos cliques, ou melhor, reagem de forma estranha (na captura de tela). Até você clicar no título da janela, tudo fica normal com essa janela. Mas o mesmo problema ocorre agora com a primeira janela, até que você clique no título.

Você poderia me dizer o que pode estar errado? Ou onde devo procurar?

Arquivos anexados:
123123123.gif  504 kb
 

Fiz o download do pacote e criei uma GUI de demonstração do CTable.

#include <\\EasyAndFastGUI\\WndEvents.mqh>

//+------------------------------------------------------------------+
//| Classe para criar um aplicativo|
//+------------------------------------------------------------------+
class CGUI : public CWndEvents {
  private:
    CWindow           m_window;
    CTable            m_table;

  public:
    bool              CreateGUI(const int x, const int y, const string caption_text);

  private:
    bool              CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text);
    bool              CreateTable(const int x_gap, const int y_gap);
};

bool CGUI::CreateGUI(const int x, const int y, const string caption_text) {
  int x_size = 400,
      y_size = 400;
  
  if (!CreateWindow(x, y, x_size, y_size, caption_text)) {
    return(false);
  }

  if (!CreateTable(1, 20)) {
    return(false);
  }

  m_chart.Redraw();
  return(true);
}

//+------------------------------------------------------------------+
//| Cria o formulário 1 para os controles|
//+------------------------------------------------------------------+
bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) {
  CWndContainer::AddWindow(m_window);

  m_window.XSize(x_size);
  m_window.YSize(y_size);
  m_window.Alpha(255);

  m_window.IsMovable(true);
  m_window.ResizeMode(true);
  m_window.CloseButtonIsUsed(true);
  m_window.FullscreenButtonIsUsed(true);
  m_window.CollapseButtonIsUsed(true);
  m_window.TooltipsButtonIsUsed(true);
  m_window.RollUpSubwindowMode(true, true);
  m_window.TransparentOnlyCaption(true);

  //--- Definir as dicas de ferramentas
  m_window.GetCloseButtonPointer().Tooltip("Close");
  m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize");
  m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  m_window.GetTooltipButtonPointer().Tooltip("Tooltips");

  m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND));
  m_window.BorderColor(clrMaroon);

  return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y));
}

//+------------------------------------------------------------------+
//| Criar uma tabela renderizada|
//+------------------------------------------------------------------+
bool CGUI::CreateTable(const int x_gap,const int y_gap) {
  m_table.MainPointer(m_window);

  int x_size = 300,
      y_size = 300;

  int column_width[] = {100, 200};

  m_table.XSize(x_size);
  m_table.YSize(y_size);

  m_table.TableSize(2, 10);

  m_table.ColumnsWidth(column_width);
  m_table.CellYSize(30);

  ENUM_ALIGN_MODE column_align[];
  ArrayResize(column_align, 2);
  ::ArrayInitialize(column_align, ALIGN_RIGHT);
  m_table.TextAlign(column_align);

  color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND);
  m_table.CellColor(bg_color);
  m_table.GridColor(bg_color);
  m_table.BorderColor(bg_color);
  m_table.FontSize(12);

  /*
 CScrollV *scroll_v = m_table.GetScrollVPointer();
 scroll_v.ChangeThumbSize(0, 0);
 scroll_v.Hide();
 scroll_v.IsVisible(false);

 CScrollH *scroll_h = m_table.GetScrollHPointer();
 scroll_h.ChangeThumbSize(0, 0);
 scroll_h.Hide();
 scroll_h.IsVisible(false);
 //*/
   

  //m_table.TextXOffset(5);
  //m_table.TextYOffset(4);
  m_table.ShowHeaders(false);
  m_table.SelectableRow(false);
  m_table.ColumnResizeMode(false);
  //m_table.IsZebraFormatRows(clrWhiteSmoke);
  //m_table.AutoXResizeMode(true);
  //m_table.AutoXResizeRightOffset(1);
  //m_table.AutoYResizeMode(true);
  //m_table.AutoYResizeBottomOffset(25);

  if (!m_table.CreateTable(x_gap, y_gap)) {
    return(false);
  }

  CWndContainer::AddToElementsArray(0, m_table);

  m_table.Update(true);

  m_window.Update(true);

  return(true);
}

//+------------------------------------------------------------------+
//| Função de inicialização especializada|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CGUI gui;
   gui.CreateGUI(10, 50, "Test GUI");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Função de tique de especialista|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

Mas descobri que o controle CTable sempre deixa espaços na barra de rolagem H/V, e não consegui removê-los com Hide(), IsVisiable(false).


Então, você poderia me dar uma solução alternativa?

Desde já, obrigado,

David

 

Talvez essa questão já tenha sido discutida, mas eu não a vi. Como fazer com que o painel seja redesenhado após adicionar novos objetos ao gráfico (por exemplo, linhas)


Percebi que, se eu minimizar o painel, ele já estará em cima dessas linhas, mas não de todas elas :((((



 
traderEvgen:

Talvez essa questão já tenha sido discutida, mas eu não a vi. Como fazer com que o painel seja redesenhado depois de adicionar novos objetos ao gráfico (por exemplo, linhas)?

  • Faça download da versão mais recente da biblioteca.
  • Tente chamar o método CWndEvents::ResetWindow().

P.S. A biblioteca não será mais atualizada. Todas as alterações, correções e adições necessárias, se houver necessidade, os usuários devem aprender a fazer por conta própria.

 
Anatoli Kazharski:

  • Faça o download da versão mais recente da biblioteca.
  • Tente chamar o método CWndEvents::ResetWindow().

P.S. A biblioteca não será mais atualizada. Todas as alterações, correções e adições necessárias, se houver necessidade, os usuários devem aprender a fazer por conta própria.


Entendi, obrigado

 

Infelizmente, as várias compilações (versões) não se encaixam.

Quero dizer: todos os exemplos do Artigo01 ao Artigo11 deveriam realmente funcionar sem erros.

No entanto, o compilador lança muitos avisos e erros nos exemplos anteriores.


Ao "copiar" as novas versões, os exemplos mais antigos não funcionam mais.

Além disso, as traduções são inadequadas ou inexistentes.

Excelente!


Isso é uma pena e é típico de muitas coisas no Metaquotes.

Seria realmente hora de colocar on-line uma versão completa e totalmente funcional, e não apenas pedaços incompatíveis.

Uma tabela de conteúdo dos arquivos de amostra e onde encontrar o que está faltando. Esse seria um tópico para o último artigo desta série, pois há rumores de que ela não será continuada.

Seria realmente uma pena desperdiçar todo esse trabalho se não houvesse exemplos funcionais para usar.

Atenciosamente, Otto Pauser

E o que realmente está faltando é um editor de diálogo!

 

Vou tentar