[ Pobierz całość w formacie PDF ]
.x,ClientOrigin.y,ClientOrigin.x + ClientWidth,ClientOrigin.y + Source->Control->Height );Source->DockRect = DockingRect;}}Pozostałe parametry funkcji nie są używane; gdyby w treści funkcji ustawić Accept = false, kontrolka nie zostałaby zadokowana.Ostatnim generowanym zdarzeniem, którego obsługę musimy zaimplementować, jest OnDockDrop.Zdarzenie to generowane jest w kontekście kontrolki (tu: formularza głównego), gdy jest w niej dokowana inna kontrolka i umożliwia wykonanie kilku czynności kończących proces dokowania, jak np.zmianę rozmiaru formularza czy też zresetowanie właściwości Anchors i Align dokowanej kontrolki.Implementację funkcji obsługującej zdarzenie OnDockDrop przedstawia wydruk 3.23.Wydruk 3.23.Obsługa zdarzenia OnDockDrop głównego formularzavoid __fastcall TMainForm::FormDockDrop(TObject *Sender,TDragDockObject *Source,int X, int Y){if(Source->Control->Name == "LCDPanel"){Source->Control->Top = 0;Source->Control->Left = 0;Source->Control->Width = ClientWidth;Height = Height + Source->Control->Height;Source->Control->Align = alTop;FirstLCDPanelEndDock = true;}}Dokowany panel reprezentowany jest przez właściwość Control obiektu Source.Funkcja FormDockDrop() po upewnieniu się, iż ma do czynienia z właściwą kontrolką, przywraca panelowi jego oryginalne rozmiary (mogły one zostać zmienione w czasie, gdy kontrolka była wydokowana), zwiększa odpowiednio wysokość formularza, wymusza przywiązanie panelu do górnej krawędzi formularza (Align = alTop), a następnie „resetuje” zmienną FirstLCDPanelEndDock, nadając jej wartość true.Zwróć uwagę na to, iż zmiana rozmiarów formularza dokonywana jest przed zresetowaniem właściwości Align panelu, w przeciwnym razie wysokość formularza mogłaby zostać zwiększona dwukrotnie.Stałoby się tak w sytuacji, gdyby wysokość formularza była zbyt mała, by pomieścić wyświetlacz - wówczas w momencie ustawienia jego wyrównania na alTop formularz zostałby automatycznie powiększony.Jeżeli jednak wykonać zwiększenie wysokości formularza jako pierwszą operację, to na pewno nie zabraknie miejsca na wyświetlacz.Zwróć również uwagę, iż pasek kontrolny z przyciskami (ButtonsControlBar) oraz pasek statusu (StatusBar1) nie wymagają repozycjonowania, bowiem właściwe położenie zapewnia im właściwość Align - wspominaliśmy już o tym przy obsłudze zdarzenia OnEndDock.Operacja dokowania (wydokowania) wyświetlacza naszego kalkulatora, jakkolwiek dość pouczająca, jest jednak w gruncie rzeczy operacją bardzo prostą.Bardziej skomplikowane przykłady dokowania znaleźć można w podkatalogu Examples\Docking lokalnej instalacji C++Buildera.Zmiana rozmiarów kontrolekZe zmianą rozmiarów kontrolek w czasie wykonania programu związane są dwa zdarzenia: OnResize i OnConstrainedResize; wybór konkretnego z nich zależy od efektów, które chcemy uzyskać.W aplikacji kalkulatora wykorzystano obydwa zdarzenia - gdy zmieniane są rozmiary panelu LCDPanel, konieczne jest uaktualnienie położenia zawartych w nim etykiet, z kolei podczas zmiany rozmiarów paska kontrolnego ButtonsControlBar należy uważać, by rozmiary te nie zostały zmniejszone poniżej rozmiarów niezbędnych do zmieszczenia zawartych w nim widocznych paneli z przyciskami.W pierwszym przypadku wystarczająca będzie obsługa zdarzenia OnResize, w drugim natomiast musimy wykorzystać zdarzenie OnConstrainedResize, którego obsługa - w przeciwieństwie do zdarzenia OnResize - zdolna jest powstrzymać operację zmiany rozmiarów kontrolki.Zarządzanie rozmiarami kontrolek odbywać się może także na szczeblu bardziej ogólnym, z wykorzystaniem właściwości: Align, Anchors, AutoSize, Constraints, Height, Left, Top i Width.Zaprezentujemy wykorzystanie ich wszystkich - z wyjątkiem Autosize, powodującej (gdy ustawić ją na true) automatyczne dostosowywanie rozmiarów kontrolki do jej aktualnej zawartości [ Pobierz całość w formacie PDF ]

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