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/ надеюсь поможет | вот http://www.forum.ru-board.com:9000/topic.cgi?forum=33&topic=10884&start=4460#14 проблема в том, что ошибок нет, но и картинки не отображаются. тогда была версия девок другая, 2011.1.5 вроде, сейчас уже 2012.2.4 вся хитрость была в этой процедуре Values[ARowInfo.RecordIndex, iPhotoFieldIndex] := ImageFileToString(sFN_Photo); тут преобразовывалось изображение как бы в текст, чтобы ячейка смогла отобразить картинку код давно не трогал, не знаю, в какой момент впервые проявила себя проблема Добавлено: Нашёл проблему. DisableControls/EnableControls; Нужно перед загрузкой картинок выполнять EnableControls;
---------- /не мы такие, жизнь такая/ |
|