Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Вниз

Ошибка доступа. Срочно !   Найти похожие ветки 

 
Сергей Резников   (2003-12-12 12:15) [0]

Следующая проблема:
МДИ-приложение; в дочерней форме объявлено:
type
TNewLang = (lngRus, lngEng);
в описании доч. формы:
public
{ Public declarations }
NewLang: TNewLang;
при вызове в доч. форме NewLang := lngRus; или в род. (MainForm.ActiveMDIChild as TNewChildForm).NewLang := lngRus; происходит ошибка доступа. Почему ?


 
Sandman25   (2003-12-12 12:36) [1]

Потому что MainForm.ActiveMDIChild = nil или указывает на объект, который не является TNewChildForm


 
Сергей Резников   (2003-12-12 12:42) [2]

Я сам генирирую эту форму.


 
Сергей Резников   (2003-12-12 12:43) [3]

Я сам генирирую эту форму. И кроме того, что мешает NewLang := lngRus; внутри дочерней ???


 
Sandman25   (2003-12-12 12:45) [4]

MainForm.ActiveMDIChild = nil


 
Silver Alex   (2003-12-12 12:48) [5]

код бы глянуть


 
Сергей Резников   (2003-12-12 12:49) [6]

Кхе, кхе: второе предложение: "что мешает NewLang := lngRus; внутри дочерней ???": то бишь, что мешает присвоить значение переменной формы внутри её же ?


 
Плохиш_   (2003-12-12 12:52) [7]

>Сергей Резников © (12.12.03 12:49) [6]

Все телепаты в зимней спячке!
А без них только ошибка в 17й строке виновата ;-)


 
Sandman25   (2003-12-12 12:52) [8]

Присоединяюсь к [5] Silver Alex © (12.12.03 12:48)


 
Сергей Резников   (2003-12-12 12:53) [9]


> Silver Alex © (12.12.03 12:48) [5]
> код бы глянуть

Короче: в "паблике" TNewChildForm прописано: NewLang: TNewLang;. При попытке: NewLang := lngRus; внутри NewChildForm происходит ошибка доступа. Тип TNewLang = (lngRus, lngEng);


 
Сергей Резников   (2003-12-12 12:55) [10]


> Плохиш_ (12.12.03 12:52) [7]

:-|


 
Sandman25   (2003-12-12 12:55) [11]

При попытке: NewLang := lngRus; внутри NewChildForm происходит ошибка доступа

Что такое внутри


 
Сергей Резников   (2003-12-12 13:00) [12]


> Sandman25 © (12.12.03 12:55) [11]

То бишь, даже не в основной форме код этот вызывает ошибку, но и в дочерней.


 
Sandman25   (2003-12-12 13:03) [13]

[12] Сергей Резников © (12.12.03 13:00)

И какую ошибку?

type TChildForm = class...
...
NewLang: TNewLang;
end;

procedure TChildForm.AnyMethod;
begin
NewLang := TNewLang(lngRus);

вызывает Access Violation?

Не верю (c)
end;


 
Сергей Резников   (2003-12-12 13:07) [14]


> NewLang := TNewLang(lngRus);

А разве не NewLang := lngRus ?


 
Sandman25   (2003-12-12 13:08) [15]

[14] Сергей Резников © (12.12.03 13:07)

Можно и так.

Все равно не верю :)


 
Сергей Резников   (2003-12-12 13:11) [16]

Я сожелею конечно, но it doesn`t work !


 
Sandman25   (2003-12-12 13:15) [17]

А так?

NewLang := TNewLang(0)

То есть ставите break point на этой строке и при ее выполнении получаете AV???


 
Сергей Резников   (2003-12-12 13:19) [18]

Никак !


> То есть ставите break point на этой строке и при ее выполнении
> получаете AV???

Да.


 
Сергей Резников   (2003-12-12 13:22) [19]

Ещё раз подчеркну, что NewLang объявлена в Public declarations.


 
Sandman25   (2003-12-12 13:26) [20]

[19] Сергей Резников © (12.12.03 13:22)

Да какая разница, где он объявлен.
Я в таком случае выхожу из Delphi и захожу заново. Обычно помогает.


 
Сергей Резников   (2003-12-12 13:29) [21]

Это не тот случай, когда "обычно" :-((( Не помогло !


 
Сергей Резников   (2003-12-12 13:31) [22]

И ещё: при сравнении в основной форме: if (MainForm.ActiveMDIChild as TNewChildForm).NewLang = lngRus та же ошибка.


 
Sandman25   (2003-12-12 13:32) [23]

Хотел спросить, какая версия Delphi, потом увидел.
Не зря я отказался от Delphi 7.


 
Сергей Резников   (2003-12-12 13:35) [24]

Дельфи здесь не причём, ибо похожий проект с 6-го прекрасно работает.


 
Sandman25   (2003-12-12 13:37) [25]

[24] Сергей Резников © (12.12.03 13:35)

Тогда хватит объяснять на словах. Пора уже нормально показать весь код, относящийся к делу.


 
Сергей Резников   (2003-12-12 13:44) [26]

Дочерняя:
type
TChildForm = class(TForm)
PageControl: TPageControl;
.....................
private
{ Private declarations }
public
{ Public declarations }
ScriptLanguage: TScriptLanguage;
......................
published
{ Published declarations }
procedure SetParserLanguage(Lang: TScriptLanguage);
end;

procedure TChildForm.SetParserLanguage(Lang: TScriptLanguage);
begin
if Lang = slJS then
begin
ScriptLanguage := slJS;
..................................
end;

Основная:
procedure TMainForm.TBarLanguageChange(Sender: TObject;
const Text: String);
begin
if Text = "JavaScript" then MDIChild.SetParserLanguage(slJS);
.................
end;
где MDIChild := (MainForm.ActiveMDIChild as TChildForm)

в обе формы инклюдится файл, где
type
TScriptLanguage = (slVBS, slJS, slBAT);


 
Sandman25   (2003-12-12 13:48) [27]

в обе формы инклюдится файл, где
type
TScriptLanguage = (slVBS, slJS, slBAT);


Неправильно. Это получаются разные типы!
Оба модуля должны использовать (uses) файл, в котором в Interface описан этот тип.


 
Сергей Резников   (2003-12-12 13:49) [28]

unit Common;

interface

type
TScriptLanguage = (slVBS, slJS, slBAT);

и во всех в uses Common


 
Сергей Резников   (2003-12-12 13:59) [29]

Это я имею в виду, что у меня так и есть.


 
Сергей Резников   (2003-12-12 14:10) [30]

Всё ! Всё работает !!! После перезагрузки винды ;-)))


 
Плохиш_   (2003-12-12 14:15) [31]

>Сергей Резников © (12.12.03 13:44) [26]

> где MDIChild := (MainForm.ActiveMDIChild as TChildForm)

MainForm.ActiveMDIChild = nil


 
Sandman25   (2003-12-12 15:24) [32]

[30] Сергей Резников © (12.12.03 14:10)

Я обедал.
Я же говорил, что нужно из Delphi выйти :) Иногда и из Windows.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
14-86562
Кен
2003-11-22 07:31
2003.12.26
Высадку американцев на Луну снимал Стэнли Кубрик


1-86419
CaS
2003-12-14 04:13
2003.12.26
hIcon в TPicture


3-86287
rel_
2003-12-04 10:24
2003.12.26
помогите SQL запросом


1-86346
LastLamer
2003-12-12 15:55
2003.12.26
TreeView, exchange nodes


14-86501
Карелин Артем
2003-12-04 14:33
2003.12.26
Что может висеть на 7000 порту?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский