![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с Object Pascal, помогите!!! [D5, Win2k]
beginner25 © (2002-07-31 11:52:00)Я только начал вникать в тонкости объектного программирования, поэтому очень прошу помочь решить одну проблему. Дело в следующем: программа просто тестовая; из главной формы должна вызываться дилоговая. Как я это делаю:
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".
В чем проблема? Помогите!
MBo (2002-07-31 12:42:00) [1]>фразу "должна быть описана реакция объекта на изменение его свойства
например, при изменении шрифта (в SetFont...) надо перерисовать.
Beginner25 (2002-07-31 12:36:00) [2]
> ЮЮ (31.07.02 12:32)
> Если в них стоит не один оператор, а некая последовательность.
> Так GetXXX может брать Result не из переменной, а вычислять,
> или возвращать свойство внутреннего объекта, a в WriteXXX
> должна быть описана реакция объекта на изменение его свойства,
> а иначе что же это за свойство, если его изменение никак
> не влияет на объект???
ЮЮ, поясни пожалуйста фразу "должна быть описана реакция объекта на изменение его свойства". Можно маленький примерчик?
ЮЮ (2002-07-31 12:32:00) [3]Если в них стоит не один оператор, а некая последовательность.
Так GetXXX может брать Result не из переменной, а вычислять, или возвращать свойство внутреннего объекта, a в WriteXXX должна быть описана реакция объекта на изменение его свойства, а иначе что же это за свойство, если его изменение никак не влияет на объект???
Beginner25 (2002-07-31 12:30:00) [4]Все, вопрос снят, понял что к чему! Большое спасибо!
beginner25 (2002-07-31 12:20:00) [5]SP © (31.07.02 11:56)
Property Test, в данном случае, лучше объявить так:
property Test: Integer read FTest write FTest
Так-то япробовал и все конечно работает нормально, но в каких случаях тогда надо использовать именно function Get... и procedure Set...? И как правильно их использовать?
kull (2002-07-31 11:59:00) [6]правильно так:
procedure TfmDialog.SetTest(Value: Integer);
begin
FTest := Value;
end;
Alx2 (2002-07-31 11:59:00) [7]Вызываешь сам себя из GetTest, Result := Test приводит к вызову Result := GetTest
ЮЮ (2002-07-31 11:57:00) [8]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
SP (2002-07-31 11:56:00) [9]В процедуре SetTest происходит повторное присваивание значения. Это повторяется до пока не переполнится стек.
Property Test, в данном случае, лучше объявить так:
property Test: Integer read FTest write FTest