GARANTIR DESCONTO

Fórum Esconder ItemIndex. #291029

07/08/2005

0

Boa Noite, tenho 3 combobox...
Os 3 tem os mesmos valores.

Mas eu precisava de algo assim.

Quando selecionar o 1 itemindex, nos outros 2 combobox não pode aparecer o o ItemIndex 1.


Porque o 1 já está selecionado este item.


Na verdade eu não queria comparar e mandar uma showmessage, gostaria de fazer desse modo, sem digitar muita coisa também.

Existe alguma propriedade nesse sentido ?
Obrigado


Lynx

Lynx

Responder

Posts

07/08/2005

Marco Salles

Existe alguma propriedade nesse sentido ?


Acredito que na VCL não...


gostaria de fazer desse modo, sem digitar muita coisa também.



e colar teria algum problema :?: :?: :?:

então faça o seguinte

1)[b:c893bdf6e1]Coloque todos os combobox com a propriedade Sorted como True[/b:c893bdf6e1].. Isto é fundamental

2) Declare tres variáveis do tipo String

var
 TextoCombobox1:String;
 TextoCombobox2:String;
 TextoComboBox3:String;


Logo apos a declaração dessas variáveis escreva os procedimentos abaixo

procedure Acrecestar(Texto:String;var AlterarCombobox1:TCombobox;var AlterarCombobox2:TCombobox);
begin
AlterarCombobox1.Items.Add(Texto);
AlterarCombobox2.Items.Add(Texto);
end;


procedure Eliminar(texto:String;var AlterarCombobox1:TCombobox;var AlterarCombobox2:TCombobox);
begin
AlterarCombobox1.Items.Delete(AlterarCombobox1.Items.IndexOf(Texto));
AlterarCombobox2.Items.Delete(AlterarCombobox2.Items.IndexOf(Texto));
end;



4)No evento onshow copie o código abaixo
procedure TForm1.FormShow(Sender: TObject);
begin
Combobox1.ItemIndex:=0;
Combobox2.ItemIndex:=1;
Combobox3.ItemIndex:=2;
Combobox1.Items.Delete(Combobox1.Items.IndexOf(Combobox2.Text));
Combobox1.Items.Delete(Combobox1.Items.IndexOf(Combobox3.Text));
Combobox2.Items.Delete(Combobox2.Items.IndexOf(Combobox1.Text));
Combobox2.Items.Delete(Combobox2.Items.IndexOf(Combobox3.Text));
Combobox3.Items.Delete(Combobox3.Items.IndexOf(Combobox1.Text));
Combobox3.Items.Delete(Combobox3.Items.IndexOf(Combobox2.Text));
TextoCombobox1:=Combobox1.Text;
TextoCombobox2:=Combobox2.Text;
TextoComboBox3:=Combobox3.Text;
end;


5)No eventos OnClic de cada combobox Escreva os respectivamente os Métodos para cada OnClick Dos combo..

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
Acrecestar(TextoCombobox1,Combobox2,Combobox3);
TextoCombobox1:=Combobox1.Text;
Eliminar(TextoCombobox1,Combobox2,Combobox3);
end;


procedure TForm1.ComboBox2Click(Sender: TObject);
begin
Acrecestar(TextoCombobox2,Combobox1,Combobox3);
TextoCombobox2:=Combobox2.Text;
Eliminar(TextoCombobox2,Combobox1,Combobox3);
end;


procedure TForm1.ComboBox3Click(Sender: TObject);
begin
Acrecestar(TextoCombobox3,Combobox1,Combobox2);
TextoCombobox3:=Combobox3.Text;
Eliminar(TextoCombobox3,Combobox1,Combobox2);
end;


Acho que estas etapas devem resolver...


Responder

Gostei + 0

07/08/2005

Lynx

Realmente assim funciona, mas imagina umas 30 opções desse modo :lol:
Mas não tem como fugir é assim mesmo

Muito Obrigado Marco Salles! :lol:


Responder

Gostei + 0

07/08/2005

Marco Salles

Realmente assim funciona,


Mas não tem como fugir é assim mesmo


Não sei.. Pode ter sim jeito mais fácil

mas imagina umas 30 opções desse modo


Não entendi.. 30 o que ????


Responder

Gostei + 0

07/08/2005

Lynx

Desculpe não expliquei direito...

Tem 30 opcões dessas...
Não 30 edits..

Sao 30 opções , cada uma delas com 3 combobox diferentes...
Mas para não complicar isso vou fazer de uma maneira mais prática.

Quando selecionar algo igual vou apagar o outro combobox (itemindex-1).

Fica mais prático para fazer.

Mesmo assim Muito Obrigado Marco Salles.


Responder

Gostei + 0

07/08/2005

Marco Salles

Desculpe não expliquei direito... Tem 30 opcões dessas...


[b:33480b45ca]30 opções que voce se refere é a quantidade de Items de cada Combobox [/b:33480b45ca]:?: :?: :?:

Mas para não complicar isso vou fazer de uma maneira mais prática. Quando selecionar algo igual vou apagar o outro combobox (itemindex-1).


[color=darkblue:33480b45ca][b:33480b45ca]coloque esta maneira detalhada para gente amigo é bom que a gente aprende ,
é sempre bom ver outras idéias... [/b:33480b45ca][/color:33480b45ca]


Responder

Gostei + 0

07/08/2005

Lynx

ini:= TIniFile.Create(ExtractFilePath(Application.ExeName)+´config.ini´); if cmbAtalhoCadastro.ItemIndex = cmbAtalhoPesquisa.ItemIndex then begin cmbAtalhoPesquisa.ItemIndex:= -1; Try ini.WriteInteger(´Atalhos´,´cadastro´,cmbAtalhoCadastro.ItemIndex); ini.WriteString(´Atalhos´, ´pesquisa´, ´´); Finally ini.Free; end; end else begin Try ini.WriteInteger(´Atalhos´, ´cadastro´, cmbAtalhoCadastro.ItemIndex); Finally ini.Free; end; end;

Quando seleciono o combobox, eu coloco o ItemIndex em um arquivo .ini.
Mas quando selecionar um que já existe, o combobox que já existe eu deixo o itemindex -1, e gravo uma string vazia no arquivo .ini

A Mesma lógica vou fazer com o resto.

Valeu





Responder

Gostei + 0

07/08/2005

Lynx

Desculpe postei troquei as bolas no post acima.

Quando seleciono o combobox, eu coloco o ItemIndex em um arquivo .ini.
Mas quando selecionar um que já existe, o combobox que já existe eu deixo o itemindex -1, e gravo uma string vazia no arquivo .ini

A Mesma lógica vou fazer com o resto.

Valeu


  ini:= TIniFile.Create(ExtractFilePath(Application.ExeName)+´config.ini´);
  if cmbAtalhoCadastro.ItemIndex = cmbAtalhoPesquisa.ItemIndex then
    begin
      cmbAtalhoPesquisa.ItemIndex:= -1;
      Try
        ini.WriteInteger(´Atalhos´,´cadastro´,cmbAtalhoCadastro.ItemIndex);
        ini.WriteString(´Atalhos´, ´pesquisa´, ´´);
      Finally
        ini.Free;
      end;
    end
  else
    begin
      Try
        ini.WriteInteger(´Atalhos´, ´cadastro´, cmbAtalhoCadastro.ItemIndex);
      Finally
        ini.Free;
      end;
    end;



Responder

Gostei + 0

07/08/2005

Marco Salles

Mas isto somente não o faz sumrir da lista suspensa do comboBox :cry: :cry:

cmbAtalhoPesquisa.ItemIndex:= -1; 



Apenas o esconde , mas se o usuári oclacar na lista ele esta lá....


Responder

Gostei + 0

08/08/2005

Lynx

realmente ele vai estar, mas quando o usuário escolher o mesmo valor, em outro combobox novamente vai sumir.
Ou seja nunca vai conseguir selecionar os 2, porque eu coloco esse código no outro combobox também.

Fica assim:

cmbatalhocadastro
  ini:= TIniFile.Create(ExtractFilePath(Application.ExeName)+´config.ini´);
  if cmbAtalhoCadastro.ItemIndex = cmbAtalhoPesquisa.ItemIndex then
    begin
      cmbAtalhoPesquisa.ItemIndex:= -1;
      Try
        ini.WriteInteger(´Atalhos´,´cadastro´,cmbAtalhoCadastro.ItemIndex);
        ini.WriteString(´Atalhos´, ´pesquisa´, ´´);
      Finally
        ini.Free;
      end;
    end
  else
    begin
      Try
        ini.WriteInteger(´Atalhos´, ´cadastro´, cmbAtalhoCadastro.ItemIndex);
      Finally
        ini.Free;
      end;
    end;




cmbpesquisa
  ini:= TIniFile.Create(ExtractFilePath(Application.ExeName)+´config.ini´);
  if cmbAtalhoPesquisa.ItemIndex = cmbAtalhoCadastro.ItemIndex then
    begin
      cmbAtalhoCadastro.ItemIndex:= -1;
      Try
        ini.WriteInteger(´Atalhos´,´pesquisa´,cmbAtalhoPesquisa.ItemIndex);
        ini.WriteString(´Atalhos´, ´cadastro´, ´´);
      Finally
        ini.Free;
      end;
    end           
  else
    begin
      Try
        ini.WriteInteger(´Atalhos´, ´pesquisa´, cmbAtalhoPesquisa.ItemIndex);
      Finally
        ini.Free;
      end;
    end;



Responder

Gostei + 0

08/08/2005

Marco Salles

Veja , parece que são duas coisas.. Voce iniciou o tópico com um pedido

Quando selecionar o 1 itemindex, nos outros 2 combobox não pode aparecer o o ItemIndex 1.


e se deu por satisfeito simplesmente como isto

realmente ele (´o Item ´) vai estar mas nunca vou conseguir seleciona-lo


Veja que são duas coisas [b:77b43e1fa5]distintas[/b:77b43e1fa5] , apesar que a segunda opção resolve o seu problema...

É claro que se voce inicialmente coloca-se que o item poderia estar nos outros combobox , e o problema fosse so seleção , eu não lhe sugeria o codigo inicial.. No mais é isto ai


Responder

Gostei + 0

08/08/2005

Lynx

realmente eu comecei o tópico com uma coisa, e terminei com outra.

Mas veja bem, o meu objetivo é não conseguir selecionar 2 combobox, com os mesmos valores.

A Sua resposta no primeiro post, foi totalmente certa, porém no decorrer do caminho, eu percebi que fazendo, simplesme isso eu já consegueria chegar no meu objetivo final (De 2 combobox não ter os mesmos valores).

E da primeira maneira eu também precisaria adaptar para gravar em um arquivo .ini.
Ficaria muito bonito o visual, porém vai dar um pouco mais de trabalho.

Como é díficil se expressar por um fórum o que realmente eu precisaria (Achei que tinha alguma propriedade) fica aqui o meu pedido de desculpas, e meu muito Obrigado, porque resolvi o que precisava, e com certeza você me ajudou.


Valeu


Responder

Gostei + 0

08/08/2005

Marco Salles

Show de bola.. Sigamos adiante...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar