[ Pobierz całość w formacie PDF ]
.TField * __fastcall TDBMaskEdit::GetField(void){return(FDataLink->Field);}Aktualizowanie zawartości kontrolki zdarzenieOnDataChangeNasz komponent, mimo połączenia z bazą danych, nie posiada jeszcze mechanizmówumożliwiających reagowanie na zmiany w powiązanych danych, na przykład przesunięcie bazydanych do kolejnego rekordu ( wiersza ).Mechanizmy takie udostępniane są przez klasyłącznikowe każda zmiana w połączonych danych powoduje mianowicie wygenerowaniezdarzenia OnDataChange w kontekście obiektu łącznikowego.Zdarzenie to jest typuTNotifyEvent, co decyduje o postaci jego funkcji obsługi, będącej de facto metodąDataChange() naszego komponentu:class PACKAGE TDBMaskEdit : public TMaskEdit{private:. 69void __fastcall DataChange(TObject *Sender);.}.void __fastcall TDBMaskEdit::DataChange(TObject *Sender){if(!FDataLink->Field) // czy okreslono obiekt łącznikowy?{// nie określono obiektu łącznikowego;// w czasie projektowania zwróć nazwę komponentu,// w czasie wykonania pusty łańcuchif(ComponentState.Contains(csDesigning))Text = Name;elseText = "";}else // określono obiekt łacznikowy, zwróć tekstową reprezentację polaText = FDataLink->Field->AsString;}Metoda DataChange() sprawdza najpierw, czy w ogóle określono obiekt łącznikowy; jeżelitak, to właściwości Text (dziedziczonej z klasy bazowej i reprezentującej wyświetlanązawartość) nadawana jest tekstowa (AsString) reprezentacja odnośnego pola bazy.Jeżeliobiektu łącznikowego nie określono FDataLink jest pustym wskaznikiem nie ma sensupojęcie zawartości powiązanego pola i właściwości Text nadawane są wartości zastępcze: nazwakomponentu w czasie projektowania i pusty łańcuch w czasie wykonania.Zapis zmian do bazy zdarzenie OnUpdateDataNasz komponent w obecnym kształcie zapewnia jedynie podgląd zawartości powiązanego pola,aktualizowany dzięki zdarzeniu OnDataChange().Właściwość ReadOnly posiada domyślnąwartość true, brak jest ponadto mechanizmów powodujących odzwierciedlenie zmianwyświetlanej zawartości w powiązanej bazie danych.Oprócz oczywistego odblokowania komponentu (poprzez ustawienie na false właściwościReadOnly) konieczna jest jeszcze modyfikacja odziedziczonej z klasy bazowej (TMaskEdit)reakcji na zdarzenia pochodzące od myszy i klawiatury.Zachowania te muszą obecnieodzwierciedlać powiązanie komponentu z bazą danych w tym sensie, iż wszelkie zmiany wzawartości komponentu mają sens jedynie wtedy, jeżeli będą mogły być odzwierciedlonew zawartości powiązanego pola.Spełnienie tego warunku sprawdza się, próbując przełączyćpowiązaną bazę danych w stan edycji dokonuje tego metoda Edit() obiektu łącznikowego,zwracająca wartość true, jeżeli przełączenie takie faktycznie nastąpi.Poniższy wydruk przedstawia zmodyfikowane metody MouseDown() i KeyDown()odpowiedzialne za reakcję komponentu na czynności wykonywane z udziałem myszy i klawiatury.W obydwu przypadkach po sprawdzeniu, iż dozwolone jest modyfikowanie zawartościkomponentu (ReadOnly=false) i powiązana baza danych znajduje się w trybie edycji(FDataLink >Edit()=true), następuje powielenie zachowania odziedziczonego z klasy 70bazowej; w przeciwnym razie wywoływana jest funkcja obsługi zdarzenia (odpowiednio:OnMouseDown i OnKeyDown) określona przez użytkownika.Wydruk 7.58.Obsługa myszy i klawiaturyvoid __fastcall TDBMaskEdit::MouseDown(TMouseButton Button, TShiftState Shift,int X, int Y){if(!ReadOnly && FDataLink->Edit())TMaskEdit::MouseDown(Button, Shift, X, Y);else{if(OnMouseDown)OnMouseDown(this, Button, Shift, X , Y);}}void __fastcall TDBMaskEdit::KeyDown(unsigned short &Key, TShiftState Shift){// klawisze sterujące kursoremSet Keys;Keys = Keys [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl odbijak.htw.pl
.TField * __fastcall TDBMaskEdit::GetField(void){return(FDataLink->Field);}Aktualizowanie zawartości kontrolki zdarzenieOnDataChangeNasz komponent, mimo połączenia z bazą danych, nie posiada jeszcze mechanizmówumożliwiających reagowanie na zmiany w powiązanych danych, na przykład przesunięcie bazydanych do kolejnego rekordu ( wiersza ).Mechanizmy takie udostępniane są przez klasyłącznikowe każda zmiana w połączonych danych powoduje mianowicie wygenerowaniezdarzenia OnDataChange w kontekście obiektu łącznikowego.Zdarzenie to jest typuTNotifyEvent, co decyduje o postaci jego funkcji obsługi, będącej de facto metodąDataChange() naszego komponentu:class PACKAGE TDBMaskEdit : public TMaskEdit{private:. 69void __fastcall DataChange(TObject *Sender);.}.void __fastcall TDBMaskEdit::DataChange(TObject *Sender){if(!FDataLink->Field) // czy okreslono obiekt łącznikowy?{// nie określono obiektu łącznikowego;// w czasie projektowania zwróć nazwę komponentu,// w czasie wykonania pusty łańcuchif(ComponentState.Contains(csDesigning))Text = Name;elseText = "";}else // określono obiekt łacznikowy, zwróć tekstową reprezentację polaText = FDataLink->Field->AsString;}Metoda DataChange() sprawdza najpierw, czy w ogóle określono obiekt łącznikowy; jeżelitak, to właściwości Text (dziedziczonej z klasy bazowej i reprezentującej wyświetlanązawartość) nadawana jest tekstowa (AsString) reprezentacja odnośnego pola bazy.Jeżeliobiektu łącznikowego nie określono FDataLink jest pustym wskaznikiem nie ma sensupojęcie zawartości powiązanego pola i właściwości Text nadawane są wartości zastępcze: nazwakomponentu w czasie projektowania i pusty łańcuch w czasie wykonania.Zapis zmian do bazy zdarzenie OnUpdateDataNasz komponent w obecnym kształcie zapewnia jedynie podgląd zawartości powiązanego pola,aktualizowany dzięki zdarzeniu OnDataChange().Właściwość ReadOnly posiada domyślnąwartość true, brak jest ponadto mechanizmów powodujących odzwierciedlenie zmianwyświetlanej zawartości w powiązanej bazie danych.Oprócz oczywistego odblokowania komponentu (poprzez ustawienie na false właściwościReadOnly) konieczna jest jeszcze modyfikacja odziedziczonej z klasy bazowej (TMaskEdit)reakcji na zdarzenia pochodzące od myszy i klawiatury.Zachowania te muszą obecnieodzwierciedlać powiązanie komponentu z bazą danych w tym sensie, iż wszelkie zmiany wzawartości komponentu mają sens jedynie wtedy, jeżeli będą mogły być odzwierciedlonew zawartości powiązanego pola.Spełnienie tego warunku sprawdza się, próbując przełączyćpowiązaną bazę danych w stan edycji dokonuje tego metoda Edit() obiektu łącznikowego,zwracająca wartość true, jeżeli przełączenie takie faktycznie nastąpi.Poniższy wydruk przedstawia zmodyfikowane metody MouseDown() i KeyDown()odpowiedzialne za reakcję komponentu na czynności wykonywane z udziałem myszy i klawiatury.W obydwu przypadkach po sprawdzeniu, iż dozwolone jest modyfikowanie zawartościkomponentu (ReadOnly=false) i powiązana baza danych znajduje się w trybie edycji(FDataLink >Edit()=true), następuje powielenie zachowania odziedziczonego z klasy 70bazowej; w przeciwnym razie wywoływana jest funkcja obsługi zdarzenia (odpowiednio:OnMouseDown i OnKeyDown) określona przez użytkownika.Wydruk 7.58.Obsługa myszy i klawiaturyvoid __fastcall TDBMaskEdit::MouseDown(TMouseButton Button, TShiftState Shift,int X, int Y){if(!ReadOnly && FDataLink->Edit())TMaskEdit::MouseDown(Button, Shift, X, Y);else{if(OnMouseDown)OnMouseDown(this, Button, Shift, X , Y);}}void __fastcall TDBMaskEdit::KeyDown(unsigned short &Key, TShiftState Shift){// klawisze sterujące kursoremSet Keys;Keys = Keys [ Pobierz całość w formacie PDF ]