Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка изображений в Calculated fields, Загрузка изображения в Dataset 
:(
    Опции темы
Akella
  Дата 26.8.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Есть TpFibDataSet. К нему привязан грид.
Нужно в гриде отображать изображения, которые хранятся на диске.
Для этого хочу создать в FibDataSet поле типа Blob или Graphic (на знаю какое лучше) и в событии OnCalcFiels подгружать изображения. А грид их сам отобразит.

Я так понимаю, что нужно будет создать уменьшенные копии изображений и именно их грузить, т.к. уменьшение размера изображений "на лету" может сильно огорчить пользователя в плане производительности.

Если честно, то не знаю, как правильно и как лучше будет выполнить загрузку изображения с диска в событии OnCalcFiels.

Добавлено через 6 минут и 33 секунды
Нашёл это сообщение
http://forum.vingrad.ru/index.php?showtopi...t&p=1937639
попробую

Добавлено через 11 минут и 34 секунды
Не хочет 
Цитата
Project raised exception class EDatabaseError with message 'fibdsArendaSearch: Field 'Фото' cannot be a calculated or lookup field'.


PM MAIL   Вверх
superVad
Дата 26.8.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Akella, почему бы не делать это как в примере в onDrawColumnCell ?
PM MAIL   Вверх
Akella
Дата 26.8.2011, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Хочется в НД, а не в грид :(
PM MAIL   Вверх
Akella
Дата 26.8.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Грид (DevExpress cxGrid) выводится на печать. А если рисовать картинку в гриде, то на печать она выведена не будет.
PM MAIL   Вверх
Akella
  Дата 26.8.2011, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Код

   if dbgArendaPhoto.Visible then
     if AViewInfo.Item.Name = 'dbgArendaPhoto' then
     begin
         sFN_Photo := fmMain.sPhotoArenda + VarToStr(AViewInfo.GridRecord.Values[dbgArendaID.Index]) + '\thumb\' +  VarToStr(AViewInfo.GridRecord.Values[dbgArendaID.Index]) + '.bmp';

         if FileExists(sFN_Photo) then
         begin
           x := AViewInfo.ContentBounds.Left;
           y := AViewInfo.ContentBounds.Top;

           bm := TPicture.Create;
           try
             bm.LoadFromFile(sFN_Photo);
             ACanvas.Draw(x, y, bm.Bitmap);
           finally
             bm.Free;
           end;
         end;// if FileExists(sFN_Photo) then
     end;


ячейки пустые, ошибок нет

Код между try/finally выполняется. Что не так?

PM MAIL   Вверх
Frees
Дата 26.8.2011, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



Цитата(Akella @  26.8.2011,  22:36 Найти цитируемый пост)
Код между try/finally выполняется. Что не так?

а файлы у тебя bmp?

надо что то типа
 ACanvas.Draw(x, y, bm.Graphic ); ?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 26.8.2011, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



да, bmp

Добавлено через 24 секунды
Цитата(Frees @  26.8.2011,  19:45 Найти цитируемый пост)
надо что то типа
 ACanvas.Draw(x, y, bm.Graphic ); ? 


да пробовал, пусто
PM MAIL   Вверх
Frees
Дата 26.8.2011, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



Цитата(Akella @  26.8.2011,  23:27 Найти цитируемый пост)
да, bmp


Код

           bm := TBitmap.Create;
           try
             bm.LoadFromFile(sFN_Photo);
             ACanvas.Draw(x, y, bm.Canvas);
           finally
             bm.Free;
           end;


Это сообщение отредактировал(а) Frees - 26.8.2011, 20:48


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 26.8.2011, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



[DCC Error] E2010 Incompatible types: 'TGraphic' and 'TCanvas'

Добавлено через 1 минуту и 26 секунд
Всё равно идеальный вариант, это загрузка изображений через/в датасет.
PM MAIL   Вверх
Akella
Дата 26.8.2011, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Вот ещё один способ

Код

         if FileExists(sFN_Photo) then
         begin
           AFStream := TFileStream.Create(sFN_Photo, fmOpenRead);
           ASStream := TStringStream.Create('');
           try
             ASStream.CopyFrom(AFStream, 0);
             dbgArenda.DataController.Values[AViewInfo.GridRecord.RecordIndex, dbgArendaPhoto.Index] := TStringStream(ASStream).DataString;
           finally
             AFStream.Free;
             ASStream.Free;
           end;


Но ячейки пустые. Может дело не в отрисовке, в том, что грид привязан к датасету ,а эта колонка нет?
PM MAIL   Вверх
Akella
Дата 26.8.2011, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Всё таки ADone нужно ставить в True в данном случае
 
Так изображения отрисовываются.
Код

         if FileExists(sFN_Photo) then
         begin
           Photo := TPicture.Create;
           try
             Photo.LoadFromFile(sFN_Photo);
             ACanvas.FillRect(AViewInfo.Bounds);
             ACanvas.Draw(AViewInfo.ContentBounds.Left, AViewInfo.ContentBounds.Top, Photo.Graphic);
             ADone := True;
           finally
             Photo.Free;
           end;
 

 
Проблема в том, что при прокрутке грида, диск неимоверно чехлит. Поэтому идеальный вариант, это загрузка изображений в DataSet или в DataController, пока не могу понять, как это правильно реализовать.

Добавлено через 7 минут и 22 секунды
И ещё проблема в том, что картинка отрисовывается не полностью, т.е. виден только левые верхний угол изображения. Нужно как-то Photo: TPicture; сжимать до размера ячейки.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

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


 




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


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

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