Combobox Edit TXT = Problema

Delphi

22/11/2003

O problema é o seguinte, tenho um form com um edit e um combobox e uma lista com dados em um txt, esta lista com dados estão desta forma:

   ...
   João||Gerente
   José||Administração
   Juca||Puxa Saco
   ...


No combobox estariam todos os nomes, ou seja, tudo até ´||´, ao selecionar um item do combobox ele forneceria no edit a descrição da area de trabalho, tudo após o ´||´...
Para mim está um dilema fazer funcionar direito esta função, se puderem me ajudar...

Obrigado


Dan

Dan

Curtidas 0

Respostas

Yankleber

Yankleber

22/11/2003

Olá Dan,

Veja, independente da linguagem (Delpi, VB, etc) eu resolveria isso da seguinte forma:

1) Após abrir o arquivo texto que contém as informações que você citou, eu criaria duas listas (arrays): uma para os nomes (o que está antes do ||) e outra para as descrições (o que está depois do ||).

2) Faria um loop for-next e carregaria o conteúdo da primeira lista no combobox;

3) Quando o usuário selecionasse um nome no combobox, eu pegaria o índice do combobox, e com esse número eu obteria o conteúdo da respectiva posição na segunda lista (array) que contém as descrições e jogaria no edit.

Não se esqueça, contudo, que o índice de um combobox começa a partir de 1 enquanto o índice de um array começa de 0 (zero). Assim, você deve subtrair 1 (um) do valor obtido a partir do índice do combobox para obter o correspondente correto no array.

Espero ter ajudado!


GOSTEI 0
Dan

Dan

22/11/2003

yankleber, a linguagem é Delphi mesmo, o problema é que eu sou terrivel com loops, por exemplo, eu não faço idéia de como criar este loop for-next por isso continuo perdido... se puder me ajudar na base do codigo eu conseguiria melhor entender!

Se não for demais me ajudaria postando o codigo que deveria utilizar, pesso desculpas, mas não sou profissional na linguagem delphi e portanto é complexo para mim.

Obrigado!?


GOSTEI 0
Rafael Heise

Rafael Heise

22/11/2003

No private da sua form, declare uma variável Lista do tipo TStringList
Lista: TStringList;

No OnCreate crie a lista, e no OnDestroy destrua, para não ficar alocado na memória.

TForm.FormCreate...
begin
  Lista := TStringList.Create;
end;

TForm.FormDestroy...
begin
  Lista.Free;
end;


No OnShow, você carrega o arquivo txt pra sua lista
TForm.FormShow...
begin
  Lista.LoadFromFile(´drive:\caminhos\arquivo.txt´);
end;


agora que você carregou, você precisa carregar essa lista no seu combo box certo?
então faça o seguinte no onShow mesmo, onde você carregou o arquivo:
var
 cont: integer;
begin
  ...
  ComboBox.Items.AddStrings(Lista);
  for cont := 0 to ComboBox.Items.Count -1 do
    ComboBox.Items[cont] := Copy(ComboBox.Items[cont],1,Pos(´||´,ComboBox.Items[cont]) - 1);
end;


pronto, agora você tem o seu combo carregado. Agora falta atribuir o valor ao edit quando selecionar o combo. Então, no OnChange do combo faça o seguinte:

TForm.ComboBoxChange...
being
  Edit1.Text := Copy(Lista[ComboBox.ItemIndex],Pos(´||´,Lista[ComboBox.ItemIndex]) + 2,Length(Lista[ComboBox.ItemIndex]) - Pos(´||´,Lista[ComboBox.ItemIndex]) - 2);
end;


pronto, agora está completo.
abraços, e boa sorte!


GOSTEI 0
Yankleber

Yankleber

22/11/2003

Oi Dan,

Desculpe a demora, acho que resolvi para você.

1) Crie um form e coloque nele dois componentes: um combobox e um editbox.

2) Em seguida copie e cole dentro do seu form o código abaixo:

unit popCombo;

interface

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

type
    TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ComboDesc: array of string;

implementation

{$R *.dfm}

procedure FillCombo;
var
    F: TextFile;
    S: string;
    z,zz:integer;

begin
    AssignFile(F, ´teste.txt´);
    Reset(F);
    zz := 0;
    while not eof (F) do
    begin
        readln(F,S);
        for z := 0 to length(S) do
        begin
            if copy(S,z,2) = ´||´ then
            begin
                form1.combobox1.Items.Add(copy(S,0,z-1));
                zz := zz+1;
                SetLength (ComboDesc,zz);
                ComboDesc[zz-1] := copy(S,z+2,length(S)-z);
            end;
        end;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    fillcombo;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
    edit1.Text := ComboDesc[combobox1.itemindex];
end;

end.


3) Finalmente, crie um arquivo texto com os nomes e cargos como você tinha definido, e salve-o com o nome teste.txt, ou se ele tiver outro nome, mude o nome no fonte acima.

Pronto, pode rodar que funciona!

Abraços, espero ter ajudado.


GOSTEI 0
Dan

Dan

22/11/2003

Tenho que agradeçer a vcs, yankleber e ao zerneo, muito obrigado funcionou exatamente como eu queria... vcs são feras mesmo!

Valeu!


GOSTEI 0
POSTAR