Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dxDBGrid + ImageList [D7, 2000]


Sonia ©   (2007-09-04 15:14:00) 

Всем драсте!
Имеется dxDBGrid + OraStoredProc +ImageList 2-мя картинками. Делаю, чтобы в поле colSTAT (типа ImageColumn) отображалась соответствующая картинка.


procedure TfMain.dxDBGridCustomDrawCell(Sender: TObject; ACanvas: TCanvas;
 ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
 ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
 var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
 var ADone: Boolean);
begin
  if AColumn.Name = 'colSTAT' then
    if OraStoredProc.FieldByName('stat').Value = 'ARR' then
      ImageList.Draw(ACanvas,ARect.Left,ARect.Top,1)
    else
      ImageList.Draw(ACanvas,ARect.Left,ARect.Top,0);
end;


Однако картинок нет. Выполняла пошагово - картинки рисуются, но при переходе на новую строку удаляются. В чем может быть ошибка и как ее решить?
Спасибо!


evvcom   (2007-09-05 09:35:00) [1]


> if AColumn.Name = 'colSTAT' then

Марина, не делай так никогда. Придет тебе в голову завтра или через месяц, а то и не тебе, поменять имя столбца, и всё - приплыли! Ошибку будешь искать долго и мучительно. Делай так
if AColumn = colSTAT then

> но при переходе на новую строку удаляются. В чем может быть
> ошибка и как ее решить?

Ты при отрисовке грида используешь значение из DataSet. Грид только при изменении данных в DS достает их из него и сохраняет в своих внутренних массивах, при дальнейших отрисовках он курсор больше не трогает, поэтому ты для всех строк при отрисовке получаешь одно и то же значение OraStoredProc.FieldByName('stat').Value.

> if OraStoredProc.FieldByName('stat').Value = 'ARR' then
>       ImageList.Draw(ACanvas,ARect.Left,ARect.Top,1)
>     else
>       ImageList.Draw(ACanvas,ARect.Left,ARect.Top,0);

Смотри, как более оптимально это написать:
ImageList.Draw(ACanvas,ARect.Left,ARect.Top, Integer(OraStoredProc.FieldByName('stat').Value = 'ARR'));


Sonia   (2007-09-04 16:48:00) [2]

О, отлично! Спасибо! :)


Lacmus   (2007-09-04 16:34:00) [3]

HeaderMinRowCount ?


Sonia   (2007-09-04 16:27:00) [4]

Так, этот вопрос исчерпан. Надо было установить в ImageIndexes значения при который должен ставится конкретный рисунок. Теперь вопрос по самой грид. Как сделать так, чтобы часть заголовка переносилась на другую строку?


Sonia   (2007-09-04 16:21:00) [5]


> Использовать TdxDBGridImageColumn

Он и есть


Lacmus   (2007-09-04 15:37:00) [6]

Использовать TdxDBGridImageColumn или полностью рисовать ячейку (ADone := True)


Наверх

Титульная страница Поиск, карта сайта Написать письмо