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

Вниз

Проблемы с AllocateHWnd   Найти похожие ветки 

 
Chlavik   (2003-10-06 19:07) [0]

Привет... У меня вот такая вот ситуция... Есть такой класс TFTPUpload наследник от моего другого класса (TUploadThrd)- наслденика TThread Так вот код TFTPUpload
TFtpUpload = class(TUploadThrd)
private
FOnUploadfinished:TUploadEvent;
FOnUploadStarted:TUploadEvent;
FOnErrorMsg:TErrorMsgEvent;
FOnUploadMsg:TUploadMsgEvent;
FOnReqUpdate:TUploadEvent;
FOnUploadStoped:TUploadEvent;
FOnReconnected:TUploadRecEvent;
FOnConnected:TUploadEvent;
FOnDisConnected:TUploadEvent;
Procedure FOnEvent(var Message: TMessage);
destructor Destroy; override;
public
constructor Create;
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:TUploadEvent read FOnConnected write FOnConnected;
property OnDisConnected:TUploadEvent read FOnDisConnected write FOnDisConnected;

constructor TFtpUpload.Create;
begin
Inherited Create;
Self.RecepHWND:=AllocateHWnd(FOnEvent);
end;

//******************************************************************************

destructor TFtpUpload.Destroy;
begin
DeallocateHWnd(Self.RecepHWND);
Inherited Destroy;
end;

//******************************************************************************

procedure TFtpUpload.FOnEvent(var Message: TMessage);
begin
case Message.Msg of
CM_ErrorMsg:
if Assigned(FOnErrorMsg) then FOnErrorMsg(nil,String(Message.WParam),
TUplErrorMsgType((Pointer(Message.LParam))^));
CM_StatusMsg:
if Assigned(FOnUploadMsg) then FOnUploadMsg(nil,String(PChar(Message.WParam)),
TUploadMsgType((Pointer(Message.LParam))^));
CM_UplStoped:
if Assigned(FOnUploadStoped) then FOnUploadStoped(TUploadThrd(Message.wParam));
CM_ReqUpdate:
if Assigned(FOnReqUpdate) then FOnReqUpdate(TUploadThrd(Message.wParam));
CM_UplStarted:
if Assigned(FOnUploadStarted) then FOnUploadStarted(TUploadThrd(Message.wParam));
CM_UplFinished:
if Assigned(FOnUploadFinished) then FOnUploadFinished(TUploadThrd(Message.wParam));
CM_Reconnected:
if Assigned(FOnReconnected) then FOnReconnected(TUploadThrd(Message.wParam),Message.LParam);
CM_Connected:
if Assigned(FOnConnected) then FOnConnected(TUploadThrd(Message.wParam));
CM_DisConnected:
if Assigned(FOnDisConnected) then FOnDisConnected(TUploadThrd(Message.wParam));
end;
Message.Result := 0;
end;


TUploadThrd шлют месаги на RecepHWND и FOnEvent генерит нужное событие.. Всё пашет.. :) Но поле того как класс иничтожился точнее когда выполнился DeallocateHWnd то что то происходит с главным окном проги (постоянно вылетают Acces Violation) Помойму Освобождается его Handle. Но какое отношение имеет одно к другому .. Исключения появляются при сврачивании или просто клике на пиктограму проги... Что может быть? Просто раньше всё пахало но просто TUploadThrd слал месаги на наследник TwinControl...


 
Chlavik   (2003-10-06 19:10) [1]

Вот только что выдало при закрытии окна Exception "Недопутимый дескриптор окна" Хоть это и тупо но Как мой класс мог повлиять на хэндл окна проги...


 
Chlavik   (2003-10-06 21:15) [2]

А самое интересное что если все эти ивенты отключить от от процедур главного окна

//Upload.OnUploadStarted:=OnUploadStarted;
// Upload.OnUploadFinished:=OnUploadFinished;
//Upload.OnUploadMsg:=OnUploadMsg;
// Upload.OnErrorMsg:=OnErrorMsg;
// Upload.OnReqUpdate:=OnReqUpdate;
// Upload.OnUploadStoped:=OnUploadInterrupted;
// Upload.OnReconnected:=OnUploadReconnected;
// Upload.OnConnected:=OnUploadConnected;
// Upload.OnDisConnected:=OnUploadDisConnected;//}

то всё пашет нормально ...
и если хоть одну чтрочку этого кода раскомментировать то тот же глюк


 
Chlavik   (2003-10-06 21:26) [3]

А может нельзя так делать? Может мне Evnts всё таки Events сделать Как отдельный класс? только не предлагайте Synchronize ...
Приятно со всеми пообщатся :)


 
Юрий Федоров   (2003-10-06 21:57) [4]

>>TUploadThrd шлют месаги
Все таки как шлет ? Post или Send ?


 
Serginio1   (2003-10-06 22:31) [5]

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


 
Chlavik   (2003-10-06 23:25) [6]


> Post или Send ?

SendMessageTimeOut


 
Chlavik   (2003-10-07 00:28) [7]

И не обработанных месаг нету...
Я решил эту проблему так

{ TUpldEvents }

constructor TUpldEvents.Create;
begin
inherited Create;
FHandle:=AllocateHWnd(FOnEvent);
end;

destructor TUpldEvents.Destroy;
begin
DeallocateHWnd(FHandle);
inherited;
end;

procedure TUpldEvents.FOnEvent(var Message: TMessage);
begin
case Message.Msg of
CM_ErrorMsg:
if Assigned(FOnErrorMsg) then FOnErrorMsg(TUploadThrd(Message.WParam),String(Message.WParam),
TUplErrorMsgType(Message.LParam));
CM_StatusMsg:
if Assigned(FOnUploadMsg) then FOnUploadMsg(TUploadThrd(Message.WParam),String(PChar(Message.WParam)),
TUploadMsgType(Message.LParam));
CM_UplStoped:
if Assigned(FOnUploadStoped) then FOnUploadStoped(TUploadThrd(Message.WParam));
CM_ReqUpdate:
if Assigned(FOnReqUpdate) then FOnReqUpdate(TUploadThrd(Message.WParam));
CM_UplStarted:
if Assigned(FOnUploadStarted) then FOnUploadStarted(TUploadThrd(Message.WParam));
CM_UplFinished:
if Assigned(FOnUploadFinished) then FOnUploadFinished(TUploadThrd(Message.WParam));
CM_Reconnected:
if Assigned(FOnReconnected) then FOnReconnected(TUploadThrd(Message.WParam),Message.LParam);
CM_Connected:
if Assigned(FOnConnected) then FOnConnected(TUploadThrd(Message.WParam));
CM_DisConnected:
if Assigned(FOnDisConnected) then FOnDisConnected(TUploadThrd(Message.WParam))
else DefWindowProc(FHandle,Message.Msg,Message.WParam,Message.LParam);
end;
Message.Result := 0;
end;

Так пашет просто после создания TUploadThrd я создаю TUpldEvents и его хэндл передаю в первый класс и уничтожаю в OnTerminate ... Но всё таки тот код более компактен и не понятно почему он не пашет



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

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

Наверх





Память: 0.47 MB
Время: 0.013 c
1-51300
malefik
2003-10-06 10:09
2003.10.16
Строки замучили.... как преобразовать?????


14-51436
Е-Моё имя
2003-09-30 11:07
2003.10.16
Жилье в Питере


1-51331
Chlavik
2003-09-30 17:06
2003.10.16
TextFile и Tstrings.LoadFromFile


14-51494
Knight
2003-09-28 10:10
2003.10.16
Опять на рыбалку...


1-51308
Samael6
2003-10-06 12:27
2003.10.16
Пакеры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский