Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 07:44

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Ячейка Checkbox с текстом
СообщениеДобавлено: 04 авг 2022, 06:44 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Добрый

Подскажите, плз, как сделать ячейку с чекбоксом и текстом (описанием) одновременно, то есть как-то так:
Вложение:
checkboxtext.png
checkboxtext.png [ 653 байт | Просмотров: 1743 ]

Чекбокс прижат к левому краю и текст всегда рядом с ним, текст не редактируется, но значение чекбокса можно менять.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ячейка Checkbox с текстом
СообщениеДобавлено: 08 авг 2022, 17:25 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Для отображения "кликабельных" чекбоксов можно использовать CellButton в коллекции TColumnEh.CellButtons

Код:
        CellButtons = <
          item
            Images.NormalImages = ImageList1
            Style = ebsGlyphEh
            DrawBackTime = edbtNeverEh
            OnClick = DBGridEh1Columns2CellButtons0Click
            HorzPlacement = ebhpLeftEh
            Pressable = False
            OnDraw = DBGridEh1Columns2CellButtons0Draw
          end>


Убрать отрисовку фона кнопки
DrawBackTime = edbtNeverEh

Рисовать картинку Checkbox'а можно из картинок ImageList
Images.NormalImages = ImageList1

Чтобы при нажатии на кнопку не былу эффекта нажатия/сдвига, установить свойство Pressable
Pressable = False


В событии CellButton.OnClick меняем значения нужных полей чтобы изменить статус чекбокса

Код:
procedure TForm1.DBGridEh1Columns2CellButtons0Click(Sender: TObject;
  var Handled: Boolean);
begin
  if (MemTableEh1.FieldByName('Continent').AsString = 'South America') then
  begin
    MemTableEh1.Edit;
    MemTableEh1.FieldByName('Continent').AsString := 'North America';
    MemTableEh1.Post;
  end else
  begin
    MemTableEh1.Edit;
    MemTableEh1.FieldByName('Continent').AsString := 'South America';
    MemTableEh1.Post;
  end;
end;


в событии CellButton.OnDraw можно установить номер картинки из CellButton.Images.NormalImages для отображения

Код:
procedure TForm1.DBGridEh1Columns2CellButtons0Draw(Grid: TCustomDBGridEh;
  Column: TColumnEh; CellButton: TDBGridCellButtonEh; Canvas: TCanvas; Cell,
  AreaCell: TGridCoord; const ARect: TRect;
  ButtonDrawParams: TCellButtonDrawParamsEh; var Handled: Boolean);
begin
  if (MemTableEh1.FieldByName('Continent').AsString = 'South America') then
    ButtonDrawParams.ImageIndex := 1
  else
    ButtonDrawParams.ImageIndex := 0;
end;

Демо проект прилагается.


Вложения:
2022-08-08-TextAndCheckBoxInCell.zip [6.02 KiB]
Скачиваний: 117

_________________
Best regards
EhLib support Team
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ячейка Checkbox с текстом
СообщениеДобавлено: 09 авг 2022, 08:51 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Благодарю за ответ.

Подскажите, плз, в предыдущих версиях библиотеки (до CellButtons) как можно добиться такого поведения?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ячейка Checkbox с текстом
СообщениеДобавлено: 09 авг 2022, 22:14 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Попробуйте использовать Column.ImageList c ShowImageAndText = True

Код:
        Column.ImageList = ImageList1
        Column.ShowImageAndText = True
        Column.TextEditing = False
        Column.OnGetCellParams = DBGridEh1Columns1GetCellParams


Код:
//Событие Column.OnGetCellParams для указания номера картинки.
procedure TForm1.DBGridEh1Columns1GetCellParams(Sender: TObject;
  EditMode: Boolean; Params: TColCellParamsEh);
begin
  if (MemTableEh1.FieldByName('Continent').AsString = 'South America') then
    Params.ImageIndex := 1
  else
    Params.ImageIndex := 0;
end;

//Событие TDBGridEh.OnCellMouseClick для смены картинки при клике на ячейку
procedure TForm1.DBGridEh1CellMouseClick(Grid: TCustomGridEh; Cell: TGridCoord;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer;
  var Processed: Boolean);
begin
  if (Cell.X = 2) and (X < 16) and not (ssDouble in Shift) then
  begin
    if (MemTableEh1.FieldByName('Continent').AsString = 'South America') then
    begin
      MemTableEh1.Edit;
      MemTableEh1.FieldByName('Continent').AsString := 'North America';
      MemTableEh1.Post;
    end else
    begin
      MemTableEh1.Edit;
      MemTableEh1.FieldByName('Continent').AsString := 'South America';
      MemTableEh1.Post;
    end;
  end;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Ячейка Checkbox с текстом
СообщениеДобавлено: 10 авг 2022, 05:24 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Хорошо, спасибо


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB