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


Игорь ЖАКО   (2006-10-19 09:54:00) [1]

Огромное Спасиба всем особенно MsGuns


Slym   (2006-10-19 05:00:00) [2]

Какие у нас классные программисты:
if ADOQuery1.FieldByName('status').AsInteger=0 Then
ImageIndex:=0;

вот так надо:

procedure TFmain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var ImageIndex:integer;
begin
 if Column.FieldName='Status' then
 begin
   TDBGrid(Sender).Canvas.FillRect(Rect);
   ImageIndex:=Column.Field.AsInteger;
   if (ImageIndex<ImageList1.Count) and (ImageIndex>=0) then
     ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ImageIndex);
end else
  TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;


Игорь ЖАКО   (2006-10-18 16:29:00) [3]

Вот рабочий код, не знаю правельно или нет зато работает

procedure TFmain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);

 Var ImageIndex   : Integer;
  begin
      if Column.FieldName = 'Status' then
if ADOQuery1.FieldByName('status').AsInteger=0 Then
 ImageIndex:=0;
  ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top, ImageIndex);
   if Column.FieldName = 'Status' then
if ADOQuery1.FieldByName('status').AsInteger=1 Then
 ImageIndex:=1;
  ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top, ImageIndex);
    if Column.FieldName = 'Status' then
if ADOQuery1.FieldByName('status').AsInteger=2 then
ImageIndex:=2;
ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ImageIndex)
end;


Вся соль была в ADOQuery1.FieldByName(   'status').AsInteger


ANB   (2006-10-18 14:55:00) [4]


> If  Column.FieldName='status' then

судя по вот этому коду вообще отрисовки быть не должно, т.к. поле в колонке обычно в верхнем регистре хранится.
Вывод : исходник приведен не из программы. Или не тот кусок исходника.


MsGuns   (2006-10-18 14:11:00) [5]

Зачем Вам переменная ItemIndex, если индекс картинки Вы вытаскиваете непосредственно из поля записи датасета ?

Приведите полный текст обработчика, а не только "рисующий" кусок.


Игорь ЖАКО   (2006-10-18 14:02:00) [6]

Все равно ерунда получаеться все поля DBgrida прорисовываються
не только колонка status


procedure TFmain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
 Var ImageIndex   : Integer;
If  Column.FieldName='status' then
   ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ADOQuery1.FieldByName(   'status').AsInteger)  ;


MsGuns   (2006-10-18 12:49:00) [7]

>Игорь ЖАКО   (18.10.06 12:29) [42]
>MsGuns
 begin
if ADOQuery1.FieldByName('status').AsInteger=1 Then  
If  Column.FieldName='status' then
  ImageIndex:=1; 
    ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ADOQuery1.FieldByName(  'status').AsInteger)  ;
end;

Наклонным выделено лишнее


Игорь ЖАКО   (2006-10-18 12:29:00) [8]

>MsGuns
C OnGetText разобрался
вот что-то с проверкой ячейки не разберусь

  begin
if ADOQuery1.FieldByName('status').AsInteger=1 Then
 If  Column.FieldName='status' then
   ImageIndex:=1;
       ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ADOQuery1.FieldByName( 'status').AsInteger)  ;
end;


MsGuns   (2006-10-18 10:15:00) [9]

>Игорь ЖАКО   (17.10.06 16:14) [30]
>ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ADOQuery1.FieldByName ( 'status').AsInteger)  ;
>тоже самое, рисует в каждом поле

Перед прорисовкой надо выполнить проверку ячейки, для которой выполняется перерисовка:

If Column.FieldName=имя поля, вместо содержимого которого рисуется картинка

>что-то я тут не понял про OnGetText
> Adoquery1.FieldByName('status').OnGetText :='';  
>выдает ошибку

В событиифилда ;)
Двойной клик на компоненте TADOQuery, в появившемся редакторе полей датасета найти то поле, которое отображается в колонке, где надо рисовать иконку. В окне инспектора объектов на закладке "События" (Events) встать курсором на OnGetText и дважды щелкнуть. Затем в том месте, где окажется курсор, набрать между Begin и end

  Text := '';


Slym   (2006-10-18 05:22:00) [10]

Хреново скопипастил... писалось под TDBGridEh но для TDBGrid заменить TDBGridEh на TDBGrid


Slym   (2006-10-18 05:21:00) [11]

procedure TCreditAgentListFr.ArcGridDrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
begin
 if (Column.FieldName='Permit') then
 begin
   TDBGridEh(Sender).Canvas.FillRect(Rect);
   if not Column.Field.IsNull then
     if Column.Field.asBoolean then
       StatusImg.Draw(TDBGrid(Sender).Canvas,Rect.Left+1,Rect.Top+1,0)
     else
       StatusImg.Draw(TDBGrid(Sender).Canvas,Rect.Left+1,Rect.Top+1,1);
 end else
   TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;


ANB   (2006-10-17 18:43:00) [12]


> procedure TFmain.DBGrid1GetCellParams(Sender: TObject; Column:
>  TColumnEh;
>  AFont: TFont; var Background: TColor; State: TGridDrawState);
>
> begin
>  With Dbgrid1.Fields[0] do begin
>    ImageList1 := Self.ImageList1;
>    //табличка преобразований значения поля в картинку
>    Dbgrid1.Columns[0].KeyList.Add('0');
>    Dbgrid1.Columns[0].KeyList.Add('1');
>    Dbgrid1.Columns[0].KeyList.Add('2');
>  End;

Для эхлиба - это уже лишнее. Там визуально все настраивается


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

Пошел другим путем установил DBGridEh
Column[i].ImageList – ImageList с картинками, Column[i].KeyList свойство типа Strings - каждая строка – значение поля, вместо которого будет подставляться картинка из ImageList с соотвествующим индексом;

procedure TFmain.DBGrid1GetCellParams(Sender: TObject; Column: TColumnEh;
 AFont: TFont; var Background: TColor; State: TGridDrawState);
begin
 With Dbgrid1.Fields[0] do begin
   ImageList1 := Self.ImageList1;
   //табличка преобразований значения поля в картинку
   Dbgrid1.Columns[0].KeyList.Add('0');
   Dbgrid1.Columns[0].KeyList.Add('1');
   Dbgrid1.Columns[0].KeyList.Add('2');
 End;


если не сложно как правельно будет код [30]


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


> нет я не программист

тогда нафига тебе это надо ? Да еще и срочно. Лучше дома, не торопясь обдумай все советы. Посмотри на параметры своего обработчика. Решение - тривиальное.


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

нет я не программист


ANB   (2006-10-17 17:21:00) [16]


> а сейчас на работе

тебе на работе поручили это написать ? И сколько платят ?


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

Зарание спасиба ВСЕМза терпение


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

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


ANB   (2006-10-17 17:08:00) [19]

упал под стул.
Игорь, займитесь теорией и прекратите отлаживаться на форуме. Книжки что ли почитайте.


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

Begin
if ADOQuery1.FieldByName('status').AsInteger=1 Then
Begin
ImageIndex:=0; //... { получим значение номера картинки в ImageList
// А теперь пусть ImageList нарисует ее на канве DBGrid'а
ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,ADOQuery1.FieldByName( 'status').AsInteger)  ;

тоже самое, рисует в каждом поле

что-то я тут не понял про OnGetText

//BGrid1.Fields[0].OnGetText:='';
// Adoquery1.FieldByName('status').OnGetText :='';  
выдает ошибку


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

Наверх

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