Jeżeli chcesz dodać pasek do obiektu typu
TImage to umieść Image na obiekcie typu
TScrollBox i ustaw jego właściwość
AutoScroll na
true, a
AutoSize na
false. Właściwość
Align dla
Image musi być ustawiona na
alNone. Jeżeli Image będzie zmieniał rozmiar, to na
ScrollBox pojawią się paski przewijania. Wadą tego rozwiązanie jest to, że nie będzie działać dla Image przewijanie pokrętłem myszki. Można jednak rozwiązać ten problem prostym kodem.
Właściwość
KeyPreview formularza ustawiamy na
true. Jeżeli rozmiar Image zmienia się wraz z rozmiarem formularza, to tworzymy dla tegoż formularza zdarzenie
OnResize i wprowadzamy taki kod:
void __fastcall TForm1::FormResize(TObject *Sender)
{
Image1->Top = 0;
Image1->Left = 0;
ScrollBox1->VertScrollBar->Position = 0;
ScrollBox1->HorzScrollBar->Position = 0;
ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
Dla obiektu
ScrollBox również tworzymy zdarzenie
OnResize:
void __fastcall TForm1::ScrollBox1Resize(TObject *Sender)
{
Invalidate();
ScrollBox1->Perform(WM_VSCROLL, 0, 0); }
Dla formularza tworzymy dwa zdarzenia
OnMouseWheelDown i
OnMouseWheelUp:
void __fastcall TForm1::FormMouseWheelUp(TObject *Sender,
TShiftState Shift, TPoint &MousePos, bool &Handled)
{
ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseWheelDown(TObject *Sender,
TShiftState Shift, TPoint &MousePos, bool &Handled)
{
ScrollBox1->Perform(WM_VSCROLL, 1, 0);
}
Jeżeli
ScrollBox znajduje się na formularzu wtórnym
(nie głównym) to należałoby dodać jeszcze obsługę zdarzenie
OnClose i
OnShow dla tegoż formularza:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Image1->Top = 0;
Image1->Left = 0;
ScrollBox1->VertScrollBar->Position = 0;
ScrollBox1->HorzScrollBar->Position = 0;
ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TFULLForm::FormShow(TObject *Sender)
{
ScrollBox1->Perform(WM_VSCROLL, 0, 0);
}
Po tych zabiegach
Image będzie miał paski przewijania, co prawda nie swoje, ale swoich mieć nie może, gdyż ten komponent nie posiada własnej powierzchni i nie dziedziczy po klasie
TWinControl.
Jeżeli chcesz mieć paski przewijania na formularzu, to ustaw mu właściwość
HorzScrollBar Visible na
true i
VertScrollBar Visible na
true.
Co się tyczy
TPageControl, to chyba chodzi Tobie raczej o to żeby
TTabSheet miał paski przewijania?! Niestety ani
TPageControl, ani
TTabSheet nie mają wbudowanych pasków przewijania, więc możesz co najwyżej umieścić na
TabSheet obiekt
ScrollBox.
O obiektach będących elementami interfejsu API powinieneś wiedzieć to, że ich kształt, wygląd i zachowanie są zdefiniowane w systemie Windows, więc nie możesz zrobić z nimi więcej niż na to pozwala systemowe API.