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]
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 :)