Número do Componente no Array de Componentes em DesignTime
Pessoal como eu obtenho o número do componente no array de componentes em tempo de projeto e também como auterá-lo?
Exemplo... tenho um formulário com 20 DBComboBox e gostaria de executar um [b:7362c280de]for[/b:7362c280de] apenas nesses 20 DBComboBox então eu pensei em utilizar dessa formaonde IndiceDoPrimeiro seria o indice do primeiro dos 20 DBCombo e IndiceDoUltimo seria o indice do 40 DBCombo...
Exemplo... tenho um formulário com 20 DBComboBox e gostaria de executar um [b:7362c280de]for[/b:7362c280de] apenas nesses 20 DBComboBox então eu pensei em utilizar dessa forma
for Cont := IndiceDoPrimeiro to IndiceDoUltimo do if (Components[Cont] is TDBComboBox) then (Components[Cont] as DBComboBox).Enabled := False;
Bruno Belchior
Curtidas 0
Respostas
Marcelo Saviski
21/03/2005
Tente o Componente.ComponentIndex, mas isso não é muito garantido, por exemplo
podem haver outros componentes entre os 20 Combos que não seja combos, depende da ordem que vão sendo colocados no form, talvez vc possa alterar o index deles indo em Edit>Creation Order
podem haver outros componentes entre os 20 Combos que não seja combos, depende da ordem que vão sendo colocados no form, talvez vc possa alterar o index deles indo em Edit>Creation Order
GOSTEI 0
Massuda
21/03/2005
Porque você não cria um array para agrupar os componentes que você deseja e inicializa esse array no OnCreate do form?
GOSTEI 0
Bruno Belchior
21/03/2005
[quote:76960128b2=´Marcelo Saviski´]Tente o Componente.ComponentIndex, mas isso não é muito garantido, por exemplo
podem haver outros componentes entre os 20 Combos que não seja combos, depende da ordem que vão sendo colocados no form, talvez vc possa alterar o index deles indo em Edit>Creation Order[/quote:76960128b2]já coloquei essa solução... porém como vc disse não é nada garantido, eu queria que tivesse como eu alterar a ordem dos componentes por exemplo tenho um componente DBComo e ele está localizado na posição 15 do array de componentes, gostaria de mudá-lo pra posição 10 em tempo de projeto, pois ai sim eu poderei fazer esse controle tendo plena convicção que não existem componentes indesejados entre os meus...
podem haver outros componentes entre os 20 Combos que não seja combos, depende da ordem que vão sendo colocados no form, talvez vc possa alterar o index deles indo em Edit>Creation Order[/quote:76960128b2]já coloquei essa solução... porém como vc disse não é nada garantido, eu queria que tivesse como eu alterar a ordem dos componentes por exemplo tenho um componente DBComo e ele está localizado na posição 15 do array de componentes, gostaria de mudá-lo pra posição 10 em tempo de projeto, pois ai sim eu poderei fazer esse controle tendo plena convicção que não existem componentes indesejados entre os meus...
GOSTEI 0
Bruno Belchior
21/03/2005
[quote:6eda90f7d3=´Marcelo Saviski´]Tente o Componente.ComponentIndex, mas isso não é muito garantido, por exemplo
podem haver outros componentes entre os 20 Combos que não seja combos, depende da ordem que vão sendo colocados no form, talvez vc possa alterar o index deles indo em Edit>Creation Order
já coloquei essa solução... porém como vc disse não é nada garantido, eu queria que tivesse como eu alterar a ordem dos componentes por exemplo tenho um componente DBComo e ele está localizado na posição 15 do array de componentes, gostaria de mudá-lo pra posição 10 em tempo de projeto, pois ai sim eu poderei fazer esse controle tendo plena convicção que não existem componentes indesejados entre os meus...[/quote:6eda90f7d3]estive pensando em colocar algo na propriedade [b:6eda90f7d3]Tag[/b:6eda90f7d3] dos componentes e verificar todo o array de componentes do formulário, porém não gostaria de gastar processamento atôa (mesmo sabendo que isso é mínimo para as máquinas atuais)...GOSTEI 0
Bruno Belchior
21/03/2005
me corrija se estiver errado mas [b:c1b5d67106]Edit->Creation Order[/b:c1b5d67106] é apenas para componentes não visuais!!!?
GOSTEI 0
Marcelo Saviski
21/03/2005
me corrija se estiver errado mas [b:ac41460583]Edit->Creation Order[/b:ac41460583] é apenas para componentes não visuais!!!?
Ops, acho que é, é que eu nunca usei ele, ai não me lembrei, mas pensando, esperimente recortar e colar os combos, para ver se funciona......... talvez eles fiquem com os últimos indices do form, teste que talvez funcione
GOSTEI 0
Marcio.theis
21/03/2005
Porque vc não tenta utiliza o ClassType ??? Com ele vc teria certeza de que somente passaria componentes do tipo selecionado. Tenho um sistema que utiliza bastante a criação de componentes em RunTime e tb a validação do mesmo, e em um dos casos eu valido os CheckBox...
if (Panel.Components[n].ClassType = TCheckBox) then
if (Panel.Components[n].ClassType = TCheckBox) then
GOSTEI 0
Bruno Belchior
21/03/2005
[quote:8b91a00d3c=´/]/]@t´]Porque vc não tenta utiliza o ClassType ??? Com ele vc teria certeza de que somente passaria componentes do tipo selecionado. Tenho um sistema que utiliza bastante a criação de componentes em RunTime e tb a validação do mesmo, e em um dos casos eu valido os CheckBox...
if (Panel.Components[n].ClassType = TCheckBox) then[/quote:8b91a00d3c]o problema é que tem componentes do mesmo tipo porém não devem entrar no meu laço...
if (Panel.Components[n].ClassType = TCheckBox) then[/quote:8b91a00d3c]o problema é que tem componentes do mesmo tipo porém não devem entrar no meu laço...
GOSTEI 0
Marcio.theis
21/03/2005
Estes combo são criados em tempo de execução, ou já esta no form?
GOSTEI 0
Bruno Belchior
21/03/2005
em tempo de execução, fiz uma ´gambiarra´ alterando o valor da propriedade [b:18ea481b34]Tag[/b:18ea481b34] apenas dos componentes que queria alterar, mas fico desperdiçando processamento e usando muito RTTI que é muito pesado...
GOSTEI 0