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

Вниз

Проблема с Object Pascal, помогите!!!   Найти похожие ветки 

 
beginner25   (2002-07-31 11:52) [0]

Я только начал вникать в тонкости объектного программирования, поэтому очень прошу помочь решить одну проблему. Дело в следующем: программа просто тестовая; из главной формы должна вызываться дилоговая. Как я это делаю:

procedure TfmMain.ButtonShowDialog_Click(Sender: TObject);
var i: integer;
begin
fmDialog.Test := 100;
i := fmDialog.Test;
fmDialog.ShowModal;
end;


В диалоговой форме (fmDialog) код следующий:

.....
private { Private declarations }
function GetTest: Integer;
procedure SetTest(Value: Integer);
public { Public declarations }
property Test: Integer read GetTest write SetTest;
end;

.....
function TfmDialog.GetTest: Integer;
begin
Result := Test;
end;

procedure TfmDialog.SetTest(Value: Integer);
begin
Test := Value;
end;


Так вот, когда я нажимаю кнопку в главной форме, то Delphi виснет, а потом выходит сообщение "Stack overflow".
В чем проблема? Помогите!


 
SP   (2002-07-31 11:56) [1]

В процедуре SetTest происходит повторное присваивание значения. Это повторяется до пока не переполнится стек.

Property Test, в данном случае, лучше объявить так:
property Test: Integer read FTest write FTest


 
ЮЮ   (2002-07-31 11:57) [2]

function TfmDialog.GetTest: Integer;
begin
Result := Test; //Данный оператор вызывает опять GetTest
end;
procedure TfmDialog.SetTest(Value: Integer);
begin
Test := Value; //Данный оператор вызывает опять SetTest
end;
Надо,Result := FTest; FTest := Value; где FTest - переменная в одной из секций TfmDialog


 
kull   (2002-07-31 11:59) [3]

правильно так:

procedure TfmDialog.SetTest(Value: Integer);
begin
FTest := Value;
end;


 
Alx2   (2002-07-31 11:59) [4]

Вызываешь сам себя из GetTest, Result := Test приводит к вызову Result := GetTest


 
beginner25   (2002-07-31 12:20) [5]

SP © (31.07.02 11:56)
Property Test, в данном случае, лучше объявить так:
property Test: Integer read FTest write FTest

Так-то япробовал и все конечно работает нормально, но в каких случаях тогда надо использовать именно function Get... и procedure Set...? И как правильно их использовать?


 
Beginner25   (2002-07-31 12:30) [6]

Все, вопрос снят, понял что к чему! Большое спасибо!


 
ЮЮ   (2002-07-31 12:32) [7]

Если в них стоит не один оператор, а некая последовательность.
Так GetXXX может брать Result не из переменной, а вычислять, или возвращать свойство внутреннего объекта, a в WriteXXX должна быть описана реакция объекта на изменение его свойства, а иначе что же это за свойство, если его изменение никак не влияет на объект???


 
Beginner25   (2002-07-31 12:36) [8]


> ЮЮ (31.07.02 12:32)
> Если в них стоит не один оператор, а некая последовательность.
> Так GetXXX может брать Result не из переменной, а вычислять,
> или возвращать свойство внутреннего объекта, a в WriteXXX
> должна быть описана реакция объекта на изменение его свойства,
> а иначе что же это за свойство, если его изменение никак
> не влияет на объект???


ЮЮ, поясни пожалуйста фразу "должна быть описана реакция объекта на изменение его свойства". Можно маленький примерчик?


 
MBo   (2002-07-31 12:42) [9]

>фразу "должна быть описана реакция объекта на изменение его свойства
например, при изменении шрифта (в SetFont...) надо перерисовать.



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

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

Наверх




Память: 0.46 MB
Время: 0.006 c
1-35255
kull
2002-07-29 11:01
2002.08.12
Мультиязыковость. Что кто посоветует?


1-35244
Antonius
2002-07-29 12:03
2002.08.12
Помогите перевести несколько строк с С++ на PAS


14-35430
Wild Wizard
2002-07-17 10:30
2002.08.12
Я тоже поступил


7-35482
[ KGB ] GENERAL
2002-05-26 23:22
2002.08.12
Интересный вопрос!!!


1-35267
JohnBurg
2002-07-30 19:15
2002.08.12
Как можно из вызванной DLL возвращать значения





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