Sim, eu tentei, mas já estou com a cabeça quebrada, pois entendi que os métodos X(...) e Y(...) vinculam rigidamente os elementos às coordenadas X e Y e, ao receber eventos sobre a alteração do tamanho da janela do formulário principal, eles não reagem de forma alguma à localização das coordenadas X e Y.
Você pode mostrar uma analogia do que precisa no exemplo de algum aplicativo pronto do Windows? Não tenho certeza se entendi o que você precisa. Ou descreva isso graficamente de alguma forma.
Se entendi corretamente, o elemento_2 deve ser vinculado à borda inferior do formulário, e o elemento_1 deve ser redimensionado automaticamente na vertical com um recuo para a altura do elemento_2.
Você pode mostrar um análogo do que precisa no exemplo de algum aplicativo pronto do Windows? Porque não tenho certeza se entendi corretamente o que você precisa. Ou descrevê-lo graficamente de alguma forma.
Se entendi corretamente, o elemento_2 deve ser vinculado à borda inferior do formulário, e o elemento_1 deve ser redimensionado automaticamente na vertical com um recuo para a altura do elemento_2.
Você entendeu certo, ou seja, quando o tamanho da janela muda, o elemento_1 muda o tamanho em Y, e você precisa que o elemento_2 acompanhe essa redução, ou seja, o dimensionamento normal dos elementos dentro do formulário. Até o momento, construí uma muleta para que o elemento_1 não seja dimensionado )). Tratarei desse problema mais tarde.
A biblioteca não tem a configuração de prioridade de exibição, pois os ícones de ordens/posições abertas têm prioridade mais alta e, portanto, são colocados no topo de todos os elementos gráficos da biblioteca.
Konstantin: a biblioteca carece de prioridades de exibição, pois os ícones de ordens/posições abertas têm prioridade mais alta e, portanto, são colocados no topo de todos os elementos gráficos da biblioteca.
Por exemplo, tenho este conteúdo do método CProgram::OnTradeEvent():
//+------------------------------------------------------------------+//| Evento de transação comercial|//+------------------------------------------------------------------+void CProgram::OnTradeEvent(void)
{
//--- Envio de um evento de negociação para todos os gráficos
m_events.SendEventToAllCharts(0,ON_TRADE_EVENT,0,0.0,m_program_name);
//--- Definir as transações da última posiçãoif(m_show_deals.CheckButtonState())
if(m_vdeals.ShowDealsLastPosition())
ResetWindow();//--- Verificando a distância do stop lossif(m_trailing_stop.CheckButtonState())
m_ctrade.CheckStopLossSize(::Symbol());
//--- Zeragem de variáveis para operações comerciais
m_ctrade.ZeroCalcPositionVariables();
//--- Inicialização da matriz de saldo e atualização da série no gráfico
InitBalanceArray();
m_line_chart.SeriesUpdate(0,m_balance_data,"Balance",clrCornflowerBlue);
}
Eu já vi isso, mas acho que você precisa complementar o uso no "núcleo" da biblioteca, ou seja, ao criar objetos gráficos:
boolObjectSetInteger(
long chart_id, // identificador de gráfico string name, // nome ENUM_OBJECT_PROPERTY_INTEGER prop_id, // propriedade long prop_value // valor
);
Em seguida, os gráficos estarão sobre os objetos gráficos da interface.
//---
Faça ResetWindow() por enquanto. Tentarei incorporá-lo ao kernel mais tarde para que ele seja atualizado automaticamente.
Não é bem assim, você precisa colocar todos os objetos gráficos em primeiro plano e, em seguida, os gráficos ficarão atrás; implementei isso muitas vezes em minha biblioteca de gráficos ))
não exatamente, você precisa priorizar todos os objetos gráficos em primeiro plano, então os gráficos ficarão para trás, já implementei isso muitas vezes em minha biblioteca gráfica))
Não sei o que você fez e como fez, mas, por padrão, eles estão em primeiro plano. Os criados mais recentemente estão no topo. A única maneira de alterar a prioridade após a criação é ocultar e mostrar os objetos novamente, exceto aqueles que deveriam estar na parte inferior.
void CTabs::CalculatingPatch(int &x,int &y,int &x_size,int &y_size)
{
if(ArraySize(m_tabs) == 0)
return;if(m_position_mode==TABS_TOP)
{
x =m_tabs[m_selected_tab].X()+1;
y =m_tabs[m_selected_tab].Y2()-1;
x_size =m_tabs[m_selected_tab].XSize()-2;
y_size =1;
}
elseif(m_position_mode==TABS_BOTTOM)
{
x =m_tabs[m_selected_tab].X()+1;
y =m_tabs[m_selected_tab].Y();
x_size =m_tabs[m_selected_tab].XSize()-2;
y_size =1;
}
elseif(m_position_mode==TABS_LEFT)
{
x =m_tabs[m_selected_tab].X2()-1;
y =m_tabs[m_selected_tab].Y()+1;
x_size =1;
y_size =m_tabs[m_selected_tab].YSize()-2;
}
elseif(m_position_mode==TABS_RIGHT)
{
x =m_tabs[m_selected_tab].X();
y =m_tabs[m_selected_tab].Y()+1;
x_size =1;
y_size =m_tabs[m_selected_tab].YSize()-2;
}
}
deve ser adicionado um destaque, que é uma verificação de matriz nula, pois sem essa verificação, no caso de não haver guias, o formulário inteiro trava com um erro.
deve ser adicionado um destaque, que é uma verificação de matriz nula, porque sem essa verificação, em caso de ausência de guias, o formulário inteiro trava com um erro.
Não está claro como você criou um elemento do tipo CTabs se há uma verificação no método de criação de guias:
...
//--- Se não houver guias no grupo, informe issoif(TabsTotal()<1)
{
::Print(__FUNCTION__," > Esse método deve ser chamado, ""quando houver pelo menos uma guia no grupo! Use o método CTabs::AddTab()");
return(false);
}
...
Sim, eu tentei, mas já estou com a cabeça quebrada, pois entendi que os métodos X(...) e Y(...) vinculam rigidamente os elementos às coordenadas X e Y e, ao receber eventos sobre a alteração do tamanho da janela do formulário principal, eles não reagem de forma alguma à localização das coordenadas X e Y.
Você pode mostrar uma analogia do que precisa no exemplo de algum aplicativo pronto do Windows? Não tenho certeza se entendi o que você precisa. Ou descreva isso graficamente de alguma forma.
Se entendi corretamente, o elemento_2 deve ser vinculado à borda inferior do formulário, e o elemento_1 deve ser redimensionado automaticamente na vertical com um recuo para a altura do elemento_2.
Você pode mostrar um análogo do que precisa no exemplo de algum aplicativo pronto do Windows? Porque não tenho certeza se entendi corretamente o que você precisa. Ou descrevê-lo graficamente de alguma forma.
Se entendi corretamente, o elemento_2 deve ser vinculado à borda inferior do formulário, e o elemento_1 deve ser redimensionado automaticamente na vertical com um recuo para a altura do elemento_2.
Você entendeu certo, ou seja, quando o tamanho da janela muda, o elemento_1 muda o tamanho em Y, e você precisa que o elemento_2 acompanhe essa redução, ou seja, o dimensionamento normal dos elementos dentro do formulário. Até o momento, construí uma muleta para que o elemento_1 não seja dimensionado )). Tratarei desse problema mais tarde.
a biblioteca carece de prioridades de exibição, pois os ícones de ordens/posições abertas têm prioridade mais alta e, portanto, são colocados no topo de todos os elementos gráficos da biblioteca.
Tente fazer o seguinte:
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão do artigo "GUI X: Seleção de texto em um campo de entrada de várias linhas (compilação 13)".
Anatoli Kazharski, 2017.05.08 21:40
Na classe do aplicativo personalizado, você precisa criar um método CProgram::OnTradeEvent().
E no arquivo principal ele deve ser chamado na função OnTrade():
//---
Por exemplo, tenho este conteúdo do método CProgram::OnTradeEvent():
Tente fazer assim:
Eu já vi isso, mas acho que você precisa complementar o uso no "núcleo" da biblioteca, ou seja, ao criar objetos gráficos:
property:
OBJPROP_BACK
Já vi isso, mas acho que no "núcleo" da biblioteca, ou seja, ao criar objetos gráficos, você precisa complementar o uso:
property:
OBJPROP_BACK
Assim, os gráficos ficarão sobre os objetos gráficos da interface.
//---
Faça ResetWindow() por enquanto. Tentarei incorporá-lo ao kernel mais tarde para que ele seja atualizado automaticamente.
Em seguida, os gráficos estarão sobre os objetos gráficos da interface.
//---
Faça ResetWindow() por enquanto. Tentarei incorporá-lo ao kernel mais tarde para que ele seja atualizado automaticamente.
Não é bem assim, você precisa colocar todos os objetos gráficos em primeiro plano e, em seguida, os gráficos ficarão atrás; implementei isso muitas vezes em minha biblioteca de gráficos ))
não exatamente, você precisa priorizar todos os objetos gráficos em primeiro plano, então os gráficos ficarão para trás, já implementei isso muitas vezes em minha biblioteca gráfica))
Não sei o que você fez e como fez, mas, por padrão, eles estão em primeiro plano. Os criados mais recentemente estão no topo. A única maneira de alterar a prioridade após a criação é ocultar e mostrar os objetos novamente, exceto aqueles que deveriam estar na parte inferior.
No método da classe CTabs:
deve ser adicionado um destaque, que é uma verificação de matriz nula, pois sem essa verificação, no caso de não haver guias, o formulário inteiro trava com um erro.
No método da classe CTabs:
deve ser adicionado um destaque, que é uma verificação de matriz nula, porque sem essa verificação, em caso de ausência de guias, o formulário inteiro trava com um erro.
Não está claro como você criou um elemento do tipo CTabs se há uma verificação no método de criação de guias: