Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.11;
Скачать: CL | DM;

Вниз

Подгрузка картинок в DBGrid на лету по имени файла   Найти похожие ветки 

 
ivans   (2002-02-11 16:26) [0]

Ситуация следующая:
Грид компонента от DevExpress : TdxDBGrid
Всё дело в том, что мне не нужно хранить в базе само изображение,
и хранится только абсолютный путь к нему.
Но при этом при открытии грида нужно чтобы показывались изображение в каждой строчке и его параметры. Всё, кроме самого изображения хранится в БД. Вот я и хочу брать значение пути и подгружать картинку на лету. Проблема с полем, в которое её надо грузить. Может кто сталкивался уже?


 
Анонимщик   (2002-02-11 21:26) [1]

Реализуется это просто. Создаешь вычислимое поле - и то только для того, чтобы было куда рисунок выводить. А на событие OnCalculte (кажется, не помню точно, но что-то такое), берешь Canvas грида и рисуешь. Не получится OnCalculate - используй OnDrawDataCell - там уж точно все нужные параметры есть. За эффективность реализации не буду ручаться, скорее всего, эти рисунки будут перерисовываться хренову тучу раз, если тебя это выполнует, то позаботься о каком-нибудь кэшировании; обычно, если, картинки не чрезмерно большие и компьютер не очень старый - все нормально. Есть довольно много свободных DBGrid"ов, которые все это умеют делать, но я немножко посмотрел на них и решил не связываться, а то на torry столько глючного барахла, что дороже будет. Если есть вопросы, давай.


 
ivans   (2002-02-12 11:44) [2]

Я по такому пути уже ходил. Столкнулся с тем, что поле типа TBlobField не может иметь FieldKind = fkCalculated или fkInternalCalc или fkLookup. Оно вообще по-моему может быть только fkData - то есть должно присутствовать в самой БД.
Картинки - джипеги хорошего качества - где-то от 200 до 1000 кб.
Прилично вообще-то. При технологии на-лету тормозить наверно будет. Кол-во одновременно открытых записей 200-500 может быть. Я вот уже думаю, сделать в БД image поле, где будет храниться только превьюшка (20-30 кб), и с записями она же будет выводиться. А большое изображение будет выводиться только по запросу пользователя не из базы а из файловой системы, а из базы соответственно путь к нему будет браться.
Ну что скажешь?


 
Анонимщик   (2002-02-12 13:52) [3]

А не нужно делать это поле блобом. Сделай его просто, скажем, текстовым или числовым. Но никакого числа, естественно, вычислять не нужно, зато на событие DBGridDrawDataCell пишешь процедуру:
...
// здесь - находишь строку, в которой в данный момент
// рисуются данные и рисуешь прям по канвасу в
// своем вычислимом поле, точнее, колонке, так что и поля,
// видать, не нужно, просто добавь Column в DBGrid
...
// а в конце -
DBGrid1->DefaultDrawDataCell(Rect, Field, State);

Сейчас всего не вспомню, возможно, что-то придется написать на событие TDataSet OndataChange, хотя не уверен. Будут проблемы какие - говори, посмотрю у себя.


 
Анонимщик   (2002-02-12 16:55) [4]

Еще вариант - не выводи все картинки, а только для текущей записи. Места-то все равно на экране мало, но смотри.



Страницы: 1 вся ветка

Текущий архив: 2002.03.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
3-32410
Laimer
2002-02-12 10:52
2002.03.11
QRepord


1-32514
AngeL B.
2002-02-25 13:28
2002.03.11
Как узнать IP-адрес тонкого клиента


1-32470
Bura
2002-02-22 22:07
2002.03.11
Button


6-32525
ShaH
2001-12-26 10:32
2002.03.11
Проблема с соединением сокетов


1-32480
smax
2002-02-24 15:07
2002.03.11
Пару штрихов на Assembler е