![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка EAccessViolation [D6, Win95/98]
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?