lumens 0 Denunciar post Postado Fevereiro 12, 2011 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
Felipe Pierin 0 Denunciar post Postado Fevereiro 12, 2011 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
lumens 0 Denunciar post Postado Fevereiro 15, 2011 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