Форум: "KOL";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизОшибка при попытке создать файл с помощью PStrList. Найти похожие ветки
← →
Some (2006-05-07 17:07) [0]В некоторых каталогах скомпилированная программа не может создать файл с помощью SaveToFile,
выдаётся ошибка:
RunTime Error 216 at xxxxxx
Вот пример имени такого каталога:
D:\NTSOFT\CodeBlocks\
Если же файл уже создан, то всё ОК.
Пррбовал создавать новый проект - ошибка повторяется.
Delphi 3, KOL 2.35 Win2k
В чём здесь дело?
var sec,min,hours:byte; l:PStrList;
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var wndm:hwnd;
begin
if not JustOne(Form1.Form,"INDICATOR IS RUNNING") then
begin
IF ShowMsg("The Program Is Already Running."+#13#10+"Terminate?",MB_YESNO)=6 THEN
begin
wndm := FindWindow("obj_Form", PChar("Time Online"));
if wndm <> 0 then SendMessage(wndm,WM_CLOSE,0,0);
end;
Form1.form.close;
end;
IF FileExists(GetStartDir+"indicator.ini") THEN
BEGIN
l:=NewStrList;
l.LoadFromFile(GetStartDir+"indicator.ini");
Form1.form.TOP:=Str2Int(l.Items[0]);
Form1.form.Left:=Str2Int(l.Items[1]);
l.Free;
END else
begin
Form1.form.TOP:=0-5;
Form1.form.Left:=(ScreenWidth div 2)-(Form1.form.Width div 2);
end;
// - - -
end;
procedure TForm1.KOLForm1Close(Sender: PObj; var Accept: Boolean);
begin
l:=NewStrList;
l.Add(Int2Str(Form1.form.top));
l.Add(Int2Str(Form1.form.Left));
l.SaveToFile(GetStartDir+"indicator.ini"); // <- ошибка где-то здесь
l.Free;
end;
← →
homm © (2006-05-07 17:17) [1]А если
> l:=NewStrList;
> l.Add(Int2Str(Form1.form.top));
> l.Add(Int2Str(Form1.form.Left));
> l.SaveToFile(GetStartDir+"indicator.ini"); //
> <- ошибка где-то здесь
> l.Free;
поместить в оьработчик кнопки, ошибка тоже появляется?
Просто мысли, что гдето-может юзатся Applet, который Terminated.
← →
Some (2006-05-07 17:33) [2]>поместить в обработчик кнопки, ошибка тоже появляется?
Теперь ошибка уже везде появляется, а Applet я не использую.
← →
Vladimir Kladov (2006-05-07 20:33) [3]Проверьте, чему равно Form1 в OnClose. Вообще, в методе самой же формы к глобальной незачем обращаться, достаточно Form.Top :=.
← →
Some (2006-05-07 21:25) [4]>Проверьте, чему равно Form1 в OnClose. Вообще, в методе самой же
>формы к глобальной незачем обращаться, достаточно Form.Top :=.
Убрал Form1, но всё равно ошибка вылетает, вот полный исходник:
http://mostly.nm.ru/INDICATOR.zip
9кб
{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit main;
interface
{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes, Controls, mckControls, mckObjs, Graphics,
mckCtrls {$ENDIF (place your units here->)},winsock;
{$ELSE}
{$I uses.inc}
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
mirror;
{$ENDIF}
type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
{$IFDEF KOLCLASSES} TForm1 = class; PForm1 = TForm1; {$ELSE OBJECTS} PForm1 = ^TForm1; {$ENDIF CLASSES/OBJECTS}
{$IFDEF KOLCLASSES}{$I TForm1.inc}{$ELSE} TForm1 = object(TObj) {$ENDIF}
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
Timer1: TKOLTimer;
Label1: TKOLLabel;
procedure KOLForm1FormCreate(Sender: PObj);
procedure Timer1Timer(Sender: PObj);
procedure KOLForm1Resize(Sender: PObj);
procedure KOLForm1Close(Sender: PObj; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;
{$IFDEF KOL_MCK}
procedure NewForm1( var Result: PForm1; AParent: PControl );
{$ENDIF}
implementation
{$IFNDEF KOL_MCK} {$R *.DFM} {$ENDIF}
{$IFDEF KOL_MCK}
{$I main_1.inc}
{$ENDIF}
var sec,min,hours:byte; dontsave:boolean;
function my_ip_address: longint;
const
bufsize = 255;
WSVer = $101;
var
buf: pointer;
RemoteHost: PHostEnt;
wsaData: TWSAData;
begin
if WSAStartup(WSVer, wsaData) <> 0 then
begin
my_ip_address := 0;
exit;
end;
buf := nil;
try
getmem(buf, bufsize);
winsock.gethostname(buf, bufsize);
RemoteHost := Winsock.GetHostByName(buf);
if RemoteHost = nil then
my_ip_address := winsock.htonl($07000001) // 127.0.0.1
else
my_ip_address := longint(pointer(RemoteHost^.h_addr_list^)^);
finally
if buf <> nil then
freemem(buf, bufsize);
end;
result := winsock.ntohl(result);
end;
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var wndm:hwnd; l:PStrList;
begin
//SET Form1.form.BorderStyle:=fbsToolWindow;
dontsave:=false;
if not JustOne(Form,"INDICATOR IS RUNNING") then
begin
IF ShowMsg("The Program Is Already Running."+#13#10+"Terminate?",MB_YESNO)=6 THEN
begin
wndm := FindWindow("obj_Form", PChar("Time Online"));
if wndm <> 0 then SendMessage(wndm,WM_CLOSE,0,0);
end;
dontsave:=true;
form.close;
end;
IF FileExists(GetStartDir+"indicator.ini") THEN
BEGIN
l:=NewStrList;
l.clear;
l.LoadFromFile(GetStartDir+"indicator.ini");
form.TOP:=Str2Int(l.Items[0]);
form.Left:=Str2Int(l.Items[1]);
l.Free;
END else
begin
form.TOP:=0-5;
form.Left:=(ScreenWidth div 2)-(form.Width div 2);
end;
form.Caption:="Time Online";
form.StayOnTop:=true;
form.Height:=42;
form.Width:=99;
Label1.TextAlign:=taCenter;
Label1.Top:=0;
Label1.Left:=0;
Label1.Width:=90;
Label1.Height:=22;
Label1.Color:=clBlack;
Label1.Font.FontName:="Arial";
Label1.Font.FontQuality:=fqProof;
Label1.Font.FontStyle:=[];
Label1.Font.FontHeight:=20;
Label1.Font.Color:=clLime;
Label1.Caption:="00:00:00";
sec:=0;min:=0; hours:=0;
Timer1.Interval:=1000;
end;
procedure TForm1.Timer1Timer(Sender: PObj);
var s,sm,sh:string[1];
begin // exit;
if my_ip_address=2130706433 then //127.0.0.1
begin
form.Visible:=false;
sec:=0;min:=0; hours:=0;
exit;
end else form.Visible:=true;
s:="";sm:="";sh:="";
sec:=sec+1;
if sec>=60 then
begin
sec:=0;
min:=min+1;
end;
if min>=60 then
begin
min:=0;
hours:=hours+1;
end;
if sec<10 then s:="0";
if min<10 then sm:="0";
if hours<10 then sh:="0";
Label1.Caption:=sh+Int2Str(hours)+":"+sm+Int2Str(min)+":"+s+Int2Str(sec);
end;
procedure TForm1.KOLForm1Resize(Sender: PObj);
begin
form.Height:=42;
form.Width:=99;
end;
procedure Save2File;
var l:PStrList;
begin
l:=NewStrList;
l.Clear;
l.Add(Int2Str(Form1.form.top));
l.Add(Int2Str(Form1.form.Left));
l.SaveToFile(GetStartDir+"indicator.ini");
l.Free;
end;
procedure TForm1.KOLForm1Close(Sender: PObj; var Accept: Boolean);
begin
if not dontsave then Save2File;
end;
end.
← →
homm © (2006-05-07 22:25) [5]
> Delphi 3, KOL 2.35 Win2k
Delphi 5, KOL 2.33, XP
Все работает.
← →
MTsv DN © (2006-05-08 07:30) [6]Delphi 7, KOL 2.35, XP
Тоже все работает.
С Уважением MTsv DN
← →
homm © (2006-05-08 09:39) [7]Проверь права на запись в "некоторых" папках.
← →
Some (2006-05-08 14:47) [8]>Проверь права на запись в "некоторых" папках.
У меня полный доступ - все права.
Сейчас поставил KOL версии ниже 2 (version 1.08) -скомпилировал - всё работает нормально.
(Только нам нет свойства BorderStyle:=fbsToolWindow в инспекторе объектов).
← →
homm © (2006-05-08 15:02) [9]
> Сейчас поставил KOL версии ниже 2 (version 1.08) -скомпилировал
> - всё работает нормально.
А теперь поставь обратно 2.35, скомпилируй и все скорее всего будет работать. (только предположение) В крайнем случае посмотри, чем реализация StrList отличается.
← →
Vladimir Kladov (2006-05-08 15:21) [10]А точнее права на создание новых файлов. (И зачем вообще нужен NTFS? По мне FAT32 и быстрее и надежнее и универсальнее).
← →
homm © (2006-05-08 15:29) [11]
> И зачем вообще нужен NTFS? По мне FAT32 и быстрее и надежнее
> и универсальнее
Не скажите. Винда со сжатого NTFS тома раза в 1,5 быстрее стартует. А про надежность я думаю Вы и так знаете.
← →
Some (2006-05-08 16:25) [12]>А теперь поставь обратно 2.35, скомпилируй и все скорее всего будет работать
Нет, ошибка опять появляется.
>А точнее права на создание новых файлов.
У меня FAT 32, я под администратором всегда работаю.
← →
MTsv DN © (2006-05-08 17:42) [13]Привет...
И на NTFS, и на FAT32 все нормально...
Меня очень кофигурация Ваша Some удивила (Delphi 3, KOL 2.35 Win2k), извините...
А вот почему Вы fbsToolWindow постоянно упоминаете, без него ошибка то есть??? Если нет ошибки, так сделайте ToolWindow, вот так:Form1.form.Style:= Form1.form.Style and WS_EX_TOOLWINDOW;
С уважением MTsv DN
← →
Some (2006-05-08 19:58) [14]>Меня очень кофигурация Ваша Some удивила (Delphi 3, KOL 2.35 Win2k)
Меня эта конфигурация вполне устраивает, даже тоталкоммандер был на D2 написан.
>А вот почему Вы fbsToolWindow постоянно упоминаете, без него ошибка то есть???
Оно не влияет на ошибку, просто в версии KOL 1.08 я это свойство не нашёл.
Ещё: Добавил пустое событие OnMouseUp (KOL 2.35) - ошибка сразу же при запуске в делфи - если выполнять по шагам, то со строки
l.LoadFromFile(GetStartDir+"indicator.ini");
сразу же прыгает на
Timer1.Interval:=1000;
и далее на файл kol.pas в функцию
function WndFunc( W: HWnd; Msg: Cardinal; wParam, lParam: Integer )
: Integer; stdcall;
и далее появляется окно Runtimeerror 216.
← →
GMax (2006-05-08 21:29) [15]возможно есть какая-то разница при работе с памятью в D3 и позже...
где именно ошибка ? по какому адресу-то? потрассировать внутрь процедуры пробовал ?
у меня на w2k d7 без проблем (правда ShowMsg("The Program Is Already Running... выглядит совсем не красиво, появляется недоделанное второе окно. надо бы его или доделать или не показывать вообще. да и с ресайзами бороться стилем, или на крайняк Min/Max|Width/Height, чтобы не мигало)
← →
Some (2006-05-09 00:52) [16]>где именно ошибка ? по какому адресу-то? потрассировать внутрь процедуры пробовал ?
Пробовал, но дальше делфи останавливается не ясно где, и если нажать F9 то появляется окно с ошибкой.
>надо бы его или доделать или не показывать вообще. да и с ресайзами бороться стилем
Это я исправил:
http://mostly.nm.ru/INDICATOR_KOL_1.08.zip
← →
homm © (2006-05-09 09:30) [17]
> Меня эта конфигурация вполне устраивает, даже тоталкоммандер
> был на D2 написан.
Дак потому и был написан на D2, что KOL тогда небыло. Проекты, откомпилированые в разных версиях дельфей отличаются в худшем случае на пару килобайт. Все-же D3 уж больно неудобный. Если ты переживаеш по поводу производительности, то могу сказать, что на D5 я писал на Pmmx-225 с 64 метрами, да и сейчас у меня дома Cel563 со 128-ю.
2 Vladimir Kladov
Для TStrList переопределен Init, соответственно не выполняется следующий код:procedure _TObj.Init;
begin
{$IFDEF _D2orD3}
FillChar( Pointer( Integer(@Self) + 4 )^, Sizeof( Self ) - 4, 0 );
{$ENDIF}
end;
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c