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

Вниз

Проблема с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-35226
Crazy Joker
2002-07-19 11:29
2002.08.12
Помогите! Форма не отображается пока не выполнится запрос к БД .


1-35373
Starkom
2002-07-30 16:24
2002.08.12
А кто мне скажет почему в Борланде такие плохие хелпописатели???


3-35203
kalliopiy
2002-07-23 14:00
2002.08.12
Автоинкрементное поле


3-35141
vich
2002-07-21 17:00
2002.08.12
Программа не находит драйвер для работы с базой.


1-35282
TAN_K
2002-07-31 15:46
2002.08.12
Помогите начинающему в Delphi