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

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

Ошибка EAccessViolation [D6, Win95/98]


Страницы:   1 2

Jaxtor ©   (2002-05-06 11:27:00) 

Подскажите, пожалуйста, как избавиться от ошибки EAccessViolation во время выполнения программы. У меня программа содержит модуль,отображающий главное окно с параметром FormStyle = fsMDIForm и вспомогательное окно со свойством FormStyle = fsMDIChild, в котором находится компонент TMemo.
Задача состоит в том, чтобы при нажатии кнопки TButton на
главной форме в файл сохранялось содержимое TMemo.

Вот код обработчика в главном модуле:

procedure TMainForm.Button1Click(Sender: TObject);
begin
If SaveResultAsDialog.Execute then
SaveResultAsDialog.FileName else
Exit;
MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName);
end;

MDIChild: TMDIChild; - объявление во вспомогательном модуле.


Jaxtor   (2002-05-06 13:28:00) [1]

Спасибо всем, принявшим участие в этой дискуссии.
Мне стало понятно, почему возникает эта ошибка.


cpp   (2002-05-06 13:21:00) [2]

Товарищ создай сначала MDIChild. Как только ты его создашь, так сразу у тебя исчезнет твоя ошибка


Jaxtor   (2002-05-06 13:16:00) [3]

Да, действительно MDIChild равно nil.
Я думаю, что нужно попробовать создать
объект MDIChild с помощью метода Create.


gek   (2002-05-06 13:14:00) [4]

У тебя создано MDIChild.Memo1 или нет?
т.е. memo вставил туда?


Nikolay M.   (2002-05-06 13:11:00) [5]

procedure TMainForm.Button1Click(Sender: TObject);
begin
MDIChild.Memo1.Lines.SaveToFile("C:\1.txt");
end;


почему не поставить breakpoint на эту строчку, если AV вылезает именно на ней?
возможно, MDIChild.Memo1.Lines или MDIChild.Memo1 или MDIChild равны nil?


Jaxtor   (2002-05-06 12:55:00) [6]

Song, давайте забудем про FileName.
Вот более упрощенный код(еще раз его пишу):

procedure TMainForm.Button1Click(Sender: TObject);
begin
MDIChild.Memo1.Lines.SaveToFile("C:\1.txt");
end;



Jaxtor   (2002-05-06 12:49:00) [7]

Вот код второго модуля:

unit childwin;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TMDIChild = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;

var
MDIChild: TMDIChild;

implementation

{$R *.dfm}

end.

Основной модуль использует этот модуль через

uses childwin;


Song   (2002-05-06 12:47:00) [8]

2Jaxtor (06.05.02 12:36)
FileName - это свойство, потому как оно у Вас написано, оно даже не должно компилиться.


gek   (2002-05-06 12:47:00) [9]

EAccessViolation стандарная ошибка.
Нарушениедоступа.
Объект, к которому ты обращаещься скорее всего не создан.


Anatoly Podgoretsky   (2002-05-06 12:45:00) [10]

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


Jaxtor   (2002-05-06 12:36:00) [11]

Давайте по-другому.
Вот код:

procedure TMainForm.Button1Click(Sender: TObject);
begin
MDIChild.Memo1.Lines.SaveToFile("C:\1.txt");
end;

Возникает такая же ошибка!


Anatoly Podgoretsky   (2002-05-06 12:31:00) [12]

Ты имеешь в виду метод класса TSaveDialog
Так там нет такого метода, а есть свойство строкового типа!
Поэтому конструкция If SaveResultAsDialog.Execute then SaveResultAsDialog.FileName неправомочна.


Jaxtor   (2002-05-06 12:20:00) [13]

Метод SaveResultAsDialog.FileName
- это стандартный методDELPHI.


Anatoly Podgoretsky   (2002-05-06 12:15:00) [14]

Это все понятно, но где реализация метода SaveResultAsDialog.FileName


Jaxtor   (2002-05-06 12:11:00) [15]

Еще раз привожу исходный код:

procedure TMainForm.Button1Click(Sender: TObject);
begin
If SaveResultAsDialog.Execute then
SaveResultAsDialog.FileName else
Exit;
MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName);
end;

Этот метод Button1Click работает при нажатии кнопки типа
TButton на главной форме.
SaveResultAsDialog.Execute - вызывает диалоговае окно сохранения
файла. Exit - это если нажата отмена в окне.
Ошибку EAccessViolation вызывает строка:

MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName);


Jaxtor   (2002-05-06 12:05:00) [16]


procedure TMainForm.Button1Click(Sender: TObject);
begin
If SaveResultAsDialog.Execute then
MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName)
end

Все равно возникает такая же ошибка!


Anatoly Podgoretsky   (2002-05-06 12:01:00) [17]

Приведи реализацию метода SaveResultAsDialog.FileName


gek   (2002-05-06 11:59:00) [18]

procedure TMainForm.Button1Click(Sender: TObject);
begin
If SaveResultAsDialog.Execute then
MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName)
end


Jaxtor   (2002-05-06 11:54:00) [19]

If SaveResultAsDialog.Execute then
SaveResultAsDialog.FileName - вызывает диалоговое окно
сохранения файла.


Jaxtor   (2002-05-06 11:45:00) [20]

Вот и не получается ничего сделать...
У MDI проекта свои особенности...
Может это глюк в DELPHI?


Страницы:   1 2

Наверх

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