ComboBox - Valores para exibir e para processar

Delphi

12/11/2004

Pessoal, como faço para, num combo-box, exibir um valor, mas internamente eu processar outro? Por exemplo, quero exibir para o usuário o nome de alunos, mas, qdo ele escolher um nome, quero processar pela matrícula do aluno. Há uma forma de exibir um valor, mas trabalhar com outro?
Obrigado.


Gleison_gomes

Gleison_gomes

Curtidas 0

Respostas

Adilsond

Adilsond

12/11/2004

[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=41116&highlight=addobject[/url]


GOSTEI 0
Adilsond

Adilsond

12/11/2004

[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=41116&highlight=addobject[/url]


GOSTEI 0
Gleison_gomes

Gleison_gomes

12/11/2004

Obrigado, Adilson!
Mas há um jeito de eu exibir um texto e trabalhar com um valor tb em string, não como inteiro? Preciso exibir um nome amigável para o usuário e trabalhar com o nome do campo das tabelas... Por exemplo: quero exibir ´Nome do Aluno´, mas trabalhar no combo como ´nome_aluno´.
Obrigado.


GOSTEI 0
Repa

Repa

12/11/2004

Nos casos que preciso mostrar um campo nome p/ o usuário mas usar o campo código no programa eu uso dblookupcombobox, criando uma tabela temporária p/ gravar o valor do campo que quero usar.


GOSTEI 0
Adilsond

Adilsond

12/11/2004

Adicionando os itens:

ComboBox1.Items.AddObject(FieldByName(´XXXX´).AsString,
  TObject(LongInt(NewStr(FieldByName(´YYYY´).AsString))));



Pegando o valor:

strID := PString(ComboBox1.Items.Objects[ComboBox1.ItemIndex])^;



Voce deve liberar os objetos ao final ou a cada vez que for remontar a lista:

for I := 0 to ComboBox1.Items.Count - 1 do
  DisposeStr(PString(cbGroups.Items.Objects[i]));



GOSTEI 0
Adilsond

Adilsond

12/11/2004

Onde esta cbGroups, mue para ComboBox1

for I := 0 to ComboBox1.Items.Count - 1 do
  DisposeStr(PString(ComboBox1.Items.Objects[i]));



GOSTEI 0
Adilsond

Adilsond

12/11/2004

Outra maneira é criar uma classe:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TMyComboObject = class
  private
    { Private declarations }
    fId: Integer;
    fName: String;
  public
    { Public declarations }
    constructor Create(Id: Integer; Name: String);
    property Id: Integer read fId;
    property Name: String read fName;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    procedure ClearComboBox;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

constructor TMyComboObject.Create(Id: Integer; Name: String);
begin
  fId := Id;
  fName := Name;
end;

procedure TForm1.ClearComboBox;
var
  I: Integer;
begin
  if ComboBox1.Items.Count > 0 then
     begin
       for I := 0 to ComboBox1.Items.Count - 1 do
         TMyComboObject(ComboBox1.Items.Objects[I]).Free;
       ComboBox1.Clear;
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClearComboBox;
  ComboBox1.Items.AddObject(´Elemento 1´, TMyComboObject.Create(1,´Um´));
  ComboBox1.Items.AddObject(´Elemento 2´, TMyComboObject.Create(2,´Dois´));
  ComboBox1.Items.AddObject(´Elemento 3´, TMyComboObject.Create(3,´Tres´));
  ComboBox1.Items.AddObject(´Elemento 4´, TMyComboObject.Create(4,´Quatro´));
  ComboBox1.Items.AddObject(´Elemento 5´, TMyComboObject.Create(5,´Cinco´));
  ComboBox1.Items.AddObject(´Elemento 6´, TMyComboObject.Create(6,´Seis´));
  ComboBox1.Items.AddObject(´Elemento 7´, TMyComboObject.Create(7,´Sete´));
  ComboBox1.Items.AddObject(´Elemento 8´, TMyComboObject.Create(8,´Oito´));
  ComboBox1.Items.AddObject(´Elemento 9´, TMyComboObject.Create(9,´Nove´));
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Edit1.Text := IntToStr(TMyComboObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Id);
  Edit2.Text := TMyComboObject(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Name;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClearComboBox;
end;

end.



GOSTEI 0
Gleison_gomes

Gleison_gomes

12/11/2004

E aí, tudo bem?
Criei o compo de acordo com sua primeira dica, obrigado!
Porém, qdo vou recuperar o valor selecionado, estão vindo caracteres especiais (´#0000´)que estão atrapalhando ao concatenar para formar uma expressão. O que fazer para ´filtrar´ estes caracteres?
Obrigado.


GOSTEI 0
Adilsond

Adilsond

12/11/2004

Provavelmente estes caracteres já devem estar sendo montados na string. Verifique...


GOSTEI 0
Gleison_gomes

Gleison_gomes

12/11/2004

Valeu, descobri o erro.
Realmente era na geração da string.
Obrigado!


GOSTEI 0
POSTAR