Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

deio

Criação de componentes pelo código

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.