-
пытаюсь уничтожить форму, а она мой дух не отпускает :( часть кода убрал procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var Mouse: TMouseEventData;
begin
LoadIni;
DFind( TV.TVInsert( TV.TVRoot, 0, ExcludeTrailingPathDelimiter(PathStalk)), PathStalk);
end;
procedure TForm1.LoadIni;
var
ini: PIniFile;
OD: POpenDirDialog;
x: integer;
begin
if FileExists(GetStartDir + 'settings.ini') Then
и т.п.
if not DirectoryExists( PathStalk + '\gamedata\sounds\')then
begin
OD := NewOpenDirDialog('', [odEditBox, odNewDialogStyle]);
OD.InitialPath := 'C:\';
Repeat
if OD.Execute Then
PathStalk := OD.Path
Else
begin
Form.Close; end;
Until DirectoryExists( PathStalk + '\gamedata\sounds\');
OD.Free;
end;
end;
function TForm1.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
var
Filename: array [0..259] of char;
Count, i, n: Cardinal;
fname, STpath: string;
Mouse: TMouseEventData;
begin
if msg.message = 563 Then
begin
Result := False;
Count := DragQueryFile( msg.WParam, $FFFFFFFF, Filename, SizeOf(Filename));
for i := 0 to Count - 1 do
begin
DragQueryFile( msg.WParam, i, Filename, SizeOf(Filename));
fname := ExtractFileName(string(Filename));
if LV.LVIndexOf(fname) >= 0 Then begin
STpath := IncludeTrailingPathDelimiter(TV.TVItemPath(TV.TVSelected, '\'));
n := 0;
While LV.LVIndexOf(fname + '.bak' + int2str(n) ) >= 0 Do
n := n + 1;
CopyMoveFiles( STpath + fname, STpath + fname + '.bak' + int2str(n), True);
CopyMoveFiles( string(Filename), STpath + fname, False);
end;
end;
DragFinish(Msg.WParam);
Result := True;
end;
end;
-
Перед Form.Close добавь OD.Free; В обработчике сообщений для необрабатываемых сообщений Result := False;
-
Result := False стоИт, перед Form.Close добавлял OD.Free - глючит, лучше как есть. У меня такое ощущение, что после вызова Form.Close создание формы продолжается дальше. Кстати Form.Destroy вообще непонятно когда вызывается, даже от фазы Луны не зависит.
-
В упор не вижу что Result := False в KOLForm1Message, для сообщений отличных от 563
-
if msg.message = 563 Then
begin
Result := False; -> Result := False;
if msg.message = 563 Then
begin
-
там исправил. запускаю прогу, жму отмену. Окно исчезает, процесс висит в памяти
-
if not DirectoryExists( PathStalk + '\gamedata\sounds\')then
begin
OD := NewOpenDirDialog('', [odEditBox, odNewDialogStyle]);
OD.InitialPath := 'C:\';
Repeat
if OD.Execute Then
PathStalk := OD.Path
Else
begin
Form.Close; end;
Until DirectoryExists( PathStalk + '\gamedata\sounds\');
OD.Free;
end;
end; Странно, я мож че не понимаю, а при чем тут KOL. Элементарно неправильный код... Варианты: 1. Form.Close; -> OD.Free;
Form.Close;
exit; 2. Form.Close; -> OD.Free;
SendMessage(Form.Handle, WM_CLOSE, 0, 0);
exit; 3. Form.Close; -> OD.Free;
halt;
-
Maybe someone is willing to help me convert MemCheck to KOL ? I have a compilable version but it seems to not working as should. Vladimir ?
-
FastMM4 - наш выбор ))
-
exero, как будто FastMM4 сам всё правильно сделает и заменит программиста :/ :)
-
> FastMM4 сам всё правильно сделает и заменит > программиста :/ :)
неужели я где-то подобное мог написать? Просто если не использовать FastMM4 и FastMove то Delphi (до определенных версий) - унылое говно в плане производительности. И что такое может MemCheck (насколько я помню - тупо показывает утечки) чего не может FastMM4? А для новых разработок .Net или Java (первый для той ниши которую занимал delphi, предпочтительнее), только обязательно хотя бы рихтера прочтите - и кроме необходимости таскать framework и простого дизассемблирования минусов вроде не замечено.
|