Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Eveline
Зарегистрирован: 29.04.2006 Сообщения: 5
|
Добавлено: Сб Апр 29 2006 15:29 Заголовок сообщения: События динамических объектов в Delphi |
|
|
Помогите, плиз. Такая проблема: создаю в Delphi динамически имэйджи, и никак не могу пристроить к ним событие. Инфу в нете уже искала. Пытаюсь сделать так, как нашла, а оно не работает. Пишу так:
Images:array[1..40] of TImage;
procedure ImagesMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//процедура
end;
Images[k]:=TImage.Create(Form1);
Images[k].OnMouseMove:=ImagesMouseMove;
Компилятор пишет мне ошибку:
Incompatible types: 'method pointer and regular procedure'.
Пыталась сделать с чуть более простым вариантом:
MyEdit: TEdit;
procedure EditChange(Sender: TObject);
begin
//процедура
end;
MyEdit := TEdit.Create(Form1);
MyEdit.OnChange := EditChange;
Скажите мне, что я делаю неправильно? |
|
Вернуться к началу |
|
|
Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Пт Май 05 2006 07:19 Заголовок сообщения: |
|
|
Подобные обработчики событий могут быть только методами какого-либо класса (например, формы).
Вместо procedure EditChange(Sender: TObject);
надо procedure TForm1.EditChange(Sender: TObject); |
|
Вернуться к началу |
|
|
Eveline
Зарегистрирован: 29.04.2006 Сообщения: 5
|
Добавлено: Сб Май 06 2006 21:15 Заголовок сообщения: |
|
|
Спасибо за совет. Попробовала. Но так как EditChange не принадлежит к Form1, то в строке
Код: | procedure TForm1.EditChange(Sender: TObject); |
компилятор выдает ошибку
Undeclared identifier: 'EditChange'.
Может, есть ещё мысли? |
|
Вернуться к началу |
|
|
Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Вс Май 07 2006 01:36 Заголовок сообщения: |
|
|
Мысли, безусловно, есть.
Ну, во-первых, метод EditChange должен быть не только реализован, но и объявлен где-нить в классе (например, в блоке protected).
Код: |
type TForm1 = class(TForm)
protected
// объявляем:
procedure EditChange(Sender: TObject);
end;
// реализуем:
procedure TForm1.EditChange;
begin
{ Некий код }
end;
|
Во-вторых, если ты присваиваешь обработчик события вне метода формы (в какой-нить самостоятельной функции), то необходимо объявить метод EditChange в public и ссылаться на него как на Form1.EditChange (если, конечно, имя формы - Form1).
Код: |
type TForm1 = class(TForm)
public
procedure CreateEdit;
procedure EditChange(Sender: TObject);
end;
var Form1: TForm1;
// Создаем Edit.
procedure TForm1.CreateEdit;
var Edit: TEdit;
begin
Edit := TEdit.Create(Self);
Edit.OnChange := EditChange; // <= <= <=
Edit.Parent := Self;
end;
// Обработчик события.
procedure TForm1.EditChange;
begin
{ Некий код }
end;
// Присваиваем обработчик события Edit'у
// из внешней функции.
procedure CreateEditEvent(var Edit: TEdit);
begin
Edit.OnChange := Form1.EditChange; // <= <= <=
end;
|
Должно работать. |
|
Вернуться к началу |
|
|
Eveline
Зарегистрирован: 29.04.2006 Сообщения: 5
|
Добавлено: Вт Май 09 2006 16:42 Заголовок сообщения: |
|
|
Спасибо огромное! Получилось! Всё работает как надо! |
|
Вернуться к началу |
|
|
Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Ср Май 10 2006 12:40 Заголовок сообщения: |
|
|
Не за что! Обращайтесь еще.
Удачи! |
|
Вернуться к началу |
|
|
|