Desabilitar alguns itens de um combobox no delphi 10

Delphi

27/04/2016

Bom dia!

Eu tenho um groupbox com 8 button, e tenho um combobox com vários itens.
O que eu gostaria de fazer é que quando selecionasse um button do groupbox so ficasse ativo ou selecionável apenas alguns dos itens do combobox. Isso é para diminuir a quantidade de itens a ser analisado quando eu selecionar um dos buttons.

Desde já agradeço.
Josean

Josean

Curtidas 0

Melhor post

Araujo Junior.

Araujo Junior.

27/04/2016

Ao invés de ficarem inativos de acordo com o botão que seu usuário clicar não seria melhor alimentar as opções do combobox em tempo de execução? Ficaria até melhor para seu usuario identificar as opções disponiveis. Com o código abaixo voce pode Adicionar as informações em runtime:
begin
  ComboBox1.Text := '';

  ComboBox1.Items.Clear;
  ComboBox1.Items.Add('Opção 1');
  ComboBox1.Items.Add('Opção 2');
  ComboBox1.Items.Add('Opção 3');
end;



Caso queira realmente desabilitar voce precisa do seguinte:

procedure SetDisabledItem(AComboBox: TComboBox; AIndex: Integer; AValue: Boolean);
begin
 if not Assigned(AComboBox) then Exit;
  if AIndex < AComboBox.Items.Count then begin
    if AValue then begin
      if Integer(AComboBox.Items.Objects[AIndex]) = 0 then begin
        if AIndex = AComboBox.ItemIndex then
          AComboBox.Tag := -1;
        AComboBox.Items.Objects[AIndex] := Pointer(1);
        AComboBox.Items[AIndex] := '['+AComboBox.Items[AIndex]+']';
      end;
    end else begin
      if Integer(AComboBox.Items.Objects[AIndex]) <> 0 then begin
        AComboBox.Items.Objects[AIndex] := nil;
        AComboBox.Items[AIndex] := Copy(AComboBox.Items[AIndex], 2, Length(AComboBox.Items[AIndex])-2);
      end;
    end;
  end;
end;


No botão:
SetDisabledItem(ComboBox1, 2, True);


No OnChange do ComboBox1
with TComboBox(Sender) do begin
    if Integer(Items.Objects[ItemIndex]) <> 0 then begin
      ItemIndex := Tag;
    end else begin
      Tag := ItemIndex;
    end;
  end;


Sds
GOSTEI 2

Mais Respostas

Josean

Josean

27/04/2016

Araujo Junior, realmente ficou muito bom carregar a lista no ComboBox em tempo de execução.

Muito obrigado pela sugestão, problema resolvido.
GOSTEI 0
POSTAR