BRUNOOO 0 Denunciar post Postado Março 18, 2008 Ola pessoal, Estou com o seguinte codigo: ///////////////---------------------------------------------------------------------------------/////////////////////// unit UOpcoesUsuario; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, Buttons; type TFrmOpcoesUsuario = class(TForm) ZQuery1: TZQuery; ZQuery2: TZQuery; BtnAtualizar: TBitBtn; BtnCancelar: TBitBtn; ZQuery3: TZQuery; procedure FormShow(Sender: TObject); procedure BtnCancelarClick(Sender: TObject); procedure BtnAtualizarClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmOpcoesUsuario: TFrmOpcoesUsuario; implementation uses UAdministrativo, ULogin; {$R *.dfm} procedure TFrmOpcoesUsuario.FormShow(Sender: TObject); var MenuLabel : TLabel; MeuComboBox : TComboBox; numRow, i, top: integer; Begin numRow := ZQuery1.RecordCount; // Variável para ajustar altura do topo da tela top := 15; // Seta o altura do form conforme o número de itens FrmOpcoesUsuario.Height := 150 + (numRow * 50); // Seta a largura do form FrmOpcoesUsuario.Width := 500; // Imprime o nome do usuário selecionado MenuLabel := TLabel.Create(Self); MenuLabel.Parent := Self; MenuLabel.Top := top; MenuLabel.Left := 50; MenuLabel.Caption := 'Permissões para o usuário(a) ' + FrmAdministrativo.DBGridUsuarios.Fields[1].AsString; for i := 1 to numRow do begin MenuLabel := TLabel.Create(Self); MenuLabel.Parent := Self; MenuLabel.Top := i * 50 + top; MenuLabel.Left := 50; MenuLabel.Caption := ZQuery1.FieldByName('menu').AsString; MeuComboBox := TComboBox.Create(Self); MeuComboBox.Parent := Self; MeuComboBox.Top := i * 48 + top; // Alinha o combobox a 50 a direita MeuComboBox.Left := FrmOpcoesUsuario.Width - MeuComboBox.Width - 50; // Itens disponíveis no combobox MeuComboBox.Items.Clear(); ZQuery3.First; while not(ZQuery3.Eof) do begin MeuComboBox.Items.Add(ZQuery3.Fields[0].AsString); ZQuery3.Next; end; ZQuery2.SQL.Clear; // Consulta que busca a permissão do usuário para determinado item de menu Zquery2.SQL.Add('SELECT permissao FROM tb_pessoas_menu WHERE tb_pessoas_id = ' + FrmAdministrativo.DBGridUsuarios.Fields[0].AsString + ' and tb_menu_id = ' + ZQuery1.FieldByName('id').AsString + ''); ZQuery2.Open; // Seta o item selecionado para a combobox MeuComboBox.ItemIndex := ZQuery2.FieldByName('permissao').AsInteger - 1; ZQuery1.Next; end; BtnAtualizar.Top := FrmOpcoesUsuario.Height - BtnAtualizar.Height -50; BtnCancelar.Top := FrmOpcoesUsuario.Height - BtnAtualizar.Height -50; end; procedure TFrmOpcoesUsuario.BtnCancelarClick(Sender: TObject); begin FrmOpcoesUsuario.Close; end; procedure TFrmOpcoesUsuario.BtnAtualizarClick(Sender: TObject); var mensagem : string; MeuComboBox : TComboBox; Teste : TComponent; begin Zquery1.Active := false; // Limpa o atual SQL da query Zquery1.SQL.Clear; // Adiciona a SQL Zquery1.SQL.Add('DELETE FROM tb_pessoas_menu WHERE tb_pessoas_id ="' + FrmAdministrativo.DBGridUsuarios.Fields[0].AsString + '"'); // Executa a SQL ZQuery1.ExecSQL; Zquery1.SQL.Clear; // FrmOpcoesUsuario.Components Teste := FrmOpcoesUsuario.Components[7]; MeuComboBox := Teste; //mensagem := MeuComboBox.items[0]; //mensagem := IntToStr(FrmOpcoesUsuario.ZQuery3.ComponentIndex); //mensagem := IntToStr(FrmOpcoesUsuario.FindComponent('MeuComboBox').ComponentIndex); //mensagem := IntToStr(FrmOpcoesUsuario.GetTypeInfo()); MessageDlg(mensagem, mtInformation, [mbOK], 0); //ZQuery1.SQL.Add() //FrmOpcoesUsuario.Show; end; end. ///////////////---------------------------------------------------------------------------------/////////////////////// O que acontece eh que o componente eh criado em tempo de execucao Ateh ai tudo bem, crio labels e combobox. Mas depois de criado, preciso obter os valores dos combobox. Como vcs podem ver acima, tentei utilizar o comando FrmOpcoesUsuario.Components[7]; para pegar o compontente de indice 7 que sei que eh um combobox. Ateh consegui pega-lo como compontente, mas preciso transforma-lo em um combobox. Alguem sabe alguma maneira de fazer isto?? Ou alguma outra forma de abordar o problema?? Obrigado pela atencao Bruno Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Março 18, 2008 Como você mesmo disse, você precisa tratar o componente como se ele fosse um combobox ... ShowMessage(TComboBox(Components[7]).Text); Compartilhar este post Link para o post Compartilhar em outros sites
BRUNOOO 0 Denunciar post Postado Março 18, 2008 Muito obrigado Rodrigo!! Deu certinho http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Abraco Compartilhar este post Link para o post Compartilhar em outros sites