Правильно вывести изображение в ячейке RxDbGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Lemboy
незнакомец
Сообщения: 8
Зарегистрирован: 14.02.2010 00:46:13
Откуда: Крым

Правильно вывести изображение в ячейке RxDbGrid

Сообщение Lemboy »

Есть несколько устаревший опыт в Delphi, Lazarus только начинаю изучать.

Не могу сообразить, как в RxDbGrid в определенном столбце по условию вывести иконку.
Такой код желаемого результата не дает:

Код: Выделить всё

 
procedure TRxDBGridMainForm.RxDBGrid1DrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    if Column.ID = 0 then
      ImageList1.Draw(TRxDBGrid(Sender).Canvas,Rect.Left,Rect.Top, 0 );
end;


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

(WinXP, Lazarus 0.9.28.2, RXLib последний отсюда: http://lazarus-ccr.svn.sourceforge.net/ ... z?view=tar)
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Можно вобще всё визуально сделать. Это если у тебя картинка однозначно соответсвет значению поля.
Посмотри у колонки свойсово ImageList
а также KeyList
в ImageList устанавливаеш изображения, которые будеш отображать.
а в KeyList вносиш чо-то типа такого:
1=0
2=1
3=2

где то что до = - значание поля, а после равно - соответсвеющий индекс из ImageList-а.

Код: Выделить всё

    RxColumn:=TRxColumn(ColumnFromGridColumn(aCol));
    if Assigned(RxColumn) and Assigned(RxColumn.Field) and Assigned(RxColumn.ImageList) then
    begin
      AImageIndex:=StrToIntDef(RxColumn.KeyList.Values[RxColumn.Field.AsString], RxColumn.FNotInKeyListIndex);
      if (AImageIndex > -1) and (AImageIndex < RxColumn.ImageList.Count) then
        DrawCellBitmap(RxColumn, aRect, aState, AImageIndex);
    end

Видиш - вот код, оторый отображает картинку в методе TRxDBGrid.DrawCell
Lemboy
незнакомец
Сообщения: 8
Зарегистрирован: 14.02.2010 00:46:13
Откуда: Крым

Сообщение Lemboy »

Работает! :)
Очень удобная связка ImageList - KeyList.

Самое забавное, что я этого ImageList property не то что не заметил - не нашел, хотя искал.

Спасибо!
Lemboy
незнакомец
Сообщения: 8
Зарегистрирован: 14.02.2010 00:46:13
Откуда: Крым

Сообщение Lemboy »

Однако, есть вопрос.

Похоже, конструкция "ImageList - KeyList" перестает работать если в RxDBGrid.Options
параметры dgIndicator=False либо dgTitles=False
В этих случаях в соответствующей колонке вместо иконки отображается значение поля.
mkazakov
новенький
Сообщения: 52
Зарегистрирован: 24.02.2012 14:04:14
Откуда: Балаково

Сообщение mkazakov »

глупый вопрос а где взять компоненту KeyList?
Аватара пользователя
ZeUsM
новенький
Сообщения: 57
Зарегистрирован: 08.11.2010 12:55:35
Откуда: Нерезиновая

Сообщение ZeUsM »

mkazakov

Посмотри у колонки свойсово ImageList
а также KeyList


Это не компоненты.
mkazakov
новенький
Сообщения: 52
Зарегистрирован: 24.02.2012 14:04:14
Откуда: Балаково

Сообщение mkazakov »

ZeUsM писал(а):mkazakov

Посмотри у колонки свойсово ImageList
а также KeyList


Это не компоненты.


все равно в RxDbGrid я этого не обнаружил.
Аватара пользователя
ZeUsM
новенький
Сообщения: 57
Зарегистрирован: 08.11.2010 12:55:35
Откуда: Нерезиновая

Сообщение ZeUsM »

Изображение

Плохо смотрел. :D
mkazakov
новенький
Сообщения: 52
Зарегистрирован: 24.02.2012 14:04:14
Откуда: Балаково

Сообщение mkazakov »

ZeUsM писал(а):Изображение

Плохо смотрел. :D


Хорошо смотрел

Изображение
Аватара пользователя
ZeUsM
новенький
Сообщения: 57
Зарегистрирован: 08.11.2010 12:55:35
Откуда: Нерезиновая

Сообщение ZeUsM »

Не очень хорошо все таки смотрел, это свойство не грида, а колонки. Чтобы до него добраться нужно создать колонку, я вроде на скрине это показал, не? :o
mkazakov
новенький
Сообщения: 52
Зарегистрирован: 24.02.2012 14:04:14
Откуда: Балаково

Сообщение mkazakov »

Ок :D
Ответить