Componente em Tempo de Execução (Contar/Gravar)
02/12/2003
0
Vejam o meu problema: criei um form em tempo de execução, neste, montei uma rotina para adicionar CheckBox de acordo com a quantidade de campos da tabela.
Até ae, tudo bem...
vejam o código :
var I : SmallInt;
Esquerda, Topo, Linha : Integer;
MyCheckBox : TCheckBox;
begin
Esquerda := 1;
Topo := 1;
Linha := 1;
for I := 0 to DMod.TbCliente.FieldCount - 1 do
begin
MyCheckBox := TCheckBox.Create(Self.Owner);
MyCheckBox.Name := ´MyCh´ + IntToStr(I);
MyCheckBox.Caption := DMod.TbCliente.Fields[I].DisplayName;
MyCheckBox.Parent := Self;
MyCheckBox.Left := Esquerda;
MyCheckBox.Top := Topo + Linha * 15 - 14;
MyCheckBox.Width := 180;
MyCheckBox.Font.Color:= clWhite;
Inc(Linha);
if MyCheckBox.Top > (Self.Height - 65) then
begin
Inc(Esquerda, 150);
Topo := 1;
Linha := 1;
end;
end;
end;
Agora, eu gostaria de gravar os CheckBox que foram marcados (checked).
montei a rotina :
var F : TextFile;
I : Smallint;
begin
AssignFile (F, ´c:\teste.txt´ );
Rewrite(F);
for I := 0 to ComponentCount - 1 do
begin
if Components[I] is TCheckBox then
if TCheckBox(Components[I]).Checked then
begin
Write(F, TCheckBox(Components[I]).Caption);
WriteLn(F);
end;
end;
CloseFile(F);
Close;
end;
*** Não funciona.
Descobri o porque, mas não sei como resolver. Fazendo testes, descobri que se criar componentes em tempo de execução, como foi o caso, a propriedade ´ComponentsCount´ não os reconhece.
Alguém pode ajudar à solucionar este problema ?
Grato
Cleber
ICQ : 85616758. :roll:
Pedih
Posts
02/12/2003
Beppe
Como você está acessando Components do form, ele não contém a instância do seu objeto, já que os mesmos estão em Self.Owner.Components[].
Para solucionar, passe apenas Self no construtor.
02/12/2003
Pedih
Funcionou perfeitamente. Muito grato pela atenção.
o que é uma linha de código eim :
TCheckBox.Create(Self) em vez de TCheckBox.Create(Self.Owner);
=== que coisa.
Obrigado, valeu mesmo. :lol:
27/10/2023
Igor
Para solucionar, passe apenas Self no construtor.
2 décadas depois estou eu aqui agradecendo por esta resposta! kkkkk
Parece bobeira, mas passei um dia todo tentando resolver um acess violation que estava acontecendo e o motivo era que o owner do componente não estava sendo referenciado corretamente!
27/10/2023
Igor
2 décadas depois estou eu aqui agradecendo por esta resposta! kkkkk
Parece bobeira, mas passei um dia todo tentando resolver um acess violation que estava acontecendo e o motivo era que o owner do componente não estava sendo referenciado corretamente!
Clique aqui para fazer login e interagir na Comunidade :)