FAQ VCL
Компоненты\CheckListBox

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как изменить цвет фона CheckListBox?

procedure ChangeBgColor(clb: TCheckListBox; const Color: TColor);
begin
   if (clb.Color <> Color) and (clb.Canvas.Brush.Color <> Color) then
   begin
      clb.Color := Color;
      // В свежих версиях Delphi (вроде DXx.x) первой
      // строчки достаточно, но для Delphi 7 этого
      // будет недостаточно, нужно дописать еще:
      clb.Canvas.Brush.Color := Color;
      clb.Canvas.FillRect(clb.ClientRect);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   CheckListBox1.Enabled := True;
   ChangeBgColor(CheckListBox1, clWindow);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   CheckListBox1.Enabled := False;
   ChangeBgColor(CheckListBox1, clBtnFace);
end;


Как менять состояние галки в CheckListBox по нажатию на текст?

procedure TForm1.CheckListBox1Click(Sender: TObject);
var
  p: TPoint;
  idx: Integer;
begin
   p := CheckListBox1.ScreenToClient(Mouse.CursorPos);
   idx := CheckListBox1.ItemAtPos(p, True);

   if idx >= 0 then
   begin
      // Условие на проверку координаты нужно для того, чтобы исключать
      // из ибработки нажание на саму галку (в этом случае поведение
      // компонента будет отличаться от ожидаемого).
      if p.X > 14 then
         CheckListBox1.Checked[idx] := not CheckListBox1.Checked[idx];
      if Assigned(CheckListBox1.OnClickCheck) then
         CheckListBox1.OnClickCheck(Sender);
   end;
end;


Как изменить цвет строти/текста в CheckListBox?

procedure TForm1.FormCreate(Sender: TObject);
begin
   CheckListBox1.Style := lbOwnerDrawFixed;
end;

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  txt: string;
begin
   txt := (Control as TCheckListBox).Items[Index];

   (Control as TCheckListBox).Canvas.Font.Style :=
      (Control as TCheckListBox).Canvas.Font.Style - [fsBold];

   if not Odd(Index) then
      (Control as TCheckListBox).Canvas.Brush.Color := clWindow
   else
      (Control as TCheckListBox).Canvas.Brush.Color := clGradientInactiveCaption;

   if (Control as TCheckListBox).Checked[Index] then
   begin // Выбранная строка
      (Control as TCheckListBox).Canvas.Brush.Color := clYellow;
      (Control as TCheckListBox).Canvas.Font.Color := clRed;
      (Control as TCheckListBox).Canvas.Font.Style :=
         (Control as TCheckListBox).Canvas.Font.Style + [fsBold];
   end;

   if odSelected in State then
   begin // Выделенная строка
      (Control as TCheckListBox).Canvas.Brush.Color := clRed;
      (Control as TCheckListBox).Canvas.Font.Color := clWhite;
   end;

   (Control as TCheckListBox).Canvas.FillRect(Rect);
   (Control as TCheckListBox).Canvas.TextOut(Rect.Left, Rect.Top, txt);
end;

При использовании материала - ссылка на сайт обязательна