Форум: "KOL";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
ВнизBAPDriveBox Version: 1.01 - bugs Найти похожие ветки
← →
tamerlan311 (2003-05-11 15:36) [0]при уничтожении компонента BAPDriveBox Version: 1.01
(процес остается жить) если начать работать с диском (вставить или вытащить диск) - через 5 сек программа горорит КРЯ-ЯЯЯЯ!
← →
BaRToV (2003-05-11 17:20) [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
( 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 - ПРОБЛЕМ НЕТ!!!
Если у кого-то возникает такая же ошибка - напишите здесь!!!
← →
BaRToV (2003-05-11 17:40) [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
( 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 19:36) [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 21:18) [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
( 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-12 16:43) [5]2 ALL
Все что выше описано делается НЕ так.
См. http://delphimaster.net/view/11-1052726119/
Качайте v1.02 и смотрите ( сайт ночью обновлять буду):
http://delphikol.narod.ru/comps/BAPDriveBox.zip
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c