Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизКак мне поступить ? (классы) Найти похожие ветки
← →
Chlavik (2003-06-16 17:02) [0]Мне нужно слеить два класса в один .. привожу пример
TFtpUpload = class(TUploadThrd)
private
Events:TUplThEvents;
FOnUploadfinished:TUploadEvent;
FOnUploadStarted:TUploadEvent;
FOnErrorMsg:TErrorMsgEvent;
FOnUploadMsg:TUploadMsgEvent;
FOnReqUpdate:TUploadEvent;
FOnUploadStoped:TUploadEvent;
FOnReconnected:TUploadRecEvent;
FOnConnected:TNotifyEvent;
FOnDisConnected:TNotifyEvent;
property RecepHWND;
destructor Destroy; override;
public
constructor Create(Owner:TComponent); reintroduce;
property OnUploadfinished:TUploadEvent read FOnUploadfinished write FOnUploadfinished;
property OnUploadStoped:TUploadEvent read FOnUploadStoped write FOnUploadStoped;
property OnUploadStarted:TUploadEvent read FOnUploadStarted write FOnUploadStarted;
property OnReqUpdate:TUploadEvent read FOnReqUpdate write FOnReqUpdate;
property OnUploadMsg:TUploadMsgEvent read FOnUploadMsg write FOnUploadMsg;
property OnErrorMsg:TErrorMsgEvent read FOnErrorMsg write FOnErrorMsg;
property OnReconnected:TUploadRecEvent read FOnReconnected write FOnReconnected;
property OnConnected:TNotifyEvent read FOnConnected write FOnConnected;
property OnDisConnected:TNotifyEvent read FOnDisConnected write FOnDisConnected;
end;
////////////////////////////////////////////////////////////////////////////////
{TFtpUpload}
constructor TFtpUpload.Create(Owner:TComponent);
begin
Inherited Create;
Events:=TUplThEvents.Create(Owner);
RecepHWND:=Events.Handle;
Events.OnUploadfinished:=OnUploadfinished;
Events.OnUploadStarted:=OnUploadStarted;
Events.OnErrorMsg:=OnErrorMsg;
Events.OnUploadMsg:=OnUploadMsg;
Events.OnReqUpdate:=OnReqUpdate;
Events.OnUploadStoped:=OnUploadStoped;
Events.OnReconnected:=OnReconnected;
Events.OnConnected:=OnConnected;
Events.OnDisConnected:=OnDisConnected;
end;
//******************************************************************************
destructor TFtpUpload.Destroy;
begin
Inherited Destroy;
Events.Free;
end;
Вот я хочу что бы события класса TUplThEvents были у TFtpUpload я дам окнечно в иструкторе вроде бред написал (потому что не пашет) а вот как правильно поступить и мне обязательно нада что бы этот класс на основе TUploadThrd.. Пасиба..
← →
Skier (2003-06-16 17:07) [1]А в чём проблема-то, ведь TFtpUpload наследуется от TUploadThrd ?
← →
Chlavik (2003-06-16 17:14) [2]Да но мне нада добавить еще события от TUplThEvents
← →
Skier (2003-06-16 17:21) [3]>Chlavik © (16.06.03 17:14)
Тогда такой вариант :
-в конструкторе класса TFtpUpload всем
событиям экземпляра класса TUplThEvents задать обратотчики, которые будут методами класса TFtpUpload, или вызывать методы
экземпляра класса TUplThEvents (если они есть и не "запрятаны") типа DoSomeEvent1, DoSomeEvent2,...,DoSomeEventN
-классу TFtpUpload добавить события-обёртки, которые будут
"отвечать" за вызов событий TUplThEvents
← →
reonid (2003-06-16 17:30) [4]Есть такой вариант:
...
property OnUploadfinished:TUploadEvent read GetOnUploadfinished write SetOnUploadfinished;
procedure SetOnUploadfinished(Value: TUploadEvent);
begin
if FEvents.OnUploadfinished <> Value then
FEvents.OnUploadfinished := Value;
end;
function GetOnUploadfinished: TUploadEvent;
begin
Result := FEvents.OnUploadfinished;
end;
...
и для других событий то же самое.
← →
reonid (2003-06-16 17:31) [5]То есть
procedure TFtpUpload.SetOnUploadfinished(Value: TUploadEvent);
begin
if FEvents.OnUploadfinished <> Value then
FEvents.OnUploadfinished := Value;
end;
function TFtpUpload.GetOnUploadfinished: TUploadEvent;
begin
Result := FEvents.OnUploadfinished;
end;
← →
Chlavik (2003-06-16 17:34) [6]нету у меня там DoOn... мне просто они не нужны. TUplThEvents это оболчка для класса TUploadThrd которая просто генерит собития в зависимости от сообщения отосланого потоком этой оболчке контактируют они черех handle... Так я вот не понял, это
что прийдётся в TFtpUpload тоже писать все процедуры событий а потом в них попрописывать например if Assigned(FOnConnected) then FOnConnected(Self); ? и короче никак нельзя?
вот класс TUplThEvents
TUplThEvents = class(TWinControl)
private
FOnUploadfinished:TUploadEvent;
FOnUploadStarted:TUploadEvent;
FOnErrorMsg:TErrorMsgEvent;
FOnUploadMsg:TUploadMsgEvent;
FOnReqUpdate:TUploadEvent;
FOnUploadStoped:TUploadEvent;
FOnReconnected:TUploadRecEvent;
FOnConnected:TNotifyEvent;
FOnDisConnected:TNotifyEvent;
procedure CmOnErrorMsg(var Message: TMessage); message CM_ErrorMsg;
procedure CmOnStatusMsg(var Message: TMessage); message CM_StatusMsg;
procedure CmOnUplStoped(var Message: TMessage); message CM_UplStoped;
procedure CmOnReqUpdate(var Message: TMessage); message CM_ReqUpdate;
procedure CmOnUplStarted(var Message: TMessage); message CM_UplStarted;
procedure CmOnUplFinished(var Message: TMessage); message CM_UplFinished;
procedure CmOnReconnected(var Message: TMessage); message CM_Reconnected;
procedure CmOnConnected(var Message: TMessage); message CM_Connected;
procedure CmOnDisConnected(var Message: TMessage); message CM_DisConnected;
public
constructor Create(Owner:TComponent); reintroduce;
property OnUploadfinished:TUploadEvent read FOnUploadfinished write FOnUploadfinished;
property OnUploadStoped:TUploadEvent read FOnUploadStoped write FOnUploadStoped;
property OnUploadStarted:TUploadEvent read FOnUploadStarted write FOnUploadStarted;
property OnReqUpdate:TUploadEvent read FOnReqUpdate write FOnReqUpdate;
property OnUploadMsg:TUploadMsgEvent read FOnUploadMsg write FOnUploadMsg;
property OnErrorMsg:TErrorMsgEvent read FOnErrorMsg write FOnErrorMsg;
property OnReconnected:TUploadRecEvent read FOnReconnected write FOnReconnected;
property OnConnected:TNotifyEvent read FOnConnected write FOnConnected;
property OnDisConnected:TNotifyEvent read FOnDisConnected write FOnDisConnected;
end;
← →
Chlavik (2003-06-16 17:36) [7]Пока написал последню месагу то еще два два ответа написали...
← →
Chlavik (2003-06-16 20:20) [8]А может можна обойтись без класа TUplThEvents. Может можно както написать класс на основе TUploadThrd но только надо както тогда его научить ловит месаги... Но я просто не знаю как это сразу реализовать без класса на основе TwinControl...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.028 c