Форум: "Основная";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
ВнизОшибка EAccessViolation Найти похожие ветки
← →
Jaxtor (2002-05-06 11:27) [0]Подскажите, пожалуйста, как избавиться от ошибки 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; - объявление во вспомогательном модуле.
← →
Song (2002-05-06 11:31) [1]а что такое ... then SaveResultAsDialog.FileName? - это свойство
← →
Jaxtor (2002-05-06 11:37) [2]SaveResultAsDialog.FileName - это имя выбираемого файла
через SaveResultAsDialog: TSaveDialog;
← →
gek (2002-05-06 11:38) [3]> Song © (06.05.02 11:31)
Ну а мне, вообще, что-то непонятное...
← →
gek (2002-05-06 11:43) [4]Эта строчка
If SaveResultAsDialog.Execute then
SaveResultAsDialog.FileName
крайне непонятна. Что именно должно происходить?
← →
Jaxtor (2002-05-06 11:45) [5]Вот и не получается ничего сделать...
У MDI проекта свои особенности...
Может это глюк в DELPHI?
← →
Jaxtor (2002-05-06 11:54) [6]If SaveResultAsDialog.Execute then
SaveResultAsDialog.FileName - вызывает диалоговое окно
сохранения файла.
← →
gek (2002-05-06 11:59) [7]procedure TMainForm.Button1Click(Sender: TObject);
begin
If SaveResultAsDialog.Execute then
MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName)
end
← →
Anatoly Podgoretsky (2002-05-06 12:01) [8]Приведи реализацию метода SaveResultAsDialog.FileName
← →
Jaxtor (2002-05-06 12:05) [9]
procedure TMainForm.Button1Click(Sender: TObject);
begin
If SaveResultAsDialog.Execute then
MDIChild.Memo1.Lines.SaveToFile(SaveResultAsDialog.FileName)
end
Все равно возникает такая же ошибка!
← →
Jaxtor (2002-05-06 12:11) [10]Еще раз привожу исходный код:
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);
← →
Anatoly Podgoretsky (2002-05-06 12:15) [11]Это все понятно, но где реализация метода SaveResultAsDialog.FileName
← →
Jaxtor (2002-05-06 12:20) [12]Метод
SaveResultAsDialog.FileName
- это стандартный метод DELPHI.
← →
Anatoly Podgoretsky (2002-05-06 12:31) [13]Ты имеешь в виду метод класса TSaveDialog
Так там нет такого метода, а есть свойство строкового типа!
Поэтому конструкция If SaveResultAsDialog.Execute then SaveResultAsDialog.FileName неправомочна.
← →
Jaxtor (2002-05-06 12:36) [14]Давайте по-другому.
Вот код:
procedure TMainForm.Button1Click(Sender: TObject);
begin
MDIChild.Memo1.Lines.SaveToFile("C:\1.txt");
end;
Возникает такая же ошибка!
← →
Anatoly Podgoretsky (2002-05-06 12:45) [15]Ошибка где то в MDIChild или около, смею предположить, что MDIChild не существует или имеет неверное значение
← →
gek (2002-05-06 12:47) [16]EAccessViolation стандарная ошибка.
Нарушениедоступа.
Объект, к которому ты обращаещься скорее всего не создан.
← →
Song (2002-05-06 12:47) [17]2Jaxtor (06.05.02 12:36)
FileName - это свойство, потому как оно у Вас написано, оно даже не должно компилиться.
← →
Jaxtor (2002-05-06 12:49) [18]Вот код второго модуля:
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;
← →
Jaxtor (2002-05-06 12:55) [19]Song, давайте забудем про FileName.
Вот более упрощенный код(еще раз его пишу):
procedure TMainForm.Button1Click(Sender: TObject);
begin
MDIChild.Memo1.Lines.SaveToFile("C:\1.txt");
end;
← →
Nikolay M. (2002-05-06 13:11) [20]procedure TMainForm.Button1Click(Sender: TObject);
begin
MDIChild.Memo1.Lines.SaveToFile("C:\1.txt");
end;
почему не поставить breakpoint на эту строчку, если AV вылезает именно на ней?
возможно, MDIChild.Memo1.Lines или MDIChild.Memo1 или MDIChild равны nil?
← →
gek (2002-05-06 13:14) [21]У тебя создано MDIChild.Memo1 или нет?
т.е. memo вставил туда?
← →
Jaxtor (2002-05-06 13:16) [22]Да, действительно MDIChild равно nil.
Я думаю, что нужно попробовать создать
объект MDIChild с помощью метода Create.
← →
cpp (2002-05-06 13:21) [23]Товарищ создай сначала MDIChild. Как только ты его создашь, так сразу у тебя исчезнет твоя ошибка
← →
Jaxtor (2002-05-06 13:28) [24]Спасибо всем, принявшим участие в этой дискуссии.
Мне стало понятно, почему возникает эта ошибка.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c