Свойство Sender: TObject («Отправитель») присутствует у всех компонентов, хотя редко используется. Но бывает полезно, например, узнать от какого типа источника происходит событие:
if (Sender is TButton) then ShowMassage («Click from Button»);
Или для разного действия при получении события OnClick от разных источников:
if Sender = Button1 then …… else ………..
Или для получения одного результата для разных компонентов: в Events на событие OnClick (или OnChange и т.п.) из выпадающего списка для нескольких компонентов выбрать нужный: например, Button1Click, с выполняемым везде кодом.
Или: Button2.OnClick (Sender); для Button1 – выполнит Button2.
Например, для приложения «Школьный Калькулятор» за счет свойства Sender можно значительно сократить код. Для функции power (степенная функция) в Uses ввести модуль Math.
Введем глобальную переменную S1:String; к которой можно будет иметь доступ из разных участков программы. Сбросим на Форму кнопки-числа и поставим их Text от 0 до 9, а также кнопку-сброс «C» (от Clear) и вспомогательное Edit2.
Для Button1Click:
with (Sender as TButton) do
begin
if Edit1.Text = «0» then Edit1.Text:= Text
else Edit1.Text:= Edit1.Text + Text; // Ввод числа
end;
Для остальных кнопок 2…9 и 0 введем ссылку: в Events на OnClick: Button1Click; // Ввод числа с любой кнопки
Теперь нажатие на любую кнопку-число отправит ее Text (0…9) в Edit1.Text.
Введем кнопки-действия: +, -, *, /, sqr, sqrt и power, sin, cos, Tan, Ln, Log. Для каждой определим сходный код:
S1:=Edit1.Text; // Первое число в глобальную переменную
Edit3.Text:= Button16.Text; // Выводим знак операции
Edit1.Text:= ' '; // Очищаем Edit1 от 1го числа для второго
Button21.OnClick (Sender); // Ссылка на действия с числами
Свойство Sender позволяет перейти на Button2, где имеет место код для всех действий:
//Если операция над 1-м числом – квадратный корень и др.
if Edit3.Text = ’sqrt’ then // Если первым вычисляем корень
begin
Edit2.Text:= «1»;
Edit1.Text:= FloatToStr (sqrt (StrToFloat (s1)));
s1:= Edit1.Text;
EXIT;
end;
//Если 1-е число из 2-х чисел
if Edit2.Text = «1» then
begin
Edit1.Text:= ' '; // Очищаем Edit1 от 1го числа для второго
Edit2.Text:= «2»; // Отмечаем следующее нажатие как 2-е
EXIT;
end
else // Если 2-е число введено
begin
if Edit3.Text = '+' then Edit1.Text:= FloatToStr (StrToFloat (s1) + StrToFloat (Edit1.Text));
************************
Введем также операции с памятью: M+, M-, MR, MC и возможность вводить тригонометрические функции: град или Пи.
В итоге мы имеем простейший калькулятор, который, однако, с высокой точностью производит необходимые операции.
Рис. 14. Программа для смартфона «Школьный калькулятор»
Рис. 15. Инспектор свойств компонентов.
5. Типы программ в DelpHi Android
В Delphi Android существует множество компонентов и еще больше свойств и методов, но далеко не все они