Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
Druga instrukcja if zapobiega wypisaniu na środkowym panelu tekstu „LCD”, który pełni
jedynie rolę identyfikacyjną. Dotychczas prześledziliśmy działanie podpowiedzi związanej z
klawiszem „MR”, zobaczmy więc teraz, jak funkcjonuje podpowiedź dublująca zawartość
wyświetlacza (patrz wydruk 3.11).
Wydruk 3.11. Odświeżanie zawartości wyświetlacza
void __fastcall TMainForm::UpdateLCDScreen(const AnsiString& NewNumber,
bool Constant)
{
int NumberWidth = LCDScreen->Canvas->TextWidth(NewNumber);
// parametr Constant dodany został w celu wymuszenia lewostronnego
// wyrównania gdy wyświetlana jest stała lub zawartość pamięci
if(Operation == coComplete || Constant)
{
if( (NumberWidth >= LCDScreen->Width)
&& (LCDScreen->Alignment == taRightJustify) )
{
LCDScreen->Alignment = taLeftJustify;
}
else if( (NumberWidth < LCDScreen->Width)
&& (LCDScreen->Alignment != taRightJustify) )
{
LCDScreen->Alignment = taRightJustify;
}
}
else if(LCDScreen->Alignment != taRightJustify)
{
LCDScreen->Alignment = taRightJustify;
}
LCDScreen->Caption = NewNumber;
int pos = LCDScreen->Hint.Pos("|");
int length = LCDScreen->Hint.Length();
AnsiString LCDScreenHint
= LCDScreen->Hint.SubString(pos, length-pos+1);
LCDScreen->Hint = NewNumber + LCDScreenHint;
if(NumberWidth >= LCDScreen->Width) LCDScreen->ShowHint = true;
else LCDScreen->ShowHint = false;
}
Powyższa funkcja wywoływana jest każdorazowo, gdy zawartość wyświetlacza ma się zmienić w
wyniku np. wprowadzenia nowej cyfry czy zmiany reprezentacji wyświetlania. Po dokonaniu
niezbędnych ustawień, związanych z wyrównaniem wyświetlania, nowa zawartość podstawiana
jest pod właściwość Caption wyświetlacza (będącego etykietą TLabel). Drugi parametr
wywołania ma za zadanie wymusić lewostronne wyrównanie wówczas, gdy na wyświetlaczu ma
pojawić się jedna z predefiniowanych stałych – jeżeli bowiem stała nie mieści się w całości na
wyświetlaczu, ważniejszy jest jej początek niż koniec. Parametr ten jest parametrem domyślnym i można go pominąć w wywołaniu – zakłada się wówczas, iż ma on wartość false, zgodnie z
deklaracją funkcji:
void __fastcall UpdateLCDScreen(
const AnsiString& NewNumber,
bool Constant = false);
Jeżeli funkcja UpdateLCDScreen() stwierdzi, iż kursor myszy znajduje się w obrębie
wyświetlacza, związana z wyświetlaczem podpowiedź (standardowo „|LCD”) uaktualniana jest
teraz tak, iż jej krótka część staje się kopią zawartości wyświetlacza. Aby ograniczyć wyświetlenie podpowiedzi tylko do tych przypadków, gdy zawartość wyświetlacza staje się zbyt duża, by mógł
on pokazać ją w całości, ustawiana jest odpowiednio właściwość ShowHint wyświetlacza:
if(NumberWidth >= LCDScreen->Width) LCDScreen->ShowHint = true;
else LCDScreen->ShowHint = false;
Kontrola migracji skupienia pomiędzy elementami
interfejsu
Jednym z najważniejszych czynników, warunkujących wygodę obsługi aplikacji, jest sposób
przekazywania jej danych wejściowych. W aplikacjach dla Windows – i generalnie innych
aplikacjach sterowanych zdarzeniami i zorientowanych na obsługę graficzną – pierwszorzędne
znaczenie ma sposób obsługi klawiatury. W przeciwieństwie bowiem do myszy (i innych urządzeń
wskazujących) zdarzenia pochodzące od klawiatury nie są zdarzeniami pozycyjnymi, to
znaczy nie są związane z określoną lokalizacją na ekranie; ich obsługą zajmuje się natomiast
wyróżniona kontrolka interfejsu, nazywana kontrolką skupioną ( focused), dlatego też zdarzenia pochodzące od klawiatury zaliczane są do kategorii zdarzeń skupionych.