|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Smirnov Ivan
Цитата:
Цитата:
ЗЫ: Воть аргумент, а то так и будете думать... |
#17
|
|||
|
|||
йа_модуль.пас *rofl*
|
#18
|
|||
|
|||
Гудвин
Цитата:
|
#19
|
|||
|
|||
Вот, а потом ещё кто-то говарит -
Цитата:
|
#20
|
|||
|
|||
Нет, спасибо, конечно за пример, просто не разобрались еще, больно много математики. Пока обнаружил только, что если поменять в формуле для переменной Scale синус на косинус, то результат не изменится. И еще с отрисовкой беда, при уменьшении изображения поля не очищаются и там остатки предыдущих размеров видны.
|
#21
|
|||
|
|||
И еще, нельзя ли как-то ограничить область, в которой отрисовка происходит, а то если масштаб увеличивать, то картинка во всю форму рисуется и под остальные компоненты залазит. Я пытался TImage в ScrollBox поместить, но у него канвы нету (
А мне надо, чтобы TImage был ограниченных и фиксированных размеров, а уменьшалась и увеличивалась в нем сама картинка. |
#22
|
|||
|
|||
Brute Force
"больно много математики" - кхм... о_О хде? |
#23
|
|||
|
|||
Цитата:
тогда тебе разбираться с TPaintBox (кажется так). У него есть эвент - OnPaint - вызывается при перерисовке самого контрола. 1. Создаешь в памяти битмар (FBitmap : TBitmap) оригинального размера (т.е. просто загрузка из файла). 2. На форму кидаешь TScrollBox и настраиваешь его размеры (это если надо даже в случае, когда картинка больше видимой области, иметь возможность прокрутить ее и увидеть любую часть). 3. На TScrollBox кидаешь TPaintBox. 4. Заводишь переменную - коэф. увеличения. Тип - в зависимости от потребностей. Если нужно только увеличение, то можно обойтись Integer, если надо и уменьшение, то тип Double. В примере - первый вариант (FScale : Integer). 4. В событии OnPaint пишешь код отрисовки вида: Код:
// Вариант без TScrollBox var ViewH, ViewH : Intger; R : TRect; begin // вычисляем размеры отображения. Если FScale : Double, то закрыть в Round ViewH := FBitmap.Height * FScale; ViewW := FBitmap/Width * FScale; // Вычисляем координаты области отрисовки R := TRect(Round((PaintBox.Width - ViewW)/2), // Left Round((PaintBox.Height - ViewH)/2), // Top Round((PaintBox.Width - ViewW)/2) + ViewW, // Right Round((PaintBox.Height - ViewH)/2) + ViewH); // Bottom // Рисуем PaintBox.Canvas.StretchDraw(R,FBitmap); end; Вариант с TScrollBox по сути гораздо проще. При изменении масштаба надо просто установить размеры TPaintBox в вычисленные аналогично предыдущему варианту, а в отрисовке R создать по координатам PaintBox'а (R := Rect(0,0,PaintBox.Width,PaintBox.Height) и отрисовать FBitmap (точно также, как и выше). |
#24
|
|||
|
|||
Перетаскивание картинки внутри TImage
Люди, привет вам!
подскажите плиз код! есть Timage (100*100) в нем есть картинка, скажем 500*500 над, чтоб я нажал лев. кнопку мыши на картинке и мог перетаскивать картинуку внктри Timage, при этом, разумеется, надо чтоб Timage оставался нетронутым! Если кто помнит ФотоШоп, то там есть такой инструмент "Рука" (Pan). вот надо чтоб такое работало и у меня! Через функцию BitBLT пробовал, получилось! мне кажется есть намного проще способ, нежели один Timage все время копить и вставлять в другой Timage ! Кто может, подскажите плз! отдельный респект тому |
#25
|
|||
|
|||
Ответил здесь: http://www.delphisources.ru/forum/sh...astpost&t=3144
|