не могу выделить строку в гриде цветом

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

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

не могу выделить строку в гриде цветом

Сообщение NewUser » 18.10.2007 00:04:25

использую событие DrawColumnCell у грида, код

Код: Выделить всё
if (условие) then begin
   with  DBGrid.Canvas do
   begin
      DBGrid.Canvas.Brush.Color:=clGreen;
      DBGrid.Canvas.Font.Color:=clWhite;
      DBGrid.Canvas.FillRect(Rect);
      DBGrid.Canvas.TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
   end;
   end;


выскакивает ошибка
Access violation

и активна строка
if ((FFieldName<>'') and (FField<>nil)) then
в файле DBGrids

причем выскакивает если TabSheet с гридом становится активный
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение alexs » 18.10.2007 12:37:08

Версия Lazarus?
был недавно глюк у Grid-а и DBGrid-а
чот если он находится на PageControl-е - то эта форма не может коректно создаться/открыться - но это исправлено в последних svn-версиях
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение NewUser » 18.10.2007 12:50:13

версия 0.9.22

если отключить у грида свойство dgIndicator, то все работает нормально
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение alexs » 18.10.2007 13:32:06

NewUser писал(а):если отключить у грида свойство dgIndicator, то все работает нормально

кстати, о птицах, а ты учитываеш что тебе в обраотчик передаётся и вызов для отрисовки индикатора - а у него, как известно, полей нет :-)

посмотри как это в RxDBGrid я сделал - там специальный код для отслеживания индикатора.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение NewUser » 19.10.2007 14:45:38

не учитываю, а как можно его пропустить при отрисовке? к сожалению опыта не хватает разобраться в RxDBGrid
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение alexs » 19.10.2007 19:44:22

NewUser
ну там вобще не надо разбираться - там обработкич именно на этот сулчай я сделал:
Код: Выделить всё
    property OnGetCellProps(Sender: TObject; Field: TField; AFont: TFont;
      var Background: TColor);

вызывеается при отрисовке каждой ячейки, содержащей данные из DataSet-а
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение NewUser » 25.10.2007 01:51:39

вот какая проблема возникла, использую код
Код: Выделить всё
procedure TMainForm.DBGrid7DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Img: Tbitmap;

begin
  Img := TBitmap.Create;

  if ( Column.FieldName = 'VID') then
    begin
      with  DBGrid7.Canvas do begin
      Brush.Color:=clWhite;
      FillRect(Rect);
   
      if (SQL7.FieldByName('VID').AsInteger = 1) then
        begin
          ImageList7.GetBitmap(14,Img);
        end
      else
        begin
          ImageList7GetBitmap(15,Img);
        end;
      Draw(round((Rect.Left+Rect.Right-Img.Width)/2),Rect.Top,Img);
    end;
  end;
end;


для отображения картинок в гриде. все работает нормально, только надписи в title перетираются. аналогичная проблема при замене цифр в гриде на значения (к примеру: 1 - выдано, 2 - принято )

как мне отловить, что сейчас выводится именно title, или есть другие решения. если можно куском кода
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 47

Рейтинг@Mail.ru