Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Запретить выбирать пункт в ComboBox


Автор: Matematik 25.8.2006, 11:47
Надо в комбобокс сделать выбор
Код

Группа 1
-Итем 1
-Итем 2
-Итем 3
Группа 2
-Итем 4
-Итем 5
-Итем 6

Так вот надо запретить выбирать пункты "Группа 1", "Группа 2"
 smile 

Автор: Romikgy 25.8.2006, 11:52
а не проще ли зделать 2 комбобокса, в одном перечислить группы, а во втором динамически заливать нужные итемы?

Автор: Matematik 25.8.2006, 11:57
Проще, но хочется так

Автор: Romikgy 25.8.2006, 11:58
или OnDrawItem обрабатывай

Автор: Matematik 25.8.2006, 12:01
В OnDrawItem идет прорисовка, группы я крашу другим цветом, хочется чтобы юзер не смог нажать на этот итем

Автор: Snowy 25.8.2006, 12:17
Код

procedure TForm1.ComboBoxEx1Select(Sender: TObject);
begin
  with TComboBoxEx(Sender) do
    if ItemsEx.ComboItems[ItemIndex].Indent < 0 then
      ItemIndex := ItemIndex + 1;
end;
В ComboBoxEx группы должны иметь Indent = -1, а элементы Indent = 1

Автор: Yanis 25.8.2006, 12:48
А я бы разукрашиванием решил бы проблему smile
Код
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  ComboBox1.Clear;

  for i := 0 to 9 do
    ComboBox1.Items.Add('Item #' + IntToStr(i+1));
end;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  bIt: Boolean;
begin
  bIt := False;
  case Index of
    1,5:
      begin
        ComboBox1.Canvas.Brush.Color := clGray;
        bIt := True;
        if odSelected in State then
          begin
            ComboBox1.Canvas.Font.Color := clBlack;
          end;
      end;
  else
    if odSelected in State then
      begin
        ComboBox1.Canvas.Font.Color := clRed;
        ComboBox1.Canvas.Brush.Color := cl3DLight;
      end
    else
      ComboBox1.Canvas.Brush.Color := ComboBox1.Color;
  end;

  ComboBox1.Canvas.FillRect(Rect);
  if bIt then
    ComboBox1.Canvas.TextOut(Rect.Left, Rect.Top, ComboBox1.Items.Strings[Index])
  else
    ComboBox1.Canvas.TextOut(Rect.Left+10, Rect.Top, ComboBox1.Items.Strings[Index])
end;


Добавлено @ 12:49 
Ну и естественно обрабатывать ещё последующий выбор Item'а.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)