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


Автор: Aquanox 6.8.2009, 09:01
Имеем:
- таблица №1 (Images с полями: ID, IMG_LINK), в которой храняться линки на картинки
- таблица №2 (Person с полями: ID, Images_ID, NAME и т.д.), в которой храняться данные по людям
- сами картинки
- Связь между таблицами №1 и №2 (Images.ID<-->Person.Images_ID)

Требуется:
- Как в таблице №2 создать "временную" колонку, которая будет показывать катринки соответствующего значения Images_ID в каждой строке таблицы №2?
- Куда и чего нужно прописать, если не трудно, то выложите не большой примерчик...

Автор: Frees 6.8.2009, 09:06
Цитата(Aquanox @  6.8.2009,  12:01 Найти цитируемый пост)
Как в таблице №2 создать "временную" колонку

Вычислимое поле создай и грузи в него картинку

Цитата(Aquanox @  6.8.2009,  12:01 Найти цитируемый пост)
то выложите не большой примерчик

если будет настроение может ченит накрвпаю....но не сейчас))

Автор: Aquanox 6.8.2009, 13:45
Цитата(Frees @  6.8.2009,  09:06 Найти цитируемый пост)
если будет настроение может ченит накрвпаю....но не сейчас))

Очень надеюсь, что такое настроение будет...

Автор: vovk 6.8.2009, 15:26
Ээ по моему классический TDBGrid не умеет отображать картинки... тут надо сторонними, ну или доробатывать грид

Автор: Frees 7.8.2009, 07:23
Цитата(vovk @  6.8.2009,  18:26 Найти цитируемый пост)
Ээ по моему классический TDBGrid не умеет отображать картинки

не умеет но дает возможность ее там нарисовать

событие DrawColumnCell

Код

procedure TfmMain.gridMainDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin
  if (Column.FieldName = 'IMAGE') then
  begin
    try
      //Рисуем картинку в клеточке грида
      Graph.Assign(TBlobField(TDBGrid(Sender).DataSource.DataSet.FieldByName('IMAGE')));
      TDBGrid(Sender).Canvas.StretchDraw(Rect, Graph.Graphic);
    except
    end;
  end;
end;


Добавлено @ 07:36
пример как сделать то что ты хочеш

Код

procedure TForm1.FormCreate(Sender: TObject); //Событие создание формы
begin
  with ADOQuery1 do
  begin
    OnCalcFields := ADOQuery1CalcFields;
  end;
  //Создаем вычислимое поле (тут проверить надо)
  with TBlobField.Create(ADOQuery1) do
  begin
    DataSet := ADOQuery1;
    FieldKind := fkCalculated;
    FieldName := 'IMAGE';
    Calculated := True;
  end;
end;

procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
//для примера гружу из файла
//IMAGE_FILE поле с именем файла
  TBlobField(ADOQuery1.FieldByName('IMAGE')).LoadFromFile(ADOQuery1.FieldByName('IMAGE_FILE').AsString);
end;

Автор: Aquanox 9.8.2009, 22:58
Спасибо за пример, буду разбираться....

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