Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > рисовать 2-й рисунок на ячейку DBGrid


Автор: zorro777 3.10.2013, 16:43
Здравствуйте.  Вот я хочу в нажатие кнопки добавит рисунок скажем сперва на первую, потом вторую, потом на третю строку DBGrid различные рисунки. .Но у меня рисунки все одни появляется. Только последний выходит на все строк. Помогите пожалуйста.

Автор: DYUMON 3.10.2013, 22:07
а вот я велосипед покрасил зеленой краской, можно ли им копать картошку?

Автор: zorro777 4.10.2013, 08:45
А как можно решит такую проблему? ну пусть с другим гридом

Автор: Чучмек 4.10.2013, 13:51
У грида есть событие OnDrawColumnCell в нем и рисуй.
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  bmp: TBitmap;
  BlobStream: TBlobStream;
begin
  if Column.Field.IsBlob{ and (DataCol = N) (*Если есть неграфические blob поля*)}then
  begin
    bmp := TBitmap.Create; //Можно содать один раз в FormCreate
    BlobStream := TBlobStream.Create(Column.Field as TBlobField, bmRead);
    if GetBitmap(BlobStream, bmp) then
      (Sender as TDBGrid).Canvas.StretchDraw(Rect, bmp)
    else
      (Sender as TDBGrid).Canvas.FillRect(Rect);
    bmp.Free;    //И соответственно уничтожить в FormDestroy
    BlobStream.Free;
  end;
end;


GetBitmap
Код

function GetBitmap(BlobStream: TStream; Bitmap: TBitmap): Boolean;
var
  BitmapStream: TMemoryStream;
  BlobStreamInterface,
  BitmapStreamInterface: IStream;
  GPImage: TGPImage;//unit GDIPOBJ.pas
  gbmp: TGUID;
  v: int64;
begin
  result := False;
  if not Assigned(Bitmap) or not(Bitmap is TBitmap) then
    Exit;
  BlobStreamInterface := TStreamAdapter.Create(BlobStream);
  BlobStreamInterface.Seek(0, 0, v);
  GPImage := TGPImage.Create(BlobStreamInterface);
  BitmapStream := TMemoryStream.Create;
  if Ok = GPImage.GetLastStatus  then
  begin
    BitmapStream := TMemoryStream.Create;
    BitmapStreamInterface := TStreamAdapter.Create(BitmapStream);
    GetEncoderClsid('image/bmp', gbmp); //unit GDIPUTIL.pas
    GPImage.Save(BitmapStreamInterface, gbmp);
    BitmapStreamInterface.Seek(0, 0, v);
    Bitmap.LoadFromStream(BitmapStream);
    BitmapStream.Free;
    BitmapStreamInterface := nil;
    Result := True;
  end else
  begin
    Bitmap.Canvas.Brush.Color := 0;
    Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
  end;
  BlobStreamInterface := nil;
  GPImage.Free;
end;

Автор: zorro777 7.10.2013, 08:08
Чучмек спасибо большое. Помогло мне.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)