Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1176573546
ppcumax
2007-04-14 21:59
2007.05.06
Как загрузить картинку?


2-1176893560
delphi_
2007-04-18 14:52
2007.05.06
расположение кнопок "Свенуть" "Развернуть" "Закрыть"


2-1176528655
Гость у мастеров
2007-04-14 09:30
2007.05.06
ActiveX. начало


2-1176755058
tigraman
2007-04-17 00:24
2007.05.06
Работа с мемо


8-1156316216
Dewian
2006-08-23 10:56
2007.05.06
Визуальные образы в Вмнампе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский