Kolejność ustawiania elementów za pomocą Align

0

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?

panele.png

0

A próbowałeś zmieniać kolejność wstawiania paneli na formatkę?

1

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

0

@Luc, nie pomogło.
@kAzek, nie mogę tak zrobić, bo to ma być na głównej formie MDI, a chyba nie bardzo się da wykorzystać TPanel jako Parenta dla okienek MDI :(

No cóż, pewnie będzie trzeba to robić "na piechotę" :)

0

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.

0

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;
0

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ć.

0

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).

0

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.

0

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.).

0

Dlaczego koniecznie musi być MDI?

0

Ktoś tak po prostu chce mieć :)

0

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.

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