[ Pobierz całość w formacie PDF ]
.W cytowanym ju¿ projekciePanels.bpr na panelu Panel2 (niebieskim) znajduj¹ siê dwa przyciski TBitBtn,zakotwiczone u lewej krawêdzi panelu.Gdy zmienia siê szerokoœæ formularza,zmienia siê równie¿ szerokoœæ niebieskiego panelu, a obydwa przyciski pozostaj¹przy jego lewej krawêdzi.Jeœli chodzi o projekt Panels.bpr, to w oryginale mowa jest o czerwonym paneluPanel5 i na nim te¿ znajduj¹ siê oryginalnie obydwa przyciski, panel ten niezmienia jednak¿e swoich rozmiarów, wiêc sposób zakotwiczenia przycisków w ogólesiê nie ujawnia.Zmodyfikowa³em wiêc projekt, przenosz¹c przyciski na panelniebieski.Ograniczenia swobody zmiany rozmiarów – w³aœciwoœæ ConstraintsZmiana rozmiarów kontrolki ma zazwyczaj sens jedynie w pewnych granicach, wka¿dym razie dobrze jest tê zmianê kontrolowaæ.Jednym z elementów takiejkontroli s¹ ograniczenia (jedno- lub obustronne) na wysokoœæ i (lub) szerokoœækontrolki.Za ograniczenia te odpowiedzialna jest w³aœciwoœæ Constraints, która– sama bêd¹c klas¹ – zawiera w³aœciwoœci: MaxHeight, MaxWidth, MinHeight,MinWidth okreœlaj¹ce (zgodnie ze swymi nazwami) maksymalne i minimalne wartoœciwysokoœci i szerokoœci.We wspominanym ju¿ wielokrotnie projekcie Panels.bpr wykorzystaliœmy têw³aœciwoœæ do kontrolowania rozmiarów formularza g³Ã³wnego tak, by nie sta³ siêon zbyt ma³y.Minimalna wysokoœæ (MinHeight) panelu Panel1 ustawiona zosta³a na300; minimalna szerokoœæ (MinWidth) panelu Panel2 ustawiona zosta³a na tak¹sam¹ wartoœæ – a to oznacza, i¿ obszar klienta formularza zawieraj¹cego tepanele nie mo¿e mieæ rozmiarów mniejszych ni¿ 300 ´ 300 pikseli.Ustawienietych wartoœci bezpoœrednio w formularzu g³Ã³wnym (Form1->Constraints) nie da³obytakich samych rezultatów, bowiem ograniczenia te odnosi³yby siê do formularzajako ca³oœci, nie zaœ tylko jego obszaru klienta.Projekt kalkulatora równie¿ korzysta z kilku ograniczeñ.Przede wszystkimzapewniono dolne ograniczenie rozmiarów formularza (248´52 piksele) tak, byzawsze widoczne by³o przynajmniej menu g³Ã³wne; uzyskanie jednak¿e tak nik³ejwysokoœci mo¿liwe jest tylko po ukryciu (za pomoc¹ menu View) wszystkichobiektów kalkulatora, standardowo bowiem jego obszar klienta musi byæwystarczaj¹cy dla trzech kontrolek o niezmiennej wysokoœci: wyœwietlacza(LCDPanel – 77 pikseli), paska kontrolnego zawieraj¹cego trzy panele zprzyciskami (FunctionButtonsPanel i ConstantsButtonsPanel – po 27 pikseli,NumberButtonsPanel – 213 pikseli) oraz paska statusu (StatusBar1 – 30pikseli).Zdarzenie OnConstrainedResizeZdarzenie OnConstrainedResize generowane jest ka¿dorazowo przy zmianierozmiarów kontrolki – czy to wyniku puszczenia np.ci¹gniêtej krawêdziformularza, czy te¿ zmiany spowodowanej np.zakotwiczeniem.Do jego funkcjiobs³ugi przekazywane s¹ przez referencjê cztery parametry zawieraj¹ce(kolejno): minimaln¹ szerokoœæ, minimaln¹ wysokoœæ, maksymaln¹ szerokoœæ imaksymaln¹ wysokoœæ zgodnie z bie¿¹cymi ustawieniami w³aœciwoœci Constraintsdla kontrolki.Po wyjœciu z funkcji wartoœci tych parametrów staj¹ siê nowymiograniczeniami, tak wiêc mo¿liwe jest modyfikowanie w³aœciwoœci Constraintskontrolki w ramach obs³ugi jej zdarzenia OnConstrainedResize.Nowe rozmiarykontrolki nie zostan¹ zaakceptowane, je¿eli nie bêd¹ zgodne z tymi nowymiograniczeniami.W naszym projekcie wykorzystujemy zdarzenie OnConstrainedResize do dynamicznejweryfikacji ograniczeñ rozmiarów panelu ButtonsControlBar:Wydruk 3.24.Dynamiczna weryfikacja ograniczeñ Constraints panelu przyciskówvoid __fastcall TMainForm::ButtonsControlBarConstrainedResize(TObject* Sender,int& MinWidth,int& MinHeight,int& MaxWidth,int& MaxHeight){GetControlBarMinWidthAndHeight(ButtonsControlBar, MinWidth, MinHeight);}Do obliczenia minimalnych rozmiarów paska kontrolnego ButtonsControlBarwykorzystywana jest funkcja GetControlBarMinWidthAndHeight(), badaj¹capo³o¿enie i rozmiary wszystkich kontrolek, dla których panel ten jest kontrolk¹macierzyst¹; wskaŸniki do kontrolek potomnych danej kontrolki macierzystejznajduj¹ siê pod jej w³aœciwoœci¹ tablicow¹ Controls[].Oto treœæ tej funkcji:Wydruk 3.25.Obliczanie minimalnych rozmiarów kontrolki macierzystejvoid __fastcall TMainForm::GetControlBarMinWidthAndHeight(TCustomControlBar* ControlBar,int& MinWidth,int& MinHeight){int MinLeft = 0;int MinTop = 0;int MaxRight = 0;int MaxBottom = 0;bool FirstVisible = true;for(int i=0; iControlCount; ++i){if(ControlBar->Controls[i]->Visible){if(FirstVisible){MinLeft = ControlBar->Controls[i]->Left-11;MinTop = ControlBar->Controls[i]->Top-2;MaxRight = ControlBar->Controls[i]->Left+ ControlBar->Controls[i]->Width + 2;MaxBottom = ControlBar->Controls[i]->Top+ ControlBar->Controls[i]->Height + 2;FirstVisible = false;}else{if((ControlBar->Controls[i]->Left-11) < MinLeft){MinLeft = ControlBar->Controls[i]->Left-11;}if((ControlBar->Controls[i]->Top-2) < MinTop){MinTop = ControlBar->Controls[i]->Top-2;}if((ControlBar->Controls[i]->Left+ ControlBar->Controls[i]->Width + 2) > MaxRight){MaxRight = ControlBar->Controls[i]->Left+ ControlBar->Controls[i]->Width + 2;}if((ControlBar->Controls[i]->Top+ ControlBar->Controls[i]->Height + 2) > MaxBottom){MaxBottom = ControlBar->Controls[i]->Top+ ControlBar->Controls[i]->Height + 2;}}}}MinWidth = (MaxRight - MinLeft);MinHeight = (MaxBottom - MinTop);}Dla ka¿dej kontrolki obliczane jest po³o¿enie jej czterech krawêdzi i w wynikuporównañ ustalane jest po³o¿enie najwy¿szej krawêdzi górnej, najni¿ej krawêdzidolnej, najbardziej na lewo po³o¿onej krawêdzi lewej i najbardziej na prawopo³o¿onej prawej krawêdzi [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • coubeatki.htw.pl