Discussão do artigo "DoEasy. Controles (Parte 19): Rolagem de guias no elemento TabControl, eventos de objetos WinForms"
Ao mover o mouse e rolar a roda acima do painel, o próprio gráfico às vezes pode rolar.
Como obter o elemento criado de forma inequívoca? Se já tivermos elementos do tipo GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL antes, o uso do índice 0 será incorreto.
pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0);
Em seguida... Obtivemos o ID do cabeçalho da guia de interesse:
int my_id=-1; ... CTabHeader *th=tc.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_HEADER,4); my_id=th.ID();
Capture o evento de alteração da guia ativa, mais precisamente, o evento de clicar no cabeçalho. Ao clicar na guia ativa, o evento ainda é gerado.
if((id-CHARTEVENT_CUSTOM==WF_CONTROL_EVENT_TAB_SELECT)&&(lparam==my_id)) { Print(sparam); }
Agora, como obter o objeto do campo ativo? Ele é um CTabField, certo?
Como descobrir o objeto pai?
Agora, como obter o objeto do campo ativo? Ele é um CTabField, certo?
Como descobrir o objeto pai?
1. O índice 0 é usado para o primeiro objeto anexado criado para o elemento. O índice 1 é para o segundo, o índice 2 é para o terceiro e assim por diante.
2. Você pode recuperar um campo do cabeçalho recuperado pelo índice de interesse:
//--- Criar elemento de controle TabControl pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0); if(tc!=NULL) { CTabHeader *th=tc.GetTabHeader(index); CTabField *tf=th.GetFieldObj(); }
2.1 Você pode recuperar o campo de tabulação do objeto TabControl no índice de interesse:
//--- Criar elemento de controle TabControl pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0); if(tc!=NULL) { CTabField *tf=tc.GetTabField(index); }
3. Não entendi bem a pergunta. Se você precisar descobrir a qual objeto o atual está vinculado, deve funcionar assim:
pnl=engine.CreateWFPanel("WinForms Panel"+(string)i,(i==0 ? 50 : 70),(i==0 ? 50 : 70),410,200,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false); if(pnl!=NULL) { pnl.Hide(); Print(DFUN,"Descrição do painel: ",pnl.Description(),", Tipo e nome: ",pnl.TypeElementDescription()," ",pnl.Name()); //--- Definir o preenchimento como 4 pnl.SetPaddingAll(3); //--- Defina os sinalizadores para deslocamento, redimensionamento automático e modo de redimensionamento automático a partir dos parâmetros de entrada pnl.SetMovable(InpMovable); pnl.SetAutoSize(InpAutoSize,false); pnl.SetAutoSizeMode((ENUM_CANV_ELEMENT_AUTO_SIZE_MODE)InpAutoSizeMode,false); //--- Criar elemento de controle TabControl pnl.CreateNewElement(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,InpTabControlX,InpTabControlY,pnl.Width()-30,pnl.Height()-40,clrNONE,255,true,false); CTabControl *tc=pnl.GetElementByType(GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,0); if(tc!=NULL) { CTabField *tf=tc.GetTabField(index); // Obter campo de registro do elemento TabControl tc CWinFormBase *base=tf.GetBase(); // Descubra o objeto base para o campo da guia - deve ser TabControl tc CWinFormBase *main=tf.GetMain(); // Descubra o objeto principal para o campo da guia - deve ser o CPanel pnl }
Se ele não retornar os objetos especificados nos comentários dessa forma, então é um bug e precisa ser refinado
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo DoEasy. Controles (Parte 19): Rolagem de guias no elemento TabControl, eventos de objetos WinForms foi publicado:
Neste artigo, veremos como podemos criar uma funcionalidade para a rolagem dos cabeçalhos das guias no controle TabControl por meio de botões de rolagem. Essa funcionalidade organizará os cabeçalhos das guias em uma única linha em ambos os lados do controle.
Compilamos o Expert Advisor e o iniciamos no gráfico:
Como podemos ver, tudo o que queríamos fazer hoje funciona como planejado.
Autor: Artyom Trishkin