- С чего начать
- Знакомство с IDE
- Общие свойства объектов визуальных сред
- Главная форма
- Прежде чем запустить приложение
- Из чего состоит проект пустого приложения
- Продолжение работы над проектом
- Расстановка «мебели»
- Главное меню среды Visual Basic 6.0
- Главное меню среды BCB 5.0
- Как заставить объекты реагировать на события
Продолжение работы над проектом
Опубликовано admin в Ср, 01/06/2010 - 21:05
Открываем пустое приложение. Так как мы продолжаем работу над проектом, который сохранили в предыдущем сеансе, то его имя и путь к соответствующему каталогу система запомнила. В VB имя такого проекта находится в одной из последних строк меню File, а в BCB и Delphi — в специальном окне, которое раскрывается по команде File®Reopen. Это избавляет нас от лишней работы по выбору пути и набору имени открываемого проекта. Конечно, вызвать тот или иной проект можно, заглянув в соответствующий каталог и щелкнув по файлу проекта.
Цель модификации нашего первого приложения — заставить его выполнять хотя бы какую-нибудь видимую работу. Например — реагировать на щелчки мышью в области клиента формы. А чтобы мы эту реакцию заметили, пусть приложение считает количество щелчков и отображает текущее значение счетчика в заголовке формы.
Щелчок мышью по области клиента во время выполнения приложения породит событие OnClick (в VB — Click), которое операционная система адресует нашей форме. И для того, чтобы форма отреагировала на поступившее сообщение, к нашей программе необходимо подключить обработчик соответствующего события.
Приложение 2_04 (VB).
В среде VB на поле редактора кодов раскрываем правый список, в котором хранится набор всех событий, адресуемых форме, и выбираем строку Click. После появления заготовки, содержащей заголовок и оператор конца подпрограммы, набираем в ее теле 3 следующие оператора (они выделены жирным шрифтом):
Private Sub Form_Click()
Static Count
Count=Count+1
Form1.Caption=Count
End Sub
Переменная Count объявлена статической, так как должна сохранять свое новое значение при повторном входе в подпрограмму. Пусть вас не смущает, что в левой части последнего оператора присваивания находится символьная переменная, а в правой — числовое значение. Необходимые преобразования типов система берет на себя.
Приложение 2_05 (BCB).
В среде BCB обработчик события подключается похожим способом. В окне Object Inspector переходим на страничку Events (События), находим строку OnClick и щелкаем по ее правой части. В ней появится название функции FormClick, а на поле редактора кодов — соответствующая заготовка. В тело функции мы внесем аналогичные 3 строки:
void __fastcall Tform1::FormClick(Tobject *Sender)
{
static int count;
count++;
Form1->Caption=count;
}
Приложение 2_06 (Delphi).
В среде Delphi подключение обработчика события OnClick делается почти так же, как и в BCB. Разница только в оформлении процедуры обработчика события. В связи с отсутствием в Delphi аналога статических переменных, счетчик count приходится объявить как глобальную переменную, вынеся ее описание в раздел var модуля Unit1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
count:integer;
implementation
{$R *.DFM}
procedure TForm1.FormClick(Sender: TObject);
begin
inc(count);
Form1.Caption:=IntToStr(count);
end;
end.
Попробуем разобраться со спецификой в текстах программ обработчиков события.
Во-первых, мы решили использовать заголовок формы для отображения результата работы программы. Это не запрещено, и мы превратили заголовок в табло результатов только потому, что не захотели загромождать форму другими компонентами. В обработчиках для присвоения значения этому свойству задействованы составные имена Form1.Caption и Form1->Caption (в BCB переменная Form1 является указателем на объект, поэтому в составном имени использована стрелка, а не точка). На самом деле, в любом из этих обработчиков вместо составного имени свойства можно было бы сохранить только идентификатор Caption. По умолчанию добавку Form1 система приклеит сама. Но как только в нашем приложении появится несколько объектов, обладающих свойством Caption, то для их точной идентификации имя объекта придется обязательно добавлять.
Во-вторых, в заголовке BCB-обработчика система вставила служебное слово fastcall (дословно — быстрый вызов). Обычно, в программах на Си параметры функций передаются через стек, и на это расходуются лишние такты. При быстром вызове несколько первых аргументов передаются через машинные регистры.
Добавка TForm1 перед именами функции в BCB и процедуры Delphi означает, что эти программы представляют собой методы класса TForm1 и обращаться к ним, если это понадобится, следует особым образом.
В BCB и Delphi обработчику передается указатель на объект, явившийся причиной возникновения события (Sender — отправитель). В большинстве случаев этот аргумент не используется. Однако в приложении могут оказаться два объекта, порожденные одним и тем же классом. И тогда придется разбираться, кто из них выступил в роли Sender’a.
Перед тем как запустить модифицированное приложение, не забудьте сохранить все файлы в уже существующем каталоге. Такая предосторожность не повредит, т.к. приложение может так завесить компьютер, что для его реанимации придется произвести перезагрузку. Если бы мы не запомнили файлы перед стартом приложения, то вся работа по его модификации пошла бы насмарку и все пришлось бы повторять заново. Старайтесь чаще запоминать текущее состояние своих файлов.
