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

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

Поле для статуса записи [Access]


Страницы:   1 2 3

Игорь ЖАКО ©   (2006-10-16 17:40:00) 

Подскажите как можно реализовать такую фичу
надо поле(для статуса записи) для показа в Dbgrid информации о выполнении т.е ВЫПОЛНЕНО,НЕВЫПОЛНЕНО, В РАБОТЕ и подсветка различными цветами

может есть такой расширенный dbgrid


MsGuns   (2006-10-17 15:38:00) [21]

ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ADOQuery1.FieldByName( 'STATUS').AsInteger);

И все !
Без всяких этажерок из Case или If

Только не забыть погасить вывод содержимого поля во избежание наложения картинки на текст. Это проще всего делается в обработчике OnGetText поля, которое "назначено" этой колонке грида:

Text := '';


ANB   (2006-10-17 15:17:00) [22]

А теперь сесть и подумать, почему так вышло. Потом запустить отладчик и проверить свои мысли. После чего написать, как надо. А не дергать всех по пустякам. Для решения все уже дано. Написание полностью работающего кода стоит денег.


Игорь ЖАКО   (2006-10-17 14:51:00) [23]

не не стали по верх их нарисовалась а надо только в одном поле и вместо


Игорь ЖАКО   (2006-10-17 14:49:00) [24]

//if MyQuery.FieldByName('STATUS').AsInteger =1
если содержимое поля Status равно 1 то рисавать вторую картинку
ImageIndex:=2
ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top, ImageIndex );    }

в поле будет 3 значения (0 . 1  .  2)


if ADOQuery1.FieldByName('STATUS').AsInteger=1 Then
Begin
ImageIndex:=1; //... { получим значение номера картинки в ImageList

// А теперь пусть ImageList нарисует ее на канве DBGrid'а
ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top, ImageIndex );


получилась вот такая беда все 1 стали картинками


ANB   (2006-10-17 14:35:00) [25]


> IF // рисуется колонка, в которую мы хотим поместить картинку
>
> // и выполняется условие для рисования картинки

Аааа. Понял. Вот тута. Смотришь ТЗ и переводишь с русского на делфи :)


ANB   (2006-10-17 14:34:00) [26]


> подскажите как написать условия

А где условие ?


Игорь ЖАКО   (2006-10-17 14:33:00) [27]

>Shorokhov  [16]
>MsGuns пока это только один рабочий вариант

подскажите как написать условия

procedure TformColorGrid.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var ImageIndex   : Integer;  
Begin
IF // рисуется колонка, в которую мы хотим поместить картинку
// и выполняется условие для рисования картинки
Then Begin
ImageIndex:= ... { получим значение номера картинки в ImageList }

// А теперь пусть ImageList нарисует ее на канве DBGrid'а
ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top, ImageIndex );
End;
End


ANB   (2006-10-17 14:20:00) [28]


> MyTableSTATUS.AsInteger

По хорошему это MyQuery.FieldByName('STATUS').AsInteger


Игорь ЖАКО   (2006-10-17 14:15:00) [29]

>Игорь ЖАКО   [18]

вот я сейчас пытаюсь свой код написать


MsGuns   (2006-10-17 14:11:00) [30]

>Игорь ЖАКО   (17.10.06 14:03) [18]
>  case MyTableSTATUS.AsInteger of     - как переписать

Эту глупость никак не надо переписывать.
Послушайтесь совета: НИКОГДА НЕ ПЕРЕПИСЫВАЙТЕ ЧУЖОЙ КОД БЕЗДУМНО, не вникая в смысл каждой его строки


Игорь ЖАКО   (2006-10-17 14:09:00) [31]

подскажите как написать условия


procedure TformColorGrid.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var ImageIndex   : Integer;  
Begin
IF // рисуется колонка, в которую мы хотим поместить картинку
// и выполняется условие для рисования картинки
Then Begin
ImageIndex:= ... { получим значение номера картинки в ImageList }

// А теперь пусть ImageList нарисует ее на канве DBGrid'а
ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top, ImageIndex );
End;
End  


Игорь ЖАКО   (2006-10-17 14:03:00) [32]

>Shorokhov
ADOQuery1 использую

>  case MyTableSTATUS.AsInteger of     - как переписать


MsGuns   (2006-10-17 14:00:00) [33]

>Shorokhov ©   (17.10.06 12:06) [16]

Не сочтите за обиду, но прежде чем писАть в форум, неплохо посмотреть на свои "труды" критически.
Этот Ваш код не просто далек от оптимальности и сверхгромоздок, но еще и потенциально глючен.


Shorokhov   (2006-10-17 12:06:00) [34]

Ну, сходу можно сделать так. Может корявенько, но проблему решит.
Заранее не известно, сколько статусов может быть у записи.
Например: 0,1,2 и что-то еще в будущем.
Тогда можно кинуть на форму 4 TImage (i0,i1,i2,i3), в каждый из них загрузить по соотв. картинке и в обработчике OnDrawColumnCell написать следующее:

var lR: TRect;
begin
 if Column.FieldName = 'STATUS' then
   begin
     lR := Rect;
     dbg.Canvas.FillRect(Rect);
     i0.Width := Rect.Right - Rect.Left;
     i0.Height := i0.Width;
     i1.Width := Rect.Right - Rect.Left;
     i1.Height := i1.Width;
     i2.Width := Rect.Right - Rect.Left;
     i2.Height := i2.Width;
     i3.Width := Rect.Right - Rect.Left;
     i3.Height := i3.Width;
     case MyTableSTATUS.AsInteger of
       0: dbg.Canvas.Draw(lr.Left + round((lr.right - lr.Left)/2) - 9,lr.Top + round((lr.Bottom - lr.Top)/2 - 8),i0.Picture.Bitmap);
       1: dbg.Canvas.Draw(lr.Left + round((lr.right - lr.Left)/2) - 9,lr.Top + round((lr.Bottom - lr.Top)/2 - 8),i1.Picture.Bitmap);
       2: dbg.Canvas.Draw(lr.Left + round((lr.right - lr.Left)/2) - 9,lr.Top + round((lr.Bottom - lr.Top)/2 - 8),i2.Picture.Bitmap);
     end;
     else dbg.Canvas.Draw(lr.Left + round((lr.right - lr.Left)/2) - 9,lr.Top + round((lr.Bottom - lr.Top)/2 - 8),i3.Picture.Bitmap);
   end;
end;


Игорь ЖАКО   (2006-10-17 11:20:00) [35]

>MsGuns
>ЮЮ  

сейчас почитаю


Игорь ЖАКО   (2006-10-17 11:18:00) [36]

А возможно реализовать такое  -
если в поле Status= 1 то вывести в dbgrid в поле статус определенную картинку а если =2 то другую а если =3 то третью


ЮЮ   (2006-10-17 11:16:00) [37]


> Если надо показывать "статус" записи, который определяет
> сам клиент (т.е. в БД такой информации нет),

Насколько понял я,поле в базе присутствует. Для новой записи устанавливается "не выполнено", в дальнейшем может быть изменено.

Т.е. обычное поле, можно даже в БД "справочник" добавить.
Вопрос о раскраске грида хорошо освещен в "Разноцветный D B G R I D":
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168


Sergey13   (2006-10-17 11:14:00) [38]

> [10] Игорь ЖАКО   (17.10.06 11:06)

Тогда чем это поле отличается от других полей? От каких нибудь "Кода" или "Наименования"? В чем проблема то? Надо - добавь. Лично я не против.


MsGuns   (2006-10-17 11:07:00) [39]

Если надо показывать "статус" записи, который определяет сам клиент (т.е. в БД такой информации нет), то никакие эх!либы, а тем более какие-то левыу мдбгриды не помогут.
Проблема решается путем создания списка "помеченных" записей, куда добавляются или откуда удаляются UID "отмеченных" пользователем записей. В событии перерисовки ячеек грида OnDrawColumnCell надо искать идентификатор текущей записи в списке (годится шустрый IndexOf при условии, что в список добавлялся не сам идентификатор, а преобразованный в стринг аналог) и, если есть, то либо рисовать галочку, либо менять цвет строки, либо еще как-либо выделять "отмеченную" запись.
Технология управления гридом прекрасно описана в статье "Полосатый грид" на Королевстве Дельфи.

ЗЫ. Не пытайтесь решать ВСЕ свои проблемы поиском "подходящих компонент", как советуют многие тут. Это верный путь к непрофессионализму и ламерству, труднонаходимым ошибкам и проклятьям в Ваш адрес тех, кому придется впоследствии разбирать Ваши проекты.


Игорь ЖАКО   (2006-10-17 11:06:00) [40]

Будет меняться пользывателем - при добавлении записи устанавливаеться статус не выполнено и потом можно будет редактировать запись и тогда менять состаяния статуса (Выполнено или в работе) -   я думаю так может есть другие варианты


Страницы:   1 2 3

Наверх

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