Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

События динамических объектов в Delphi

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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;

Должно работать. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Eveline



Зарегистрирован: 29.04.2006
Сообщения: 5

СообщениеДобавлено: Вт Май 09 2006 16:42    Заголовок сообщения: Ответить с цитатой

Спасибо огромное! Получилось! Всё работает как надо! Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Ср Май 10 2006 12:40    Заголовок сообщения: Ответить с цитатой

Не за что! Обращайтесь еще. Wink
Удачи!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...