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;
}
}
Масштабирование при работе с 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;
}
Проблема же состоит вот в чем: при увеличении масштаба все рисуется корректно. При уменьшении, если видимая часть скролбокса находится в правом нижнем углу, то корректно рисуется только эта видимая часть, а все остальное сдвигается. Помогите пожалуйста обойти эту траблу.
Я так сделал (обработка кнопок + и -):
Благодарю за содействие. ))))