Desenvolvimento - C/C++
Drag and drop no Cpp Builder - parte 6
por Wanderley Caloni Jr
O sistema de drag and drop do C++ Builder é muito fácil de usar, integrado que está com o sistema de classes e objetos do framework. Tanto para o objeto de drag quanto para o objeto de drop tudo que temos que fazer é definirmos a propriedade DragMode para dmAutomatic como mostra a figura. Isso fará com que toda a troca de mensagens seja manipulada automaticamente pela VCL.
A parte (ridídula) do código fica por conta da manipulação do evento de drop. Para aceitar um objeto, devemos tratar o evento OnDragOver. Basta isso para que a variável Accept tenha seu valor default definido para true. Podemos, entretanto, escolher se iremos ou não tratar um possível drop de um objeto. Verificando seu tipo, por exemplo:
void __fastcall TMain::ListBoxDragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
if( TListBox* listBox = dynamic_cast<TListBox*>(Sender) )
{
TWinControl* winCtrl = static_cast<TWinControl*>(Source);
if( listBox!= winCtrl )
{
listBox->Items->Add(winCtrl->Name);
winCtrl->Visible = false;
}
}
}
void __fastcall TMain::FormDragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
if( TForm* form = dynamic_cast<TForm*>(Sender) )
{
TControl* ctrl = 0;
if( TListBox* listBox = dynamic_cast<TListBox*>( Source ) )
{
for( int i = 0; i < listBox->Count; ++i )
{
if( listBox->Selected[i] )
{
ctrl = this->FindChildControl(listBox->Items->Strings[i]);
listBox->Items->Delete(i);
break;
}
}
}
else
ctrl = dynamic_cast<TControl*>(Source);
if( ctrl )
{
ctrl->Top = Y;
ctrl->Left = X;
ctrl->Visible = true;
}
}
}
E mais uma vez voilà! Pouquíssimas linhas de código e um movimentador e empilhador de controles. Dois detalhes merecem serem destacados:
O uso de dynamic_cast em cima dos ponteiros da VCL é uma maneira saudável de checar a integridade dos tipos recebidos - particularmente do Sender. O uso do primeiro parâmetro dos tratadores de eventos também torna o código menos preso à componentes específicos do formulário; O método FindChildControl é deveras útil quando não temos certeza da existência de um controle. Geralmente é uma boa idéia confiar no sistema de gerenciamento de componentes da VCL. Não é à toa que existe um framework por baixo do ambiente RAD.Artigo original retirado de "Drag and drop no C++ Builder", por Wanderley Caloni.
- Usando o Boost/C++ para fazer parser de XMLXML
- Usando o Regex do Boost para reconhecer cadeias de caracteresC/C++
- Compilando a última versão do Boost e usando no Visual Studio 2010C/C++
- Compilando a última versão do Boost e usando no Visual Studio 2010C/C++
- Reutilizando Código Nativo no .NETC/C++







