Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

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

 
Сергей Резников ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.016 c
14-86550
Layner
2003-12-01 10:15
2003.12.26
Скажите, что пишут индийские программисты.


14-86538
blackman
2003-12-03 09:45
2003.12.26
Эволюция программиста..


1-86351
Сергей Резников
2003-12-12 12:15
2003.12.26
Ошибка доступа. Срочно !


14-86549
R
2003-12-02 04:16
2003.12.26
Delphi 5 Standart


1-86337
bober
2003-12-12 16:39
2003.12.26
run-time