Вниз
Скачать: CL | DM;

Положение TImage в Scrollbox`е   Найти похожие ветки 

← →
romantic ©   (2005-03-06 12:28) [0]

Доброго времени суток! Недавно столкнулся с проблемой следующего характера: На форме есть Scrollbox в который помещены 2 TImage, в первый TImage загружается бмп-шка через опэндиалог. Во втором я прорисовываю первый TImage но уже с учетом масштабирования (умножаю размеры картинки на масштаб, а затем через image1.Canvas.StretchDraw(rect,image1.Picture.Bitmap)). Потолковые значения скроллбаров устанавливаю так:
scrollbox1.VertScrollBar.Range:=rect.Bottom;
scrollbox1.HorzScrollBar.Range:=rect.Right;
А теперь, собственно, проблема - пытаюсь сделать так, чтобы после изменения масштаба не изменилось положение центра изображения относительно границ скроллбокса(т.е. если в центре был какой-то объект, то он должен так и остаться в центре, но уже отмасштабированным). Пытался отслеживать положения скроллбаров и "масштабировать" их, но изображение смещается так как максимальное значение VertScrollBar.Position не соответствует значению VertScrollBar.Range Та же история и с горизонтальным скроллбаром...
Научите. Заранее благодарен!


← →
romantic ©   (2005-03-07 15:12) [1]

Неужели никто не поможет?
Или слишком подробно все описал?


← →
**BEN**   (2005-03-07 16:44) [2]

не мужик тебе никто не поможет, здесь все слижком умные для нас, блин...


← →
Fenik   (2005-03-07 17:22) [3]

Запоминаешь координаты точки в центре видимой части перед масштабированием. После изменения масштаба простой расчет положения ползунков, чтобы эта точка снова оказалась в центре... Ну, неужели так трудно? Надо лишь маленько напрячь мозгу. :)


← →
Fenik   (2005-03-07 17:33) [4]

> romantic ©  (06.03.05 12:28)
> Пытался отслеживать положения скроллбаров и "масштабировать" их, но изображение смещается так как максимальное значение VertScrollBar.Position не соответствует значению VertScrollBar.Range Та же история и с горизонтальным скроллбаром...


Так ведь Range нужно устанавливать динамически, т.е. после каждого изменения масштаба:
with ScrollBox1 do begin
 VertScrollBar.Range := Rect.Bottom * FScale;
 HorzScrollBar.Range := Rect.Right * FScale;
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
1-1117877764
Anatoly Podgoretsky
2005-06-04 13:36
2005.06.29
Занимательные наблюдения над плавающей запятой


1-1117982090
Cijgan
2005-06-05 18:34
2005.06.29
предусмотреть ввод данных в Edit


9-1111554916
Starter
2005-03-23 08:15
2005.06.29
Несколько видов


14-1117623005
Pearled
2005-06-01 14:50
2005.06.29
Задачка для любителей математики


3-1116144603
GodDamned
2005-05-15 12:10
2005.06.29
ADOQuery1.Parameters.ParamByName(




   Наверх