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

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

Ошибка при сохранении файла [D7, XP]


Страницы:   1 2

smartleds ©   (2008-12-17 20:39:00) 

Господа подскажите в чем может быть проблема, сохраняю файл при помощи стандартного диалога.
Вылазит ошибка "Project xxx.exe raised exception class EAccess Violation with message Access violation at address XXXX in module xxx.exe".
При пошаговой отладке ошибка возникает в строчке form2.SaveDialog2.Execute
уже все облазил чего ей не нравится не пойму.

var cfilename,binfilename:string;
var cfile:textfile;
//========================-Save  FILE-==============
form2.savedialog2.initialdir:='f:\DELPH\Array\';
if form2.SaveDialog2.Execute then  <=!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                 begin
               cfilename:= form2.Savedialog2.Filename+'.c';
               AssignFile(cfile,cfilename);
               rewrite(cfile);
                 end;


Правильный$Вася   (2008-12-18 11:03:00) [1]

if SaveDialog2.Execute then
                begin
              cfilename:= Savedialog2.Filename+'.c';
              AssignFile(cfile,cfilename);
              rewrite(cfile);
                end;

SetLength(scriptarray,offset);
for i:=0 to length(scriptarray)-2 do
   begin
   write(cfile, scriptarray[i]);
   write(cfile,',');
   end;

а это конструкциям мне просто нравится
если юзер нажмет отмену, что будет?


Германн   (2008-12-18 01:07:00) [2]


> Leonid Troyanovsky ©   (17.12.08 22:57) [29]
>
>

Этот "ссыл" читают только те, кому это не нужно, поскольку они и так умеют задавать вопросы. И им просто интересно смог ли "какой-то умник" придумать то, что они до сих пор не знали?
:)


Leonid Troyanovsky   (2008-12-17 23:20:00) [3]


> Anatoly Podgoretsky ©   (17.12.08 23:11) [33]

> В те времена это было важно, каналы были узкие, оплата по

Оказывается, это и сейчас актуально.
Видимо, в этом и есть сермяжный смысл :)

--
Regards, LVT.


Anatoly Podgoretsky   (2008-12-17 23:11:00) [4]

> Leonid Troyanovsky  (17.12.2008 23:07:32)  [32]

Там два смысла

1. а оно нам нужно, если ты даже не хочешь применить минимум усилий.
2. приведи подробную информацию, а мы подумаем стоит ли тратить на тебя время.

В те времена это было важно, каналы были узкие, оплата по времени. А то и вообще или BBS или FIDO
Это сейчас можно трепаться без ущерба бюджету и здоровью.


Leonid Troyanovsky   (2008-12-17 23:07:00) [5]


> Anatoly Podgoretsky ©   (17.12.08 23:00) [31]

> Было там такое и еще жестче

Какой удар со стороны классиков :)

--
Regards, LVT.


Anatoly Podgoretsky   (2008-12-17 23:00:00) [6]

> Leonid Troyanovsky  (17.12.2008 22:57:29)  [29]

Было там такое и еще жестче, но мысль эта.


smartleds   (2008-12-17 22:58:00) [7]

Я понял буду выкидывать из программы постепенно все не относящиеся к глюку, пока не выкрестализируется ошибка, тогда уже к вам обращусь


Leonid Troyanovsky   (2008-12-17 22:57:00) [8]


> Anatoly Podgoretsky ©   (17.12.08 22:38) [28]

> C отформатированым будет не легче.

Во, сформулировал:
"Если вопрошающий ожидает реальной помощи,
то он проделает всю необходимую работу для
облегчения участи отвечающих"

Хотя, наверняка, было это и в хауаск - нехочу перечитывать :(

Вот и ссыл для заинтересованных лиц:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html

--
Regards, LVT.


Anatoly Podgoretsky   (2008-12-17 22:38:00) [9]

> Amoeba  (17.12.2008 22:27:24)  [24]

C отформатированым будет не легче.


Leonid Troyanovsky   (2008-12-17 22:38:00) [10]


> Leonid Troyanovsky ©   (17.12.08 22:11) [22]

> Кхм, забыл подчеркнуть "достаточный", sorry.

Гм, опять ошибка -  надо: минимальный, но компилируемый код.
Может так будет понятней :)

--
Regards, LVT.


Amoeba   (2008-12-17 22:37:00) [11]

Автору вопроса. Скачай и установи форматировщик кода:
http://www.aew.wur.nl/UK/Delforexp/


Leonid Troyanovsky   (2008-12-17 22:29:00) [12]


> smartleds   (17.12.08 22:17) [23]

> На Form1 savedialog1 тоже создал
> вот обработчик кнопки SaveAs1
> procedure TForm1.Button9Click(Sender: TObject);

Не верь глазам своим :)

А, чего пользоваться кнопой "код" не обучены-с?
И любопытствующим уготовано продираться через тернии?

Ну, ладно, завтра, бог даст, полюбопытствуем.
Если, конечно, до завтра не расколят ;)

И, чего, приведеннное, дейс-но, так и скомпилируется?
Любопытно.

--
Regards, LVT.


Amoeba   (2008-12-17 22:27:00) [13]


> smartleds   (17.12.08 22:17) [23]

Ты бы хоть отформатировал свой код, а то разбираться с ним тяжко.


smartleds   (2008-12-17 22:17:00) [14]

На Form1 savedialog1 тоже создал
вот обработчик кнопки SaveAs1
procedure TForm1.Button9Click(Sender: TObject);
var k,i,j,curbeginheaderinfile,curbeginchannelA,curchannelsizeA:integer;
var lowbyte,middlebyte,highbyte:byte;

begin
curbeginscript:=addrbeginscript; //--> const =1000
//==============- Write Absolut address current Script -=====
SetLength(scriptarray,1000000);
//------------- Write adress begin script --------------
highbyte:=curbeginscript div 65536;
middlebyte:=(curbeginscript div 256) mod 256;
lowbyte:=curbeginscript mod 256;

curpos:=beginscript_links;
scriptarray[curpos]:=highbyte;
curpos:=curpos+1;
scriptarray[curpos]:=middlebyte;
curpos:=curpos+1;
scriptarray[curpos]:=lowbyte;
//---------------- Write amount scene ----------
curpos:=addrbeginscript;
highbyte:=amount_scene div 256;
lowbyte:= amount_scene mod 256;
scriptarray[curpos]:=highbyte;
curpos:=curpos+1;
scriptarray[curpos]:=lowbyte;
curpos:=curpos+1;
scriptarray[curpos]:=0; //reserv byte
curpos:=curpos+1;
//----------------- Write amount channels ---------
Memo1.Lines.Append('curpos='+inttostr(curpos)+'  ');
highbyte:=amount_channels div 256;
lowbyte:=amount_channels mod 256;
scriptarray[curpos]:=highbyte;
curpos:=curpos+1;
scriptarray[curpos]:=lowbyte;
curpos:=curpos+1;
scriptarray[curpos]:=0; //reserv byte
curpos:=curpos+1;
//---------------- write amount repeat  script ---------
scriptarray[curpos]:=0; // if 0 is besconechno
curpos:=curpos+1;
//---------------- write amount service arrays for colomn ---------
scriptarray[curpos]:=asarr_string; //
curpos:=curpos+1;
Memo1.Lines.Append('curpos1='+inttostr(curpos)+'  ');
//---------------- write amount service arrays for string ---------
scriptarray[curpos]:=asarr_colomn; //
curpos:=curpos+1;
Memo1.Lines.Append('curpos1='+inttostr(curpos)+'  ');
//--------------- Write reserv 12 byte ------------

//for i:=0 to asarr_colomn-3 do
for i:=0 to headersize-9-1 do
  begin
scriptarray[curpos]:=0; //1
curpos:=curpos+1;
  end;
Memo1.Lines.Append('curpos2='+inttostr(curpos)+'  ');
begin_data:=addrbeginscript+headersize;
//-----------------------
writedata(begin_data,amount_scene+asarr_string,amount_channels+asarr_colomn);
//--------------------
data_size:=addrbeginscript+headersize+( (amount_scene+asarr_string)*(amount_channels+asarr_colomn) );
form1.Memo1.Lines.Append('data_size='+inttostr(data_size)+'  ');
SaveAs(data_size);
//----------------------------
end;
процедура SaveAs
procedure  SaveAs (data_sizesave:integer) ;
var cfilename,binfilename:string;
var cfile:textfile;
var binaryfile:file of byte;
var i:integer;
begin

SetLength(scriptarray,data_sizesave);
scriptarray[10]:=1;
//form1.Memo2.Lines.Append(' curscript='+IntToStr(curscript)+'  ');

//========================-OUTPUT C FILE-==============
form1.savedialog1.initialdir:='f:\DELPH\Script_Array\';
//form1.savedialog1.defaultext:='c';
form1.SaveDialog1.Execute;
cfilename:= form1.Savedialog1.Filename+'.c';
AssignFile(cfile,cfilename);
rewrite(cfile);

for i:=0 to length(scriptarray)-2 do
    begin
    write(cfile, scriptarray[i]);
    write(cfile,',');
    end;

write(cfile, scriptarray[length(scriptarray)-1]);
closeFile(cfile);
//====================-OUTPUT BINARY FILE-==========
binfilename:=form1.Savedialog1.Filename+'.bin';
AssignFile(binaryfile,binfilename);
rewrite(binaryfile);
for i:=0 to length(scriptarray)-1 do
    write(binaryfile, scriptarray[i]);
closeFile(binaryfile);
end;

Код обработчика кнопки SaveAs2
procedure TForm2.Button3Click(Sender: TObject);

var cfilename,binfilename:string;
var cfile:textfile;
var binaryfile:file of byte;
var i:integer;
begin
Memo1.Lines.Append(' offset='+IntToStr(offset)+'  ');
//========================-OUTPUT C FILE-==============
savedialog2.initialdir:='f:\DELPH\Script_Array\';
if SaveDialog2.Execute then
                 begin
               cfilename:= Savedialog2.Filename+'.c';
               AssignFile(cfile,cfilename);
               rewrite(cfile);
                 end;

SetLength(scriptarray,offset);
for i:=0 to length(scriptarray)-2 do
    begin
    write(cfile, scriptarray[i]);
    write(cfile,',');
    end;

write(cfile, scriptarray[length(scriptarray)-1]);
closeFile(cfile);
//====================-OUTPUT BINARY FILE-==========
binfilename:=Savedialog2.Filename+'.bin';
AssignFile(binaryfile,binfilename);
rewrite(binaryfile);
for i:=0 to length(scriptarray)-1 do
    write(binaryfile, scriptarray[i]);
closeFile(binaryfile);

form2.close;
Application.Terminate;
end;


Leonid Troyanovsky   (2008-12-17 22:11:00) [15]


> Leonid Troyanovsky ©   (17.12.08 22:07) [21]

> И хватит загадок: приводи код _минимально_  достаточный

Кхм, забыл подчеркнуть "достаточный", sorry.

--
Regards, LVT.


Leonid Troyanovsky   (2008-12-17 22:07:00) [16]


> smartleds   (17.12.08 21:59) [20]

> Так я savedialog2 на форме 2 создал.

А на Form1 чего?

И хватит загадок: приводи код _минимально_  достаточный
для воспроизведения проблемы.
Дабы любопыствующий мог оное воспроизвести без напрягов.

Иначе, так и останешься мистером ХХХ ;)

--
Regards, LVT.


smartleds   (2008-12-17 21:59:00) [17]

Выкинул процедуру SaveAs , ее код вставил в обработчик кнопки SaveAs1 на форме 1, результат глюк не исчез.
Про два бита я не понял
[5]  Ставлю 2 бита на то, что savedialog2 д.б. создать Пушкин.
Так я savedialog2 на форме 2 создал.


Leonid Troyanovsky   (2008-12-17 21:46:00) [18]


> smartleds   (17.12.08 21:42) [17]

> Да не работает , ничего выделить нельзя ,

В диалоге ничего выделять и не надо.
А в окне отладчика - лишь встать на строку.

--
Regards, LVT.


Leonid Troyanovsky   (2008-12-17 21:45:00) [19]


> smartleds   (17.12.08 21:37) [15]

> В SaveAs 1?

Да везде, где мы видели.
Про Form1 ты уж предупрежден.

На второе: нечего мешать регулярные (обычные) процедуры с методами. Тогда, например, и не будет искусов пользовать Form1.

А как там мои два бита?

--
Regards, LVT.


smartleds   (2008-12-17 21:42:00) [20]

Да не работает , ничего выделить нельзя , я ведь тоже сначало пробовал скопировать.
Он создан
type
 TForm2 = class(TForm)
   OpenDialog2: TOpenDialog;
   Button1: TButton;
   Button2: TButton;
   Memo1: TMemo;
   Label1: TLabel;
   Button3: TButton;
   SaveDialog2: TSaveDialog;  <===========================!!!!!!!
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button3Click(Sender: TObject);


Страницы:   1 2

Наверх

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