Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.02.2010, 22:40   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Как организовать event'ы у своего класса(потока)?

Например onError(Sender: TObject);
TwiX вне форума
Старый 15.02.2010, 00:43   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, прям, такие вопросы...
Давайте будем использовать богатейший опыт тех, кто умудрился создать нам такую изумительную среду программирования - программистов Борланда.
Кто мешает вам открыть... ну, например, файл Delphi7\Source\VclMenus.pas ?
И ввести там заветное словечко "error" ?
И посмотреть, как эти ребята организовали обработку этого самого "эррора"?
Согласитесь, все наши пояснения будут лишь жалким подобием шедевров от Борланда...

З.Ы. Вы знаете, я частенько при затруднениях заглядываю в их исходники (конечно, иногда поискать приходится - не сразу все дается).
Но зато...
Правда, каюсь (сегодня ведь прощенное воскресенье), кое-что иногда хочется "улучшить".
Почему в кавычках ? А у меня работает на "ура", а как у других будет ?

Последний раз редактировалось mihali4; 15.02.2010 в 00:48.
mihali4 вне форума
Старый 15.02.2010, 01:12   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Такого файла не нашёл...
Пробовал найти в idHttp.pas, но безрезультатно...
TwiX вне форума
Старый 15.02.2010, 07:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дело в том что сама среда Борланда умеет различать свойства на события и просто поля.
Поля - это скажем так способ достучаться к переменным, а события это поля, которые имеют процедурный тип. Вот в этом и разница.
Делфи само определяет когда ты пишешь в Published к какой категории относится поле, отож бо
Код:
  published
// Это будет определено как событие потому как имет процедурный тип
   property MyEvent:TNotifyEvent read FMyEvent write SetMyEvent;

// Это просто как обычное свойство
   property MyField:string read FMyField write SetMyField;
Вот тебе пример описания события.
понятно чем отличается?
I'm learning to live...
Stilet вне форума
Старый 15.02.2010, 19:02   #5
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Честно говоря неочень понятно =)
Про свойство понятно, а как работать с событиями?...
Пробовал так...
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    property MyEvent:TNotifyEvent read Button2Click write Button3Click;
  end;
Конечно, сам понимаю, что это чушь) Но это всё, на что меня хватило)
TwiX вне форума
Старый 15.02.2010, 19:17   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    FButton1Click:TNotifyEvent;
  protected 
    procedure SetButton1Click(Value{это моя привычка, зови как хочешь}:TNotifyEvent);
  published
    property Button1Click:TNotifyEvent read FButton1Click write Button3Click;
  end

procedure TForm1.SetButton1Click;//я опускаю параметры, ибо редко делаю множество одноименных методов
begin
 Button1.OnClick:=Value;
end;
это что касается кода твоего.

а для чисто своего компонента, вот код из моего компонента
Код:
type
 TPcRCKeyEvent=procedure(Sender:TObject;Key:byte)of object;

type
 TPcBeholderRC=class(TComponent)
 private
  FOnKeyDown:TPcRCKeyEvent;
  FOnKeyPress:TPcRCKeyEvent;
  FOnKeyUp:TPcRCKeyEvent;
  OldWndProc,NewWndProc:Pointer;
  RCThread:TRCThread;
  FTime:integer;
  function HookAppProc(var Msg:TMessage):Boolean;
  procedure HookFormProc(var Msg:TMessage);
  procedure HookForm;
  procedure UnhookForm;
  procedure SetTime(T:integer);
 protected
   { Protected declarations }
 public
  constructor Create(AOwner:TComponent);override;
  destructor Destroy;override;
 published
  property OnKeyDown:TPcRCKeyEvent read FOnKeyDown write FOnKeyDown;
  property OnKeyPress:TPcRCKeyEvent read FOnKeyPress write FOnKeyPress;
  property OnKeyUp:TPcRCKeyEvent read FOnKeyUp write FOnKeyUp;
  property UpdateTime:integer read FTime write SetTime default 50;
 end;
это обьявление класса...у меня определен не стандартный тип событий, но это не обязательно делать
Код:
function TPcBeholderRC.HookAppProc(var Msg:TMessage):Boolean;
begin
 Result:=false;
 if Msg.Msg<>WM_RC then exit;
 case Msg.WParam of
  RC_KEYDOWN:if assigned(FOnKeyDown) then FOnKeyDown(Self,Msg.LParam);
  RC_KEYUP:if assigned(FOnKeyUp) then FOnKeyUp(Self,Msg.LParam);
  RC_KEYPRESS:if assigned(FOnKeyPress) then FOnKeyPress(Self,Msg.LParam);
 end;
end;
вот выделил вызов событий для чисто своего класса
Цитата:
Давайте будем использовать богатейший опыт тех, кто умудрился создать нам такую изумительную среду программирования - программистов Борланда.
Солидарен, я им и пользовался+немного помогли исходники TCoolTrayIcon
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 15.02.2010, 20:36   #7
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Совсем не понимаю структуры этих событий...
Вот если есть такой кусок:
Код:
property onButton1Click:TNotifyEvent read FButton1Click write Button3Click;
Что он означает? (Что пишется после read/write?)
Что у Form1 есть событие onButton1Click? А что ещё?
TwiX вне форума
Старый 15.02.2010, 20:47   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

откуда читать это событие(адрес на него)
и как писать его.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 15.02.2010, 21:59   #9
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Адрес на функцию, которая будет выполняться?
А как понимать "куда писать"?
TwiX вне форума
Старый 15.02.2010, 22:13   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
property Button1Click:TNotifyEvent read FButton1Click write Button3Click;
короче обьясню смысл сей конструкции.
после read указывается имя поля класса из которого возьмется значение для св-ва(так же там может стоять имя Get метода(если надо то обьясню), после write пишется имя поля которое примет в себя новое значение св-ва(или Set метод(как написал я))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
как правильно организовать продажу своего софта? broderweb Свободное общение 11 02.12.2009 17:41
Создание своего класса, наследование от предка Krechet Общие вопросы Delphi 16 02.05.2009 16:15
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50