![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() ![]() ![]() ![]() |
#2
|
|||
|
|||
![]() Элементарно, Ватсон.
Тебе нужен буферный TBitmap (в котором "сидит" картинка) и TPaintBox, "полеженный" на TScrpllBox. Ну и некоторая переменная, регулирующая масштаб. Ну а при отрисовке содержимого ПэйнтБокса просто тупа пересчитываешь размеры картинки и выводишь ее через канву. Код:
type TForm1 = class(TForm) ScrollBox1 : TScroolBox; TPaintBox1 : TPaintBox; ... private K : Double; Buf : TBitmap; ... end; procedure TForm1.PaintBox1Paint(Sender : TObject); begin PaintBox1.Width := Int(K*Buf.Width); PaintBox1.Height := Int(K*Buf.Height); PaintBox1.Canvas.StretchDraw(Rect(0,0,PaintBox1.Width,PaintBox1.Heignt),Buf); end; |
#3
|
|||
|
|||
![]() [Ошибка] Unit1.pas(40): Incompatible types: 'Integer' and 'Extended'
Указывает на строку PaintBox1.Width := Int(K*Buf.Width); |
#4
|
|||
|
|||
![]() А, ну замени Int на Round. Или принудительно отконвертируй результат вычисления размера в Integer. Ну что совсем как маленький?
Только эта! Я писал для примера. Установку размера отображения в отрисовке лучше не делать. Ее надо вынести туда, где меняется масштаб. |