deio 0 Denunciar post Postado Junho 13, 2007 olá a todosa idéia do código é q quando o botão for clicado, ele veja quantos fields tem o dbf, e crie os componentes no form2 até q uma variável se iguale ao numero de fields...essa é a parte q eu ja tenho : private n : integer; //variável para dar nomes diferentes aos componentesimplementationprocedure TForm1.Button1Click(Sender: TObject);varn2 := integer;begininc(n);n2 := dbf1.FieldCount; //conta quantos fields tem o arquivowith TDBEdit.Create(self) do // cria o componente e define suas propriedades begin parent := form2; name := 'dbedit'+ inttostr(n); datasource := datasource1; datafield := 'NOME_RAZAO'; left := 125; top := 26; width := 297; end;with Tlabel.create (self) do begin parent := form2; caption:= dbf1.FieldDefs[2].Name; name := 'label'+inttostr(n); top := 28; left := 40; end;with form2 do begin width := 500; form2.Show; end;end; O que falta fazer :1) criar a variavel q ira ser comparada com o n22) criar a condição para o programa executar a criação dos componentes até a variavel se igualar ao n23) aumentar a propriedade top dos componentes a cada vez q a função é executada em 244) aumentar o height do form2 em 24por enquanto é só XD Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Junho 13, 2007 Opah! tm q deixar rolar um for da vida .... var i, FieldCount, iTop: integer;begin iTop:= 0 for i:= 1 to FieldCount do begin {rotina pra criacao dos campos } NomeComponente.Top:= iTop + 24; end; é isso q precisa ? Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 13, 2007 a condição consegui fazer sozinho com um if http://forum.imasters.com.br/public/style_emoticons/default/joia.gif a dica ae q você me deu do top naum comnsegui implementar, vou passar o código novo, dai você copia onde tem q ir o esquema do top: procedure TForm1.Button1Click(Sender: TObject);begininc(n);if n < dbf1.FieldCount thenbeginwith TDBEdit.Create(self) do begin parent := form2; name := 'dbedit'+ inttostr(n); datasource := datasource1; datafield := dbf1.FieldDefs.Items[n-1].Name; left := 125; top := 26; width := 297; end;with Tlabel.create (self) do begin parent := form2; caption:= dbf1.FieldDefs[2].Name; name := 'label'+inttostr(n); top := 28; left := 40; end;with form2 do begin width := 500; form2.Show; end;end;end; Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Junho 14, 2007 O esquema do Top que o Rodrigo mencionou, é de você declarar uma variável para ter controle do último campo a posição de altura que ficou, e quando for inserir o próximo, ele coloque logo abaixo do antigo campo criado pelo seu procedimento, no caso você não teria de colocar em um laço este comando para que todos os campos sejam criados ? Pois no botão da forma que colocou, somente um campo é criado, visto que não tem laço de repetição. Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Junho 14, 2007 exatamente q o Marcio flw kra ...seu code naum entra num bloco de repeticao, entao vai criar apenas um campo...o meu code acima naum é nda dinamico, mais coloca no seu botao aew o codigo q passei q você vai ter uma ideia, daew so implementar de acordo com as suas nescessidades .... Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 14, 2007 eu sei, deixei a condição com if só pra ver se está tudo funcionando direitinho, eu vou trocar o if por while, q dai ele faz tudo direto, mas enquanto o código naum está completo, vou deixar com if XD Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 14, 2007 tem algum comando q conta quantos componentes tem?Ex: 10 tlabels....porque naum ta dando pra definir a dica do rodrigo pois o componente ainda naum foi criado...eu ja consegui entender a dica XD no meu caso aqui seria só declarar o itop:itop:= label(n-1).top; // o n-1 garante q o programa pegue o componente anteriore no loop para a criação do componente é só colocar(...)top:= itop +24;(...)(como eu defino o tamanho desse codebox? ou será q é assim mesmo pq estou usando o firefox?) Compartilhar este post Link para o post Compartilhar em outros sites