Dolna krawedz ControlBar

dział ogólny

Dolna krawedz ControlBar

Nowy postprzez usermaw » czwartek, 23 kwietnia 2009, 21:26

Witam
Wrzucilem na forme ControlBar i MainMenu. ControlBar alTop i ma jaka swoja wysokosc - Height.
Potem wrzucam cos tam na forme, np inna forme. I ta druga forma StayOnTop ma byc dokladnie Form2->Top pod dolna krawedzia ControlBar.
Jak ta krawedz wykryc?

Control bar ma Top==0, ustawianie Form2->Top=ControlBar->Height jest bez sensu. Jest to ustawiane od krawedzi formularza w tym przypadku, a ten ma jeszcze pasek BorderIcons.
Ow Border Ikons moze miec rozna wysokosc, jesli zwiekszy sie jego czcionke.
Do tego jest jeszcze belka mainmenu do uwzglednienia.

najlepiej jest, zeby nie bawic sie w pisanie niepotrzebnego kodu, wykrycie dolnej krawedzi ControlBar. Wtdy belki, czcionki moga miec dowolna wysokosc, a Form2 zwsze bedzie Top pod dolna krawedzia Control bar.

Prosze o pomoc, bo na pewno jest jakas prostacka metoda na to zagadnienie.

Pozdro
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Dolna krawedz ControlBar

Nowy postprzez Cyfrowy Baron » niedziela, 26 kwietnia 2009, 09:12

Musisz skorzystać z funkcji GetSystemMetrics(int) w celu pobrania wysokości MainMenu (SM_CYMENU) i wysokości paska tytułowego (SM_CYCAPTION):

Kod: Zaznacz cały
//---------------------------------------------------------------------------
/* ZDARZENIE OnShow dla Form2                                              */
void __fastcall TForm2::FormShow(TObject *Sender)
{
   int MainMenuHeight = GetSystemMetrics(SM_CYMENU); // wysokość MainMenu
   int CaptionHeight  = GetSystemMetrics(SM_CYCAPTION); // wysokość paska tytuÅ‚owego
   
   this->Top = Form1->Top + MainMenuHeight + CaptionHeight +
             Form1->ControlBar1->Height + (Form1->ControlBar1->BevelWidth *4);

   this->Left = Form1->Left;
}
//---------------------------------------------------------------------------


+ (Form1->ControlBar1->BevelWidth *4); -> dochodzi jeszcze szerokość obramowania komponentu ControlBar, czyli ControlBar->Height + ControlBar->BevelWidth, a *4, gdyż masz górną i dolną krawędź obramowania, która mimo iż BevelWidth = 1 tak naprawdę ze względu na BevelInner i BevelOuter ma podwójną wartość, gdyż BevelWidth = BevelInner + BevelOuter.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Dolna krawedz ControlBar

Nowy postprzez usermaw » Å›roda, 29 kwietnia 2009, 18:50

Calkiem fajne rozwiazanie, wielkie dzieki :)

Wpadlem na pomysl, aby na zyczenie uzytkownika ladnie w dol rozwijala sie tabelka DBGrid z nawigacja i nnymi potrzebnymi komponentami wstawiona na forme glowna . Bo nie zawsze jest potrzebna tabelka z danymi i zajmuje pamiec. No i ma to wygladac jak integralna czesc calosci. Taki zabieg estetyczny.
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości