Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Масштабирование при работе с TScrollBox

38K
30 мая 2008 года
Sansara
3 / / 30.05.2008
Работаю с компонентом TScrollBox(карту рисую), и возникла проблема с масштабированием.
//изменение масштаба катры
TMessage Msg;
//передаю в параметрах сообщения новый масштаб и приращение
Msg.LParamHi = CurrentScale;
Msg.LParamLo = fMinLongitude*CurrentScale + scrlMap->HorzScrollBar->Position;
Msg.WParamHi = fMaxLongitude*CurrentScale;
Msg.WParamLo = fMaxLatitude*CurrentScale - scrlMap->VertScrollBar->Position;
//обновляю скролбокс
frmMapForm->scrlMap->Visible = false;
frmMapForm->scrlMap->Broadcast(&Msg);
frmMapForm->scrlMap->Visible = true;
...
//код компонента (функция объявлена в разделе Protected и прописана в карте сообщений)
void __fastcall TRegionLine::CMChangeZoom(TMessage &Message)
{
CurrentScale = Message.LParamHi;
Top = Message.WParamLo-LatitudeMax*CurrentScale;
Left = LongitudeMin*CurrentScale - Message.LParamLo;
Height = (LatitudeMax - LatitudeMin)*CurrentScale+10;
Width = (LongitudeMax - LongitudeMin)*CurrentScale+10;
}
Проблема же состоит вот в чем: при увеличении масштаба все рисуется корректно. При уменьшении, если видимая часть скролбокса находится в правом нижнем углу, то корректно рисуется только эта видимая часть, а все остальное сдвигается. Помогите пожалуйста обойти эту траблу.
40K
01 июня 2008 года
IgorTsapko
1 / / 01.06.2008
Я так сделал (обработка кнопок + и -):

Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
NowVert = ScrollBox1->VertScrollBar->Position;  //Запомнили текущее положение скроллов
NowHorz = ScrollBox1->HorzScrollBar->Position;
if ((ScrollBox1->VertScrollBar->Range<2500) && (ScrollBox1->HorzScrollBar->Range<2500)) //Предел зума
        {
        ScrollBox1->VertScrollBar->Range=ScrollBox1->VertScrollBar->Range*1.1;  //Увеличили длину полосы прокрутки, тем самым приблизив изображение
        ScrollBox1->HorzScrollBar->Range=ScrollBox1->HorzScrollBar->Range*1.1;
        ScrollBox1->VertScrollBar->Position = NowVert*1.1;      //Сместили позицию бегунка, чтоб не смещать изображение
        ScrollBox1->HorzScrollBar->Position = NowHorz*1.1;
        ScrollBox1->VertScrollBar->Position += 1;       //Перерисовка изображения
        ScrollBox1->HorzScrollBar->Position += 1;
//        Koef *= 1.1;
        }

}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)   //Аналогично увеличению
{

NowVert = ScrollBox1->VertScrollBar->Position;
NowHorz = ScrollBox1->HorzScrollBar->Position;
if ((ScrollBox1->VertScrollBar->Range>460) && (ScrollBox1->HorzScrollBar->Range>460))
        {
        ScrollBox1->VertScrollBar->Range=ScrollBox1->VertScrollBar->Range*0.9;
        ScrollBox1->HorzScrollBar->Range=ScrollBox1->HorzScrollBar->Range*0.9;
        ScrollBox1->VertScrollBar->Position = NowVert*0.9;
        ScrollBox1->HorzScrollBar->Position = NowHorz*0.9;
        ScrollBox1->VertScrollBar->Position += 1;
        ScrollBox1->HorzScrollBar->Position += 1;
//        Koef *= 0.9;
        }
}


Увеличение и уменьшение на 10%. Image1->Stretch = True
38K
02 июня 2008 года
Sansara
3 / / 30.05.2008
Благодарю за содействие. ))))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог