![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прокрутка на окне.
Sholah_Weras © (2007-04-17 20:13:00)И снова - здрасьте, уважаемые.
Такое дело. На форме есть картинки, расположенные в ряд. Под ними есть ScrollBar. Надо каким-то образом реализовать такую фишку, как в некторых gif-редакторах: с помошью ползунка проскроливается список всех картинок, даже тех, которых не видно в данный момент. Т.е. кликнул я "вниз" (ну иль "вправо") по ScrollBar'у - одна картинка исчезла снизу (справа), а другая появилась сверху (слева).
Буду признателен за помощь.
Sholah_Weras (2007-04-18 20:42:00) [1]Leonid Troyanovsky
Спасибо за помощь и терпение - все работает.
Leonid Troyanovsky (2007-04-18 19:35:00) [2]
> 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 16:07:00) [3]> Обрати внимание на то, что рисовать надо в том самом Rect,
> который передается в параметрах. Ведь, для каждого
> ACol, ARow - свой Rect.
Честно - не понял. Можно пример? И еще, раз уж на то пошло - без CopyRect обойтись как еще можно?
Leonid Troyanovsky (2007-04-18 15:52:00) [4]
> Sholah_Weras © (18.04.07 15:19) [7]
> там пытается грузиться в поле (быстрое мелькает). Но потом
> это что-то исчезает и в леваую часть выводится квадратный
> кусок картинки. Может я какой св-во где не выставил?
Для того, чтобы не мелькало надо сначала загрузить нужные
картинки в массив битмапов требуемого размера,
а уже затем, в OnDrawCell, рисовать.
Обрати внимание на то, что рисовать надо в том самом Rect,
который передается в параметрах. Ведь, для каждого
ACol, ARow - свой Rect.
--
Regards, LVT.
Sholah_Weras (2007-04-18 15:19:00) [5]Все бы замечательно, только вот картинка ничерта не грузится в поле, а в левую верхную часть экрана. Что самое забавное - если загрузить несколько файлов, то видно, как чего-то там пытается грузиться в поле (быстрое мелькает). Но потом это что-то исчезает и в леваую часть выводится квадратный кусок картинки. Может я какой св-во где не выставил?
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 13:21:00) [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 08:15:00) [7]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-17 21:26:00) [8]
> Sholah_Weras © (17.04.07 21:21) [3]
> Потому что, если в Image загружать файл типа .jpg то компилятор
> в этом месте выдает ошибку про битмап.
Дык, а TJPegImage на что?
--
Regards, LVT.
Sholah_Weras (2007-04-17 21:21:00) [9]Эм, я что-то делаю не так или TDrawGrid других файлов,окромя битмапа, не поддерживает?
Потому что, если в Image загружать файл типа .jpg то компилятор в этом месте выдает ошибку про битмап.
DrawGrid1.Canvas.CopyRect(DrawGrid1.CellRect(1, 1),
Image.Canvas, Rect(0, 0, Image.Height, Image.Width));
Johnmen (2007-04-17 21:18:00) [10]TScrollBox?
Leonid Troyanovsky (2007-04-17 20:22:00) [11]
> Sholah_Weras © (17.04.07 20:13)
> Буду признателен за помощь.
TDrawGrid?
--
Regards, LVT.