Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.03.11;
Скачать: [xml.tar.bz2];

Вниз

Подгрузка картинок в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
14-32544
vopros
2002-01-23 16:48
2002.03.11
Всем кому нужна помощь по программированию


3-32386
lexxvlad
2002-02-06 12:50
2002.03.11
Как пересоздать индексы?


1-32513
Геральт
2002-02-24 22:58
2002.03.11
Работа с OLE контейнером


1-32518
AlexPro!
2002-02-21 19:09
2002.03.11
Memo


1-32483
kirill2000
2002-02-23 15:24
2002.03.11
Архивация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский