|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
вывод картинок с проверкой
Всем привет.
подскажите как реализовать: имеется форма, на ней находиться ComboBox(1,2,3,4,5,6), так же имеется около 30 картинок(1.bmp,2.bmp,3.bmp,4.bmp,5.bmp ... 30.bmp). необходимо чтобы при выборе разных значений боксе, выводились на экран картинки(например выбрали 1 - вывелось с 1 по 6 картинки; выбрали 2 - вывелось с 13 по 20; ну и т.п) вотЪ, и вся загвоздка с выводом красиво картинок, чтоб они выводились а-ля таблица примерно так 1 2 3 4 13 14 20 21 30 подскажите как реализовать вывод картинок с проверочкой так... заранее спасибо) |
#2
|
||||
|
||||
Вот. Картинки будут рисоваться прямо на форме в синих прямоугольниках и будут вписываться в определенный прямоугольник (непропорционально).
Код:
const NumBitmaps = 30; // Количество битмапов PreviewSizeX = 200; // Ширина прямоугольника PreviewSizeY = 100; // Высота прямоугольника RectBorder = 3; // Размер границы изображений NumColumns = 3; // Количество столбцов изображений OffsetY = 50; // Откуда будут рисоваться изображения по вертикали var Bitmaps : array [0..NumBitmaps - 1] of TBitmap; // Массив нужных битмапов // Эта процедера собсно отрисовывает картинки начианая с FromImg заканчивая ToImg. procedure DrawImages(FromImg, ToImg : Integer); var i : Integer; r : TRect; begin for i := FromImg to ToImg do with Form1.Canvas do begin Pen.Width := RectBorder; SetRect(r, PreviewSizeX * ((i - FromImg) mod NumColumns), OffsetY + PreviewSizeY * ((i - FromImg) div NumColumns), PreviewSizeX * (1 + ((i - FromImg) mod NumColumns)), OffsetY + PreviewSizeY * (1 + (i - FromImg) div NumColumns)); Rectangle(r); with r do begin Left := Left + RectBorder; Right := Right - RectBorder; Top := Top + RectBorder; Bottom := Bottom - RectBorder; end; StretchDraw(r, Bitmaps[i]); end; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin Canvas.Pen.Width := 0; Canvas.FillRect(ClientRect); Refresh; end; procedure TForm1.FormPaint(Sender: TObject); begin // Здесь задаете какие картинки рисовать в зависимости от того что выбрано в ComboBox1 case ComboBox1.ItemIndex of 0 : DrawImages(0, 5); 1 : DrawImages(6, 11); 2 : DrawImages(12, 17); 3 : DrawImages(18, 23); 4 : DrawImages(24, 29); end; end; procedure TForm1.FormCreate(Sender: TObject); var i : Integer; begin for i := 0 to NumBitmaps - 1 do begin Bitmaps[i] := TBitmap.Create; Bitmaps[i].LoadFromFile(IntToStr(i) + '.bmp'); end; Canvas.Pen.Color := clBlue; // Здесь можно изменить цвет границ картинок Canvas.Brush.Color := Color; end; procedure TForm1.FormDestroy(Sender: TObject); var i : Integer; begin for i := 0 to NumBitmaps - 1 do Bitmaps[i].Free; end; Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#3
|
|||
|
|||
спасибо, завтра, а точнее уже сегодня, попробую помудрить)
|
#4
|
|||
|
|||
ну с картинками я разобрался, почти) сделал просто несколько компонентов TImage, и в них подгружаю что надо... ну вот теперь другая проблема, с выводом картинок штук по 9 все ок, а как быть если надо допустим все 30-50 картинок вывести?
например может сделать несколько панелей одинакого размера, и кнопки перехода между ними, и просто с .visible для панелей помудрить? или может есть чегото более простое? |