Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизПрокрутка на окне. Найти похожие ветки
← →
Sholah_Weras © (2007-04-17 20:13) [0]И снова - здрасьте, уважаемые.
Такое дело. На форме есть картинки, расположенные в ряд. Под ними есть ScrollBar. Надо каким-то образом реализовать такую фишку, как в некторых gif-редакторах: с помошью ползунка проскроливается список всех картинок, даже тех, которых не видно в данный момент. Т.е. кликнул я "вниз" (ну иль "вправо") по ScrollBar"у - одна картинка исчезла снизу (справа), а другая появилась сверху (слева).
Буду признателен за помощь.
← →
Leonid Troyanovsky © (2007-04-17 20:22) [1]
> Sholah_Weras © (17.04.07 20:13)
> Буду признателен за помощь.
TDrawGrid?
--
Regards, LVT.
← →
Johnmen © (2007-04-17 21:18) [2]TScrollBox?
← →
Sholah_Weras © (2007-04-17 21:21) [3]Эм, я что-то делаю не так или TDrawGrid других файлов,окромя битмапа, не поддерживает?
Потому что, если в Image загружать файл типа .jpg то компилятор в этом месте выдает ошибку про битмап.
DrawGrid1.Canvas.CopyRect(DrawGrid1.CellRect(1, 1),
Image.Canvas, Rect(0, 0, Image.Height, Image.Width));
← →
Leonid Troyanovsky © (2007-04-17 21:26) [4]
> Sholah_Weras © (17.04.07 21:21) [3]
> Потому что, если в Image загружать файл типа .jpg то компилятор
> в этом месте выдает ошибку про битмап.
Дык, а TJPegImage на что?
--
Regards, LVT.
← →
Sholah_Weras © (2007-04-18 08:15) [5]JpegImage: TJpegImage;
JpegImage := TJpegImage.Create;
JpegImage.LoadFromFile("1.jpeg");
DrawGrid1.Canvas.CopyRect(DrawGrid1.CellRect(0,0),JpegImage.Canvas,Rect(0,0, JpegImage.Height,JpegImage.Width));
Не может найти метод Canvas у JpegImage. Иль я что-то не то делаю?
← →
Leonid Troyanovsky © (2007-04-18 13:21) [6]
> Sholah_Weras © (18.04.07 08:15) [5]
Если хочется CopyRect, то лучше преобразовать
jpeg -> bitmap, и работать с ними.
Например,
var
bmp: TBitmap;
jpg: TJPegImage;
..
jpg:= TJPegImage.Create;
try
jpg.Loadfromfile( ... );
bmp := TBitmap.Create;
try
bmp.assign( jpg );
{Работаем с картинкой}
finally
bmp.free
end
finally
jpg.free
end;
Если картинки грузятся в Image, то нарисовать Image.Picture.Graphic
можно на DrawGrid.Canvas путем Draw или StretchDraw.
--
Regards, LVT.
← →
Sholah_Weras © (2007-04-18 15:19) [7]Все бы замечательно, только вот картинка ничерта не грузится в поле, а в левую верхную часть экрана. Что самое забавное - если загрузить несколько файлов, то видно, как чего-то там пытается грузиться в поле (быстрое мелькает). Но потом это что-то исчезает и в леваую часть выводится квадратный кусок картинки. Может я какой св-во где не выставил?
JPG.LoadFromFile(OpenDialog1.Files.Strings[i]);
BMP.Assign(JPG);
DrawGrid1.DefaultColWidth := Round(ImagesFrame[i].Picture.Width / 1.5);
DrawGrid1.DefaultRowHeight := Round(ImagesFrame[i].Picture.Height / 1.5);
DrawGrid1.Canvas.CopyRect(DrawGrid1.CellRect(i,0),BMP.Canvas,Rect(0,0,BMP.Height ,BMP.Width));
← →
Leonid Troyanovsky © (2007-04-18 15:52) [8]
> Sholah_Weras © (18.04.07 15:19) [7]
> там пытается грузиться в поле (быстрое мелькает). Но потом
> это что-то исчезает и в леваую часть выводится квадратный
> кусок картинки. Может я какой св-во где не выставил?
Для того, чтобы не мелькало надо сначала загрузить нужные
картинки в массив битмапов требуемого размера,
а уже затем, в OnDrawCell, рисовать.
Обрати внимание на то, что рисовать надо в том самом Rect,
который передается в параметрах. Ведь, для каждого
ACol, ARow - свой Rect.
--
Regards, LVT.
← →
Sholah_Weras © (2007-04-18 16:07) [9]>Обрати внимание на то, что рисовать надо в том самом Rect,
>который передается в параметрах. Ведь, для каждого
>ACol, ARow - свой Rect.
Честно - не понял. Можно пример? И еще, раз уж на то пошло - без CopyRect обойтись как еще можно?
← →
Leonid Troyanovsky © (2007-04-18 19:35) [10]
> Sholah_Weras © (18.04.07 16:07) [9]
> Честно - не понял. Можно пример?
Предположим, что вся подготовительная работа уже сделана, т.е.
1. массив bmp: array [0..x] of TBimap заполнен картинками,
загруженными из jpeg фалов. Для простоты - одного размера:
bmpWidth, bmpHeight
2. размер ячейки - DefaultRowHeight DefaultColWidth
(случай с переменной высотой-шириной не рассматриваем)
делаем равной размеру битмапа,
у грида оставляем одну строку и 0 FixedRows/Cols
Вычисляем (после загрузки картинок) Rect0 : TRect
Rect0 := Classes.Rect(0, 0, bmpWidth, bmpHeight)
А в обработчике OnDrawCell у нас написано:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with Sender as TDrawGrid do
Canvas.CopyRect(Rect, bmp[AСol].Canvas, Rect0);
end;
Вот, собс-но. Вроде бы, ничего не забыл.
> без CopyRect обойтись как еще можно?
См. [6].
--
Regards, LVT.
← →
Sholah_Weras © (2007-04-18 20:42) [11]Leonid Troyanovsky
Спасибо за помощь и терпение - все работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c