Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В DBGrid'е не отображаются, картинки из БД 
:(
    Опции темы
MistMan
Дата 9.4.2004, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.4.2004

Репутация: нет
Всего: нет



Есть БД Paradox с картинками в BLOB'ах, я хочу чтоб они отображались в DBGrid'е, а то в ячейках пишется Graphiks.
PM MAIL   Вверх
Maverick
Дата 9.4.2004, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



Предлагаю использовать сторонний компонент dxDBGrid, обычный таких вещей не позволяет.... Поищи по форуму, где скачать - ссылки есть....
Если не хочешь сторонних, то, по-моему, единственный вариант - расположить рядом с DBGrid компонент DBImage, в котором отображать эти самые картинки....


--------------------
smile
PM ICQ GTalk   Вверх
x77
Дата 9.4.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



ну, не совсем. можно перехватывать OnDrawCell. конечно, рисовать в ячейке в 17 пикселов высотой никому не интересно, но это тоже решается через взлом класса:

type
TFake = class (TCustomGrid);

...

TFake (DbGrid1).DefaultRowHeight := 64;

типа того. короче, можно. если протрезвею к вечеру, то скину код smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
MistMan
Дата 11.4.2004, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.4.2004

Репутация: нет
Всего: нет



Maverick
А где его можно скачать, подскажи пожалуйста
PM MAIL   Вверх
MistMan
Дата 11.4.2004, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.4.2004

Репутация: нет
Всего: нет



x77
скинь плизз, очень нужно, если не затруднит с пояснениями, т.к. я не являюсь монстром программирования. а мне еще придется защищать работу

Это сообщение отредактировал(а) MistMan - 11.4.2004, 11:48
PM MAIL   Вверх
Unregistered
Дата 13.4.2004, 07:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да все рисуется в обычном дбгриде. Обрабатывай OnDrawCell. Blob-ы содержат обычные бмп-шки (хотя может и что угодно cool.gif ). Ну скорее всего именно bmp, Создавай Tbitmap. Загружай в него содержимое поля и рисуй на канве grida в rect ячейки. Примеров полно, по-новой писать - ломает уж извини.
  Вверх
x77
Дата 13.4.2004, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



MistMan, сорри за задержку, работа.

я тебе полный текст модуля приведу:
Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Grids, DBGrids, Db, DBTables;

type
 TFake = class (TCustomGrid);

 TForm1 = class(TForm)
   DataSource1: TDataSource;
   Table1: TTable;
   DBGrid1: TDBGrid;
   procedure FormCreate(Sender: TObject);
   procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
     DataCol: Integer; Column: TColumn; State: TGridDrawState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
 TFake (DbGrid1).DefaultRowHeight := 64;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
 bmp: TBitmap;
begin
 if Column.FieldName = 'Graphic' then begin
   bmp := TBitmap.Create;
   try
     bmp.Assign (Table1.FieldByName ('Graphic'));
     DbGrid1.Canvas.StretchDraw (Rect, bmp);
   finally
     bmp.Free;
   end;
 end;
end;

end.


обработчиков всего два, комментарии, я думаю, излишни smile.gif ну а если не излишни, то спрашивай.
Добавлено @ 14:57
пояснять, наверное, стоит только момент с TFake = class (TCustomGrid). детальное описание сего действа можно найти у Марко Кэнту, по-моему, в Delphi Developer's Handbook. смысл в том, что в DbGrid'е, например, скрыты поля типа DefaultColWidth, DefaultRowHeight и пр., объявленные в TCustomGrid. но концепция ООП не позволяет понизить видимость поля в наследниках. для этого их объявляют в protected - разделе. в наследниках те, которые должны быть видимы, переобъявляются в public или в published, а все остальные оказываются как бы скрытыми. но на самом деле они по прежнему видны, и до них можно добраться вышеприведённым способом. с лёгкой руки Марко Кэнту этот способ называется "взломом класса", и суть его в том, что он позволяет в компонентах-наследниках добраться до свойств, которые в их предках были объявлены, как protected.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Maverick
Дата 13.4.2004, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



Ссылки на форуме действительно не работают.... У меня есть версия - 9 мегабайт занимает.... Как перекинуть? на мыло? Он все это делает сам - и высоту, и картинку....

Тож извини за тормоза - после правильного замечания x77 немного потерял интерес к топику....




--------------------
smile
PM ICQ GTalk   Вверх
x77
Дата 13.4.2004, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22




ещё, наверное, немного странно выглядит bmp.Assign (Table1.FieldByName ('...')); в форумах обычно приводятся многоэтажные примеры с чтением в потоки, хорошо ещё, если без создания оных.

здесь дело в том, что для каждого поля его значение возвращается по умолчанию. т.е. объявление Table1.FieldByName ('asd').Value, в общем-то, эквивалентно Table1 ['asd']. на практике это использовать не рекомендуется, т.к. никто не гарантирует, что вариант будет правильно преобразован. поле, содержащее графику, при инициализации получает DataType = ftGraphic. Соответственно, при вызове Assign (а реально - TPersistent.Assign) будет осуществляться копирование в зависимости от типа данных. а эти данные у нас равны Table1.FieldByName ('Graphic').Value, т.е., битмапу.

решительно не знаю, что ещё тут можно пояснять smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Unregistered
Дата 14.4.2004, 01:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Порылся у себы в исходниках и хочу немного добавить. Следующий код:
НЕ РАБОТАЕТ:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var bmp:TBitmap;
str:Tstream;
begin
if Column.Index=7 then
begin
With TDBGrid(Sender) do
begin
bmp:=Tbitmap.Create;
str:=DataSource.DataSet.CreateBlobStream(Column.Field,bmRead);
bmp.LoadFromStream(str) ;
Canvas.StretchDraw(Rect,bmp);
bmp.Free;
str.Free;
end;
end;
end;

получаю "BitMap image is not valid"
таблица animals из DBDEMOS
Через Assign - вопросов нет. (кстати, у меня код тоже взят у Марко Кэнту "Дельфи 4 для профессионалов") Ну а через TStream? Что не так? Преобразование?
У меня есть парадокс-база в которой картинки храняться в формате JPG
и там этот код работает, если, конечно, вместо TBitMap указать TJpegImage

Поясните


  Вверх
MistMan
Дата 14.4.2004, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.4.2004

Репутация: нет
Всего: нет



Спасибо x77 , в принципе все понятно.


Maverick мое мыло [email protected] пришли пожалуйста.


Если будете в Майкопе заходите в гост, в долгу не останусь biggrin.gif

PM MAIL   Вверх
x77
Дата 14.4.2004, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



MistMan, ух ты, я 10 лет в Армавире жил, там до сих пор родители и дочка. где-то через полгода поеду в ваши края.

сбрось координаты на мыло, [email protected], чем чёрт не шутит smile.gif



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
MistMan
Дата 15.4.2004, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.4.2004

Репутация: нет
Всего: нет



x77
Какого фига появляется ошибка:
Incopatibles types 'TDrawGridState' and 'Enumeration' (типа того)

можт я чего не то делаю?
PM MAIL   Вверх
Maverick
Дата 15.4.2004, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



MistMan
Я вчера полдня пытался закачать это дело хоть куда-нибудь в нете.... Не получилось... Компонент называется DevExpress Quantum Grid,
Производитель - Developer Express Inc.... Кто-нибудь подскажет как передать zip-файл в 8 мб на форум?


--------------------
smile
PM ICQ GTalk   Вверх
MistMan
Дата 16.4.2004, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.4.2004

Репутация: нет
Всего: нет



Кто-нибудь может подсказать где даунлоад на этой странице
http://www.delphixjs.com/Soft_Show.asp?SoftID=518 mad.gif
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1283 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.