Paski przewijania (ScrollBars)

0

Builder. Programowo próbuję zmieniać wysokość formy (Height) na większą niż wysokość ekranu jednak nie przynosi to rezultatu (zresztą w czasie projektu też nie mogę tego zrobić). Chciałbym aby przy wysokości większej niż ekran pojawiał się pionowy pasek przewijania.
Albo inaczej: mam na formie o stałych rozmiarach (mieszczącej się na ekranie) komponent TPanel, który w czasie działania programu zwiększa swą wysokość i chciałbym aby w panelu pojawiał się pionowy scrollbar, gdy jego wysokość przekroczy odpowiednią wartość.
Napiszcie jak to zrobić bo mi już ręce opadają... [stuk]

0

Bardzo fajne pytanie... Trochę się musiałem nagłowić, ale coś mam...

Najpierw zmienna globalna:
[code]int pos = 0; //zmienna - by nie trzeba było zapamiętywać poprzednich położeń komponentów[/code]

Przyjmijmy, że tym panelem będzie Panel1. W OnCreate wstaw Panel1->DoubleBuffered = true; Trochę to pomoże, ale i tak będzie się mazać:)
Teraz wstaw na Panel1 komponent TScrollBar i ustaw jego Align = rightk i Kind = sbVertical; Dla wygody nazwij go np. S

Teraz przyjmijmy, że na Panel1 masz już poukładane komponenty. Ustaw ich Tag (oprócz ScrollBar`a) na 1 (próbowałem wymyślić jakieś rozwiązanie z Parent, ale coś mi nie szło, więc wykorzystałem Tag).
Następnie kod w OnChange ScrollBara (name: S):

void __fastcall TForm1::SChange(TObject *Sender)
{
int roznica = S->Position - pos;
pos = S->Position;

for(int i=0; i<Form1->ComponentCount; i++)
{
TClass ClassRef;
    for (ClassRef = Form1->Components[i]->ClassParent(); ClassRef != NULL; ClassRef = ClassRef->ClassParent())
      if (String(ClassRef->ClassName()) == "TControl")
      {
      TControl *TheObject = (TControl *)Form1->Components[i];
      if(TheObject->Tag == 1)
      TheObject->Top-=roznica;
      }
};
}

Ten kod przesuwa wszystkie komponenty mające Tag = 1 o wartość w scrollbar...

PS> nie wiem, czy dokładnie o to chodziło, ale chyba o coś w tym stylu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1