Вывод пиктограмки из ИмиджЛиста в ячейку грида

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

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

Ответить
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Вывод пиктограмки из ИмиджЛиста в ячейку грида

Сообщение qivi »

Вот так я практиковал вывод пиктограмки в ДБ гриде:

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

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var bp:TBitmap;
begin

 bp:=TBitmap.Create;

  If Column.FieldName='N' then
   begin

    with DBGrid1.Canvas do
     begin
      Brush.Color:= clWhite;
      FillRect(Rect);
      ImageList1.GetBitmap(0,bp);
      Draw(round((Rect.Left+Rect.Right-bp.Width)/2),round((Rect.Top+Rect.Bottom-bp.Height)/2),bp);
     end;
   end;
end; 


Вот так пытаюсь переделать для простого грида:

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

procedure TForm2.SGridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
  var bp:TBitmap;
begin

bp:=TBitmap.Create;

 If SGrid.Columns.Items[0] then
  begin
    SGrid.Canvas.Brush.Color:=clWhite;
    SGrid.Canvas.FillRect(Rect);
    IL.GetBitmap(0, bp);
    {with SGrid.Canvas do
    begin
     Brush.Color:= clWhite;
     //FillRect(Rect);
     IL.GetBitmap(0,bp);
     Draw(round((Rect.Left+Rect.Right-bp.Width)/2),round((Rect.Top+Rect.Bottom-bp.Height)/2),bp);
    end;}
  end;

end;



Компилятор ругается:
unit2.pas(62,27) Error: Wrong number of parameters specified for call to "Rect"

на строку:

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

    SGrid.Canvas.FillRect(Rect);    


Подскажите пожалуйста что не так и как реализовать это? Возможно в простом гриде это делается совсем иначе?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

qivi
А Вы не заметили, что во втором случае параметр процедуры называется не Rect. а aRect? ;)
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

А Вы не заметили, что во втором случае параметр процедуры называется не Rect. а aRect? ;)


Честно сказать не знал. Не так часто отступаю от стандартных возможностей компонентов.
Теперь жалуется на If SGrid.Columns.Items[0] then, чем можно заменить ДБГридовский Column.FieldName в простом гриде?
Есть ли пример по выводу пиктограмок в стандартный грид?
Аватара пользователя
leo_bsv
постоялец
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола
Контактная информация:

Сообщение leo_bsv »

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

procedure TForm1.Button6Click(Sender: TObject);
var b:TBitmap;
    x,y:integer;
    r:TRect;
begin
  b:=TBitmap.Create;
  ImageList1.GetBitmap(0,b);
  r:=StringGrid1.CellRect(1,1); // прямоугольник ячейки, в которую вставляем рисунок...
  StringGrid1.Canvas.Draw(r.Left,r.Top,b);
end;
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Я рисую проще:

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

procedure TMainForm.MyGridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
begin

 with MyGrid as TStringGrid do
  begin
   ....
   Canvas.FillRect(aRect);
   ImageList.Draw(Canvas, aRect.Left, aRect.Top, 1);
  // 1 - индекс картинки в ImageList
   ...
  end;

end;
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

qivi писал(а):Честно сказать не знал. Не так часто отступаю от стандартных возможностей компонентов.

Нет, это называется по другому - "Я не посмотрел на заголовок процедуры". :D
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Vadim писал(а):
qivi писал(а):Честно сказать не знал. Не так часто отступаю от стандартных возможностей компонентов.

Нет, это называется по другому - "Я не посмотрел на заголовок процедуры". :D

Кстати говоря, этот параметр переименовали недавно. С полгода назад я перекомпилировал старую Delphi-прогу, там этот параметр был назвал именно Rect - и всё прекрасно работало. А в какой-то момент после очередного обновления из SVN компилятор стал ругаться на Rect, поскольку имя параметра сменили. так что сдаётся мне, в последней стабильной версии Lazarus должен быть именно Rect.
Ответить