Форум: "Основная";
Текущий архив: 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.007 c