Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido)Desabilitar ítem de um ComboBox


edsouzza

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0
Pessoal tem como Desabilitar o ítem de um ComboBox?

Ou seja o usuário escolhe o ítem e este ítem fica aparecendo mas não podendo ser clicado.

Na propriedade style deixe como csOwnerDrawFixed

var
  Form1: TForm1;
  itens : array[1..5] of integer;  // Total de itens do Combobox
  n : integer = 0;
  x : integer = -1;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
   // DESABLITAR ITENS DO COMBOBOX
   n := 1;
end;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var i : integer;
begin

   for i := 0 to ComboBox1.items.Count do
      begin

         with ComboBox1.Canvas do
         begin
            FillRect(Rect);
            // verifica se é o indice a ser desabilitado
            if (Index = itens[i]) then
               begin
                  Font.Color := clGray;

                  if (odSelected in State) then
                     begin
                        Brush.Color := clWhite;
                        FillRect(Rect);
                     end;
               end
            else
               begin
                  if (odSelected in State) then
                     Font.Color := clWhite
                  else
                     Font.Color := clBlack;
            end;
            TextOut(Rect.Left, Rect.Top, ComboBox1.Items.Strings[Index]);
         end;
      end;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
   if n = 1 then
      begin
         x := x + 1;
         itens[x]:= ComboBox1.ItemIndex;  // Item do Combobox que será desabilitado

         if MessageDlg('Deseja Desabilitar mais um item ?',
            mtConfirmation, [mbYes, mbNo], 0) = mrNo then
            n := 0;
       end;

   if ComboBox1.Canvas.Font.Color = clGray then
      showmessage('Desabilitado');
end;

procedure TForm1.FormActivate(Sender: TObject);
var i : integer;
begin
   for i := 1 to 5 do
      itens[i]:= -1;  // limpar o array que guardará os indices do combobox
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...