Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];

Вниз

Обработка eventов в консольном приложении   Найти похожие ветки 

 
Deus   (2002-02-20 18:48) [0]

Добрый день.

В консольном приложении я создаю объект TDataBase и хочу назначить обработчик события OnLogin, но компилятор ругается:
Incompatible types: method pointer and regular procedure.
Код такой:
program MV;
{$APPTYPE CONSOLE}
uses
SysUtils,
DBTables,
Db, classes,
OracleData,
Oracle;

var
Database1: TDatabase;
procedure Database1Login(Database: TDatabase; LoginParams: TStrings);

procedure Database1Login(Database: TDatabase; LoginParams: TStrings);
begin
LoginParams.Clear;
LoginParams.Add(format("USER NAME=%s",[paramstr(2)]));
LoginParams.Add(format("PASSWORD=%s",[paramstr(3)]));
end;

begin
Database1:=TDatabase.Create(nil);
with DataBase1 do begin
DatabaseName := "WC";
OnLogin := Database1Login;
AliasName:=paramstr(1);
end;


OnLogin объявлен так:
TDatabaseLoginEvent = procedure(Database: TDatabase;
LoginParams: TStrings) of object;

т.е. когда эта процедура принадлежит объекту - то всё ок.
Но делать ненужный объект не хочется.
Как можно это обойти?


 
Юрий Федоров   (2002-02-20 18:51) [1]

Никак. Процедура должна быть методом


 
Deus   (2002-02-20 18:59) [2]

IMHO, должен быть способ, ибо:
ru.delphi.faq:

Q: Как использовать в качестве обработчика сообщения обычную
процедуру, а не метод объекта?

A: У этой процедуры должен быть еще один дополнительный параметр,
например:

procedure MyEventHandler(PseudoSelf : TObject; Sender : TObject);
begin
{ ... }
end;

Но в моём случае это не катит, так как TDatabaseLoginEven - это не просто TEvent.
И вообще, какая разница между методом объекта и просто процедурой? По большому счёту, и то, и другое - кусок кода....


 
Набережных С.   (2002-02-20 18:59) [3]

сделай так:


TP = class
class procedure Database1Login(Database: TDatabase;
LoginParams: TStrings);
end;


 
[NIKEL]   (2002-02-20 18:59) [4]

а зачем именно OnLogin если передаються тока имя и пароль???
создал объект и добавил параметры сразу...


 
Deus   (2002-02-20 19:02) [5]

2Набережных С:
Большое спасибо. Всё ок.


 
Набережных С.   (2002-02-20 19:04) [6]

Или объяви ее в наследнике TDataBase - все равно ведь DataBase1 создаешь в рунтайме.


 
Юрий Зотов   (2002-02-20 19:04) [7]

Заставьте TDataBase обрабатывать его же событие:

type
TMyDataBase = class(TDataBase)
private
procedure OnLoginHandler(Database: TDatabase; LoginParams: TStrings);
public
constructor Create(AOwner: TComponent); override;
end;

...

constructor TMyDataBase.Create(AOwner: TComponent);
begin
inherited;
OnLogin := OnLoginHandler
end;

procedure TMyDataBase.OnLoginHandler(Database: TDatabase; LoginParams: TStrings);
begin
with LoginParams do
begin
Clear;
Add(format("USER NAME=%s",[paramstr(2)]));
Add(format("PASSWORD=%s",[paramstr(3)]))
end
end;


 
Юрий Зотов   (2002-02-20 19:06) [8]

> какая разница между методом объекта и просто процедурой

В метод объекта неявно передается еще один параметр - Self.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
3-19113
vopros
2002-02-11 10:18
2002.03.07
Как сделать post в базе когда запись она находиться в режиме Редактирвания?


7-19362
Игорь-Х
2001-11-16 21:59
2002.03.07
Помогите скомпилировать *.rc файл в *.res ?


3-19053
Владимир 2
2002-02-06 15:40
2002.03.07
Ошибка AccessViolation при попытке посчитать записи методом RecordCount


4-19387
YUS
2001-12-20 20:11
2002.03.07
Как закрыть окно созданое explorer ?


1-19149
xpyctuk
2002-02-18 08:36
2002.03.07
Обои в программе (BackGround)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский