Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BAPDriveBox Version: 1.01 - bugs


tamerlan311 ©   (2003-05-11 15:36:00) 

при уничтожении компонента BAPDriveBox Version: 1.01
(процес остается жить) если начать работать с диском (вставить или вытащить диск) - через 5 сек программа горорит КРЯ-ЯЯЯЯ!


BaRToV   (2003-05-12 16:43:00) [1]

2 ALL

Все что выше описано делается НЕ так.
См. http://www.delphimaster.ru/cgi-bin/forum.pl?look=1&id=1052726119&n=10
Качайте v1.02и смотрите ( сайт ночью обновлять буду):
http://delphikol.narod.ru/comps/BAPDriveBox.zip


BaRToV   (2003-05-11 21:18:00) [2]

Ок.

Для тех кто не хочет ждать обновления, исправте в KOLBAPDriveBox.pas:

destructor TDriveData.Destroy;
begin
Timer1.Enabled := False;
Free_And_Nil(Timer1);
Free_And_Nil(IL);
Free_And_Nil(VolList);
FBAPDriveBoxs.Remove(FControl);
if FBAPDriveBoxs.Count = 0 then
Free_And_Nil(FBAPDriveBoxs);

inherited;
end;

...

(* ОБРАБОТЧИК WM_DEVICECHANGE *)

function WndProcDriveChange(Ctl: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
var
...
begin
Result := False;
if FBAPDriveBoxs = nil then
Exit;

if Msg.message = WM_DEVICECHANGE then
( Sender: PObj) [4]

Ок.

Для тех кто не хочет ждать обновления, исправте в KOLBAPDriveBox.pas:

destructor TDriveData.Destroy;
begin
Timer1.Enabled := False;
Free_And_Nil(Timer1);
Free_And_Nil(IL);
Free_And_Nil(VolList);
FBAPDriveBoxs.Remove(FControl);
if FBAPDriveBoxs.Count = 0 then
Free_And_Nil(FBAPDriveBoxs);

inherited;
end;

...

(* ОБРАБОТЧИК WM_DEVICECHANGE *)

function WndProcDriveChange(Ctl: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
var
...
begin
Result := False;
if FBAPDriveBoxs = nil then
Exit;

if Msg.message = WM_DEVICECHANGE then
...
end;



2 tamerlan311

procedure TForm1.Button1Click(Sender: PObj);
begin
if BAPDriveBox1 <> nil then
BAPDriveBox1.Free;
end;


BaRToV   (2003-05-11 19:36:00) [3]

Все, нашел.

if Applet <> nil then // WM_DEVICECHANGE
( WndProcDriveChange) [3]

Все, нашел.

if Applet <> nil then // WM_DEVICECHANGE
Applet.AttachProc(WndProcDriveChange);

WndProcDriveChange вызывается, когда даже BAPDriveBox1.Free;


BaRToV   (2003-05-11 17:40:00) [4]

Хм... Получается интересная штука...

destructor TDriveData.Destroy;
begin
MessageBox(0, "Destroy", "BAPDriveBox", MB_OK);

Timer1.Enabled := False;
Free_And_Nil(Timer1);
Free_And_Nil(IL);
Free_And_Nil(VolList);
if FBAPDriveBoxs <> nil then
( FBAPDriveBoxs) [2]

Хм... Получается интересная штука...

destructor TDriveData.Destroy;
begin
MessageBox(0, "Destroy", "BAPDriveBox", MB_OK);

Timer1.Enabled := False;
Free_And_Nil(Timer1);
Free_And_Nil(IL);
Free_And_Nil(VolList);
if FBAPDriveBoxs <> nil then
Free_And_Nil(FBAPDriveBoxs);
inherited;
end;

http://delphikol.narod.ru/docs/WritingComp.htm
Ничего не сказано про деструктор...

В Run-Time Destroy вызывается, а в Design-Time - НЕТ...
Смотрим что к чему...


BaRToV   (2003-05-11 17:20:00) [5]

2 tamerlan311

Вообще-то голосовые функции в компонентые отсутствуют и поэтому "КРЯКАТЬ", как утка он не может ;-)

Опиши подробнее что к чему...
И еще, на мыло пишите о багах, у меня не всегда почему-то форум грузится...

Начнем по порядку:

1. В МСК используется визуализация, где создается реальный Run-Time компонент:

procedure TKOLBAPDriveBox.CreateKOLControl(Recreating: boolean);
begin
FKOLCtrl := PControl(NewBAPDriveBox(KOLParentCtrl, TRUE,
clHighlightText, clHighlight));
end;

2. Вот деструктор в KOLBAPDriveBox.pas, который вызывается при уничтожение компонента и в MCK:

destructor TDriveData.Destroy;
begin
Timer1.Enabled := False;
Free_And_Nil(Timer1);
Free_And_Nil(IL);
Free_And_Nil(VolList);
if FBAPDriveBoxs <> nil then
( FBAPDriveBoxs) [1]

2 tamerlan311

Вообще-то голосовые функции в компонентые отсутствуют и поэтому "КРЯКАТЬ", как утка он не может ;-)

Опиши подробнее что к чему...
И еще, на мыло пишите о багах, у меня не всегда почему-то форум грузится...

Начнем по порядку:

1. В МСК используется визуализация, где создается реальный Run-Time компонент:

procedure TKOLBAPDriveBox.CreateKOLControl(Recreating: boolean);
begin
FKOLCtrl := PControl(NewBAPDriveBox(KOLParentCtrl, TRUE,
clHighlightText, clHighlight));
end;

2. Вот деструктор в KOLBAPDriveBox.pas, который вызывается при уничтожение компонента и в MCK:

destructor TDriveData.Destroy;
begin
Timer1.Enabled := False;
Free_And_Nil(Timer1);
Free_And_Nil(IL);
Free_And_Nil(VolList);
if FBAPDriveBoxs <> nil then
Free_And_Nil(FBAPDriveBoxs);
inherited;
end;


KOL/MCK 1.73, Delphi 5 и 7, Windows XP - ПРОБЛЕМ НЕТ!!!

Если у кого-то возникает такая же ошибка - напишите здесь!!!


Наверх

Титульная страница Поиск, карта сайта Написать письмо