Mam 2 panele - jeden ma Align ustawiony na alTop, a drugi alLeft. Ten pierwszy zajmuje całą górę, a drugi jest pod nim (rysunek A). Chciałbym jednak, aby ten z lewej strony zajmował całą wysokość (rysunek B). Czy da się to zrobić używając właściwości Align?
A próbowałeś zmieniać kolejność wstawiania paneli na formatkę?
Można posłużyć się pomocniczym panelem czyli bierzesz 2 panele jeden ustawiasz alLeft drugi alClient (oczywiście ustawiasz też bevelOuter na bvNone) na tym z alClient dajesz kolejny i jemu ustawiasz alTop
Dodam, że lewy panel ma służyć za takie jakby menu, a prawy to TabControl. Trochę głupio wygląda, kiedy pasek z tabami wychodzi poza obszar roboczy. No ale z tego co widzę, to chyba muszę wybrać obecność tylko jednego z tych 2 elementów. Nawet ręczne ustawianie rozmiaru TabControl'a nie do końca się sprawdza, bo jeżeli nie ma ustawionego Align na alTop, to okienka MDI jakby go nie zauważają i się za nim chowają. Szkoda, że nikt nie wpadł na pomysł dodania priorytetów dla Align.
A nie możesz zamiast Align obsłużyć zdarzenia OnResize coś w stlu:
procedure TMainForm.FormResize(Sender: TObject);
begin
pnlLeft.Left:= 0;
pnlLeft.Top:= 0;
pnlLeft.Width:= 150; //szerokosc panelu
pnlLeft.Height:= ClientHeight;
pnlTop.Left:= pnlLeft.Width;
pnlTop.Top:= 0;
pnlTop.Width:= ClientWidth - pnlLeft.Width;
pnlTop.Height:= 100; //stala wysokosc panelu
end;
Problem polega na tym, że jeżeli nie użyję Align, to okienka MDI zignorują obecność tych elementów i mogą się np. pod nimi chować.
Spróbuj zamiast okienek MDI użyć normalnych. Zrób tak, jak napisał @kAzek z 3 panelami i w największym dokuj okienka (albo lepiej zamiast panelu użyj jakiegoś PageControla, czy czegoś w tym stylu).
W bocznym panelu ustaw Align na AlLeft, a w górnym panelu ustaw Anchors w następujący sposób: akLeft, AkRight i AkTop na True, a AkBottom na False.
Na koniec górny panel ustaw na górze formularza i rozciągnij od bocznego panelu do końca formy.
Nie byłoby problemu gdybym nie chciał użyć okienek MDI (koniecznie muszą być). Niestety inne sposoby niż ustawienie Align jak na razie nie działają. Kiedy zmaksymalizuję okno, jego część chowa się pod panelem. Chyba będę musiał dać sobie spokój, albo "na piechotę" przerabiać wszystko włącznie z okienkami (podmiana OnMaximize itd.).
Dlaczego koniecznie musi być MDI?
Ktoś tak po prostu chce mieć :)
Da się to zrobić prosto, ale jest jeden drawback. Mianowicie:
- ustawiasz dwa panele, jeden na alLeft, drugi na alTop
- na górnym panelu wstawiasz co tam chciałeś i dajesz temu czemuś alRight
- w OnResize formy ustawiasz Width tego czegoś na tyle ile trzeba
Minus: "Listwa ozdobna" w miejscu łączenia się obu paneli
Edit: BorderStyle obu paneli na bsNone i masz jeden gładki "panel" po lewej.