X11
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору я реализовал так 1. Процедура ForEachRow (см. документацию) Код: dbgApart - TcxGridDBTableView dbgApartPhoto - колонка для вывода изображения, properties := Image, properties.GraphicClassName := TdxSmartImage, procedure TfmApartSearch.DoLoadImageForEachRow(ARowIndex: Integer; ARowInfo: TcxRowInfo); Var sFN_Photo, sPhotoPath: string; iPhotoFieldIndex, iIdFieldIndex: integer; begin // загружаем в каждую запись грида(поле Фото) эскизы, на ходу создавая эскизы, если их нет. with dbgApart.DataController do begin iPhotoFieldIndex := dbgApartPhoto.index; iIdFieldIndex := dbgApartID.Index; sPhotoPath := fmMain.sPhotoApart; sFN_Photo := IncludeTrailingPathDelimiter(sPhotoPath + VarToStr(Values[ARowInfo.RecordIndex, iIdFieldIndex])) + '___thumbnail.bmp'; //если включен параметр "всегда пересоздавать эскизы", то удаляем существующий, чтобы создать новый if bAlwaysRecreateThumbnails then DeleteFile(sFN_Photo); //если эскиза не существует, то создаём его из первого файла с именем "_thmb.*" if not FileExists(sFN_Photo) then GetThumbnailFromImageFile(sPhotoPath + VarToStr(Values[ARowInfo.RecordIndex, iIdFieldIndex]));// ищем файл, имя которого = _thmb.* //если эскиза не существует всё равно, то создаём его из первого попавшего подходяещего файла с фотоснимком if not FileExists(sFN_Photo) then GetThumbnailFromFirstImageFile(sPhotoPath + VarToStr(Values[ARowInfo.RecordIndex, iIdFieldIndex])); if FileExists(sFN_Photo) then Values[ARowInfo.RecordIndex, iPhotoFieldIndex] := ImageFileToString(sFN_Photo); if Assigned(fmWait) then begin fmWait.cxProgressBar1.Position := ARowInfo.RecordIndex; Application.ProcessMessages; end;// if Assigned(fmWait) then end;// with dbgArenda.DataController do end; | После открытия таблицы загружаю фото из файлов Код: //если колонка для фото видима и разрешено использование фото, то создаем и показывем эскизы if (dbgApartPhoto.Visible) and (fmMain.bUsePhoto) then begin fmWait := TfmWait.Create(self); try fmWait.cxProgressBar1.Position := 0; fmWait.cxProgressBar1.Properties.Max := dbgApart.DataController.RecordCount; fmWait.cxProgressBar1.Visible := true; fmWait.Show; Application.ProcessMessages; dbgApart.DataController.BeginUpdate; dbgApart.DataController.ForEachRow(False, DoLoadImageForEachRow); if bAutoRowHeightToThumbHeight then dbgApart.OptionsView.DataRowHeight := iThumbnailMaxHeight;//максимальная высота строки finally dbgApart.DataController.EndUpdate; FreeAndNil(fmWait); end; end;// if (dbgArendaPhoto.Visible) and (fmMain.bUsePhoto) then | остальное Код: procedure JpegToBmp(jpg: TJPEGImage; bmpDest: TBitmap); procedure BmpToBmp(bmpSrc, bmpDest: TBitmap); procedure PngToBmp(pngSrc: TdxPNGImage; bmpDest: TBitmap); procedure MakeThumbnail(aFileName: string); procedure MakeThumbnailJpg(aFileName: string); procedure MakeThumbnailBMP(aFileName: string); procedure MakeThumbnailPNG(aFileName: string); function GetThumbnailFromFirstImageFile(dir: string): string;//взять первый попавшийся файл function GetThumbnailFromImageFile(dir: string): string;// взять файл, имя которого _thmb.* function ImageFileToString(AFileName: string): string; | в файле http://www.onlinedisk.ru/file/977394/ надеюсь поможет
---------- /не мы такие, жизнь такая/ |
|