Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
6-64756
fixxxer
2002-03-06 17:04
2002.05.20
Работа с Е-mail-ом


7-64845
Ogu
2002-02-20 21:29
2002.05.20
Сканирование дерева каталогов с прогрессбаром


1-64687
Jaxtor
2002-05-06 11:27
2002.05.20
Ошибка EAccessViolation


4-64880
AFROLOV
2002-03-20 13:02
2002.05.20
Как показывать дочернее окно в глобальных координатах ?


6-64773
Kirill_
2002-03-07 00:24
2002.05.20
Net





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский