Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Прокрутка на окне.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
15-1176012403
Pazitron_Brain
2007-04-08 10:06
2007.05.06
Подскажите Jazz музыканта


2-1176295679
Ezorcist
2007-04-11 16:47
2007.05.06
Отреагировать на ошибку 10061 TClientSocket-a


15-1176019813
easy
2007-04-08 12:10
2007.05.06
Янис Прасол (aka Gero)


2-1176646018
Ezorcist
2007-04-15 18:06
2007.05.06
WinExec возвращает 33


2-1176780365
Romm
2007-04-17 07:26
2007.05.06
Защита файла от удаления