Форум: "Компоненты";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизКак создать свойство Найти похожие ветки
← →
ita © (2005-04-25 07:03) [0]У меня не получается создать свойство. Я создаю очень простой класс:
type
TObj=class
public
procedure SetF1(z:integer);
function GetF1:integer;
property f1:integer read Getf1 write SetF1;
end;
procedure TObj.SetF1(z:integer);
begin
if f1<>z then
begin
f1:=z;
end;
end;
function TObj.GetF1:integer;
begin
Result:=f1;
end;
// создание экземпляра
Obj1:=TObj.Create;
Obj1.f1 :=10;
label1.Caption:=IntToStr(Obj1.f1);
При создании экземпляра зависает на методе GetF1, сообщение - переполнение стека.
Заранее благодарна.
← →
MBo © (2005-04-25 07:10) [1]TObj=class
private
FF1:Integer;
procedure SetF1(const Value:integer);
function GetF1:integer;
public
property f1:integer read Getf1 write SetF1;
end;
procedure TObj.SetF1(const Value:integer);
begin
if ff1<>Value then
ff1:=Value;
end;
function TObj.GetF1:integer;
begin
Result:=ff1;
end;
Многое из этогоо можно было получить автоматически, лишь написав в редакторе
property f1:integer; и нажать Alt-Ctrl-C
← →
Юрий Зотов © (2005-04-25 11:35) [2]> ita © (25.04.05 07:03)
procedure TObj.SetF1(z:integer);
begin
if f1<>z then
begin
f1 := z; // Здесь вызывается SetF1 и возникает рекурсия
end;
end;
function TObj.GetF1:integer;
begin
Result := f1; // Здесь вызывается GetF1 и возникает рекурсия
end;
=============================
Если при чтении или присваивании свойства не требуется никаких дополнительные действия то и не нужны никакие
Get/Set. Просто объявите класс так:
TObj = class
private
FF1: integer;
public
property F1: integer read FF1 write FF1;
end;
Если в потомках свойство может быть перенесено в published, то не лишним бы добавить к его объявлению default 0.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.037 c