![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Проблема такая. Мне надо изменить масштаб изображения, с помощью ScrollBar или кнопок "+"(чтобы увидеть какой-нибудь фрагмент изображения) и "-"(для уменьшения масштаба). Заранье спасибо ![]() |
|
#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. Ну что совсем как маленький?
Только эта! Я писал для примера. Установку размера отображения в отрисовке лучше не делать. Ее надо вынести туда, где меняется масштаб. |