Ir para conteúdo

POWERED BY:

Arquivado

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

lumens

Problemas com o componentcount e Tab_Order no delphi 7

Recommended Posts

Problemas com o componentcount e Tab_Order no delphi 7

Olá Amigos.

Estou com algumas duvidas e gostaria de solicitar a ajuda dos colegas.

 

na minha unit tenho:

 

bla..

bla..

 

 

type

Tfrm_GB = class(TForm)

Button1: TButton;-> no meu indice do componentecount este seria [0]

Button2: TButton;-> no meu indice do componentecount este seria [1]

Button3: TButton; e assim por diante...

Button4: TButton;

SpeedButton1: TSpeedButton;

SpeedButton2: TSpeedButton;

QuickRep1: TQuickRep;

TitleBand1: TQRBand;

RadioGroup1: TRadioGroup;

Bevel1: TBevel;

Bevel2: TBevel;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;no meu indice do componentecount este seria [13]

 

bla..

bla..

Label21: TLabel;

Label29: TLabel;

QRLabel1: TQRLabel;

QRLabel2: TQRLabel;

QRLabel3: TQRLabel;

QRLabel4: TQRLabel;

QRLabel5: TQRLabel;

QRLabel6: TQRLabel;no meu indice do componentecount este seria [72]

etc...

 

 

questão?

 

como posso ter certeza que quando estiver dentro de um:

for i := 0 to ComponentCount -1 do

if (Components is TEdit) then

begin

TEdit(Components).Text := 'ola';

end;

estarei carregado o edit desejado, exemplo o Edit3 ou Edit5 conforme a necessidade.

fiz algo assim:

//************************************************** **********************

for z := 0 to ComponentCount -1 do

if (Components[z] is TQRLabel) then

begin

break;

end;

for y := 0 to ComponentCount -1 do

if (Components[y] is TQRImage) then

begin

break;

end;

for i := 0 to ComponentCount -1 do

if (Components is TEdit) then

begin

z:=z;

y:=y;

if (TEdit(Components).Text <>'0000000000')then

begin

 

if (Components[z] is TQRLabel) then

begin

TQRLabel(Components[z]).Caption :=TEdit(Components).Text;

end;

CriaCodigo(TEdit(Components).Text,TQRImage(Components[y]).Canvas);

end;

z:=z+1;

y:=y+1;

end;

nos primeiros loops vai bém, mas apartir de uma quantidade maior de component o negocio fica embaralhado.

 

gostaria de ter certeza que o:

QRLabel1 esta recebendo do Edit1

QRImage1 na ordem correta com o Edit1 e assim por diante.

 

já tentei organizar a seguencia no (tab Order) mesmo assim depois de uma certa quantidade acaba embaralhando.

ps: espero ter me explicado de forma correta..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá lumens,

 

Pelo que entendi você tem um numero igual de edits e outros componentes então vou propor uma idéia aqui que espero que te inspire. (:

Por exemplo, eu peguei 50 checks, 50 memos, 50 buttons e 50 edits. Coloquei numa stringlist e imprimi o resultado.

 

Imaginei que os componentes poderiam ter nomes iguais e que eu sei a quantidade deles. Ou seja, sei que o edit1 imprime com check1 e etc.... sei também que tem 50 de cada

 

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 quantidadeDeQuadrasDeComponente: Integer;
 CheckBox: TCheckBox;
 Edit : TEdit;
 Memo : TMemo;
 Botao: TButton;
 StringList: TStringList;
begin

 quantidadeDeQuadrasDeComponente := 50;
 StringList := TStringList.Create();
 try
   for i := 1 to quantidadeDeQuadrasDeComponente do
   begin
     CheckBox := TCheckBox(FindComponent('CheckBox' + IntToStr(i)));
     Edit  := TEdit(FindComponent('Edit' + IntToStr(i)));
     Memo  := TMemo(FindComponent('Memo' + IntToStr(i)));
     Botao := TButton(FindComponent('Button' + IntToStr(i)));
     StringList.Add(CheckBox.Name + ' ' + Edit.Name + ' ' + Memo.Name + ' ' + Botao.Name)
   end;
   ShowMessage(StringList.Text);
 finally
   StringList.Free;
 end;


end;

 

Um abraço,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá lumens,

 

Pelo que entendi você tem um numero igual de edits e outros componentes então vou propor uma idéia aqui que espero que te inspire. (:

Por exemplo, eu peguei 50 checks, 50 memos, 50 buttons e 50 edits. Coloquei numa stringlist e imprimi o resultado.

 

Imaginei que os componentes poderiam ter nomes iguais e que eu sei a quantidade deles. Ou seja, sei que o edit1 imprime com check1 e etc.... sei também que tem 50 de cada

 

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 quantidadeDeQuadrasDeComponente: Integer;
 CheckBox: TCheckBox;
 Edit : TEdit;
 Memo : TMemo;
 Botao: TButton;
 StringList: TStringList;
begin

 quantidadeDeQuadrasDeComponente := 50;
 StringList := TStringList.Create();
 try
   for i := 1 to quantidadeDeQuadrasDeComponente do
   begin
     CheckBox := TCheckBox(FindComponent('CheckBox' + IntToStr(i)));
     Edit  := TEdit(FindComponent('Edit' + IntToStr(i)));
     Memo  := TMemo(FindComponent('Memo' + IntToStr(i)));
     Botao := TButton(FindComponent('Button' + IntToStr(i)));
     StringList.Add(CheckBox.Name + ' ' + Edit.Name + ' ' + Memo.Name + ' ' + Botao.Name)
   end;
   ShowMessage(StringList.Text);
 finally
   StringList.Free;
 end;


end;

 

Um abraço,

 

Olá Felipe Pierin

Grato pela sua dica tentei mas não funcionou conforme o desejado, acabei decidindo pelo loop do componentcount, estou usando esta aplicação p/ carregar codigos de barras p/ os produtos entrantes no estoque. o codigo que funcionou mais perto doque eu queria ficou asim:

 

 

//==================================================================

procedure Tfrm_GB.Button6Click(Sender: TObject);

var

 

i,y,iLinha,qtlinha,iQT_PROD:integer;

vCD_PROD,vDS_PROD,vQT_PROD:string;

begin

RadioGroup1.ItemIndex := 1;

//========selecionar linha por linha DBGrid1 Itens comprados===================

begin

with frm_compras.DBGrid1.DataSource.DataSet do

begin

First;

for iLinha := 0 to RecordCount - 1 do

begin

 

Next;//===============proximo item

end;

end;

frm_compras.DBGrid1.SelectedRows.Refresh;

 

QTLinha:= frm_compras.DBGrid1.DataSource.DataSet.RecordCount;

//qtlinha:=QTLinha;

end;

//===============================================

frm_compras.DBGrid1.DataSource.DataSet.FindFirst;

 

while qtlinha > 0 do

begin

vQT_PROD:=(frm_compras.DBGrid1.DataSource.DataSet.Fields[4].AsString);

iQT_PROD:=StrToInt(vQT_PROD);

for y :=0 to ComponentCount -1 do

if (Components[y] is TCheckBox) then

begin

if not(TCheckBox(Components[y]).Checked)then //confirma se o TCheckBox esta desmarcado

begin

ytemp:=StrToInt(copy((TCheckBox(Components[y]).Name),9,2));

 

frm_GB.Label18.Caption:=copy((TCheckBox(Components[y]).Name),9,2);

//========carregar dados do dbgrid compras=================================

for i := 0 to ComponentCount -1 do

if (Components is TEdit) then

begin

//==============carregar edit com dados do DBGrid1 Itens comprados==========

itemp:=StrToInt(copy((TEdit(Components).Name),5,2));

if(itemp = ytemp)then

begin

if(qtlinha <=0)then break;

TEdit(Components).Enabled:=True;

TEdit(Components).Color:=clWhite;

frm_compras.DBGrid1.SetFocus;

vCD_PROD:=(frm_compras.DBGrid1.DataSource.DataSet.Fields[2].AsString);

vDS_PROD:=(frm_compras.DBGrid1.DataSource.DataSet.Fields[3].AsString);

vQT_PROD:=(frm_compras.DBGrid1.DataSource.DataSet.Fields[4].AsString);

TEdit(Components).Text :=vCD_PROD;

frm_GB.Label22.Caption:=(copy((TEdit(Components).Name),5,2));

frm_GB.Label23.Caption:=vDS_PROD;

frm_GB.Label24.Caption:=vQT_PROD;

frm_GB.Refresh;

Break;

end;

end;

frm_GB.Refresh;

//==========verificação qt_prod=================

if(iQT_PROD >0)then iQT_PROD:=iQT_PROD -1;

if(iQT_PROD<=0)and(qtlinha >0)then

begin

if(itemp = ytemp)then

begin

frm_compras.DBGrid1.DataSource.DataSet.FindNext;

qtlinha:=qtlinha-1;

vQT_PROD:=(frm_compras.DBGrid1.DataSource.DataSet.Fields[4].AsString);

iQT_PROD:=StrToInt(vQT_PROD);

end;

end;

//==========fim verificação qt_prod=====

//=========================================================================

end //== end checkbox setado

else

begin

for i := 0 to ComponentCount -1 do

if (Components is TEdit) then

begin

itemp:=StrToInt(copy((TEdit(Components).Name),5,2));

if(ytemp = 0)and (itemp >0)then itemp := i -1;

if(itemp = ytemp)then

begin

TEdit(Components).Text :='0000000000';

frm_GB.Label22.Caption:=(copy((TEdit(Components).Name),5,2));

frm_GB.Refresh;

Break;

end;

end;// end loop TEdit

end;

 

end;

 

end;//loop while qtlinha

 

end;

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.