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

Вниз

объекты в качестве аргументов функции   Найти похожие ветки 

 
smok_er   (2003-02-19 15:47) [0]

Мастера!
Никогда еще не сталкивался с такой проблемой, но вот случилось

есть форма, на ней stringgrid1 и stringgrid2
есть функция

function TframeTarif.FillGridTarif(StringGridX: TStringGrid; MyQuery: TOraQuery; pref: String; var strMesError: String): Boolean;


При вызове функции

if not FillGridTarif(StringGrid1, DM.Qr_tarif, "", MesError) then raise Exception.Create(MesError);

выскакивает AV до захода в функцию...
Может кто-нибудь помочь?


 
Reindeer Moss Eater   (2003-02-19 15:52) [1]

Либо StringGrid1 либо DM.Qr_tarif указывают на nil


 
SVM (Perm)   (2003-02-19 16:07) [2]

Если до захода, то DM=Nil


 
smok_er   (2003-02-19 16:08) [3]

Нет, я для проверки убрал первый аргумент из функции - все нормально.
Проблема именно в StringGrid1, который находится на форме, т.е. никак не nil.
Может приколы в использовании фреймов?


 
smok_er   (2003-02-19 16:31) [4]

Только что попробовал перед вызовом функции обратиться к свойству StringGrid1 - ошибка. Видимо глюки именно в следствие того, что это фрейм. Хотя раньше я такого не встречал.
Обращение к фрейму происходит после его создания.


 
Reindeer Moss Eater   (2003-02-19 16:36) [5]

Внимательно рассмотри секцию interface модуля формы c фреймом.


 
Reindeer Moss Eater   (2003-02-19 16:51) [6]

if not FillGridTarif(StringGrid1, DM.Qr_tarif, "", MesError) then raise Exception.Create(MesError);

Если StringGrid1 находится на фрейме, а код приведенный выше вызывается из модуля формы, на которой находится фрейм и компилятор не ругается на него, то :

1. В модуле формы объявлена переменная StringGrid1 класса TStringGrid, которая ничем не инициализирована

2. "Правильная" ссылка на StringGrid1 объявлена в модуле фрейма.
Обращаться к ней надо по имени фрейма : MyFrame.StringGrid1

3. Вместо правильной ссылки используется ссылка из модуля формы, что и влечет за собой AV


 
smok_er   (2003-02-19 19:01) [7]

Нет, функция является public членом класса фрейма.
Проблема обнаружилась в другом, и я несколько удивился.
У фрейма объявлен конструктор

public
constructor Create(AOwner: TComponent); override;

constructor TframeTarif.Create(AOwner: TComponent);
begin
inherited Create(Application);
try
if DM.Qr_tarif.Active then
DM.Qr_tarif.Close;
....
implementation
...
if not DM.Qr_valuta.Active then
DM.Qr_valuta.Open;

if not DM.Qr_valuta.IsEmpty then
DBLCB_Valuta.KeyValue := DM.Qr_valuta.FieldByName("id_valuta").AsInteger;
except
on e: Exception do
MessageBox(Handle, PChar(e.Message), "Ошибка", MB_OK or MB_ICONERROR);
end;
end;



так вот... Если я все это дело комментирую - все ОК

Есть варианты?


 
icWasya   (2003-02-19 20:02) [8]

а это что такое

inherited Create(Application);


 
Романов Р.В.   (2003-02-19 20:10) [9]

По моему ситуация такова. Когда Frame создается некоторые объекты еще не созданы. Перенеси этот код в OnCreate формы.


 
smok_er   (2003-02-19 20:12) [10]

Огромное спасибо!
Вопрос закрыт
Нужно было просто написать

inherited;


 
smok_er   (2003-02-19 20:15) [11]

Романов Р.В. © (19.02.03 20:10)
По моему ситуация такова. Когда Frame создается некоторые объекты еще не созданы. Перенеси этот код в OnCreate формы.

У фрейма нет такого события, а в форме это делать не хотелось.
Но как я написал выше - вопрос снят.
Всем огромное спасибо!

Кстати, выдержка из мана:

When inherited has no identifier after it, it refers to the inherited method with the same name as the enclosing method. In this case, inherited takes no explicit parameters, but passes to the inherited method the same parameters with which the enclosing method was called. For example,

inherited;

occurs frequently in the implementation of constructors. It calls the inherited constructor with the same parameters that were passed to the descendant.



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

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

Наверх





Память: 0.58 MB
Время: 0.041 c
3-5389
snake1977
2003-02-11 17:06
2003.03.03
IB6.5 & IB4.2


1-5622
Andrushk
2003-02-20 09:44
2003.03.03
Можно ли перегрузить конструктор? Если да, то как?


1-5523
Chubais
2003-02-19 13:20
2003.03.03
Сообщения об ошибках


14-5820
sad
2003-02-11 19:14
2003.03.03
JavaScript: определить существует ли файл на диске


3-5391
Behemoth
2003-02-12 10:58
2003.03.03
Обрыв связи с сервером





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