Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизСоздание и удаление объектов Найти похожие ветки
← →
Dr. Well (2003-09-09 14:22) [0]Господа, простите за глупый вопрос... Ответ очевиден - книжки надо читать... Но на работе книжек нету...
Что именно нужно писать в конструкторе и деструкторе объекта... а то конструктор еще более менее работает, а деструктор ексцепшины вызывает...
Смотрел Хелп - там че то про Inherited написано... пробовал - только хуже...
Код прилагается...
TElementState = Byte;
TControlPoint = class (TObject)
cpID : Integer;
cpPosition : TPoint;
cpState : TElementState;
cpValue : Byte;
cpInput : Boolean;
cpElement : TObject;
constructor Create(aID : Integer; aPosition : TPoint; aElement : TObject; aState : TElementState);
function GetValue : Byte;
end; // TControlPoint
TElementType = Byte;
TElement = class (TObject)
eID : Integer;
eName : String;
eType : TElementType;
eImage : TImage;
eState : TElementState;
eControlPoints : array of TControlPoint;
eCPCount : Integer;
eNode : TObject;
// --- Semantic ---
eTime : Real;
eCP2Change : TControlPoint;
eCPValue : Byte;
eTimer : TTimer;
// ===
constructor Create(aID : Integer; aName : String; aType : TElementType; aPosition : TPoint;
aState : TElementState; aNode : TObject; aParent : TWinControl);
procedure RePaint;
procedure Action;
procedure ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure eTimerTimer(Sender: TObject);
destructor Destroy;
end; // TElement
constructor TElement.Create(aID: Integer; aName: String; aType: TElementType; aPosition: TPoint;
aState: TELementState; aNode: TObject; aParent : TWinControl);
var
Ofset : Word;
begin
Ofset:=2;
eID := aID;
eName := aName;
eType := aType;
// --- Create Image ---
eImage := TImage.Create(aParent);
eImage.Parent := aParent;
eImage.Left := aPosition.X;
eImage.Top := aPosition.Y;
eImage.Tag:=eID;
eImage.Hint:=IntToStr(eID);
eImage.Transparent := True;
eImage.OnMouseDown := ImageMouseDown;
eImage.OnMouseMove := ImageMouseMove;
eImage.OnMouseUp := ImageMouseUp;
// ===
eState := aState;
if eType=etTI then eTime := 4 else eTime := 2;
eNode := aNode;
eTimer := TTimer.Create((eNode as TNode).nDrawPlace);
eTimer.Enabled:=False;
// --- Create Control Points ---
eControlPoints := nil;
case eType of
etTrigger :
begin
eImage.Width:=2*Snap; //@@@
eImage.Height:=2*Snap; //@@@
SetLength(eControlPoints,3);
eControlPoints[0] := TControlPoint.Create(eID*10+1,Point(Ofset,Round(eImage.Height/4)),Self,esInactive); //@@@
eControlPoints[0].cpInput:=True;
eControlPoints[1] := TControlPoint.Create(eID*10+2,Point(Ofset,Round(eImage.Height*3/4)),Self,esInactive); //@@@
eControlPoints[1].cpInput:=True;
eControlPoints[2] := TControlPoint.Create(eID*10+3,Point(eImage.Width-Ofset,Round(eImage.Height/2)),Self,esInactive); //@@@
eControlPoints[2].cpInput:=False;
end;
etNot :
begin
eImage.Width:=40; //@@@
eImage.Height:=20; //@@@
SetLength(eControlPoints,2);
eControlPoints[0] := TControlPoint.Create(eID*10+1,Point(Ofset,Round(eImage.Height/2)),Self,esInactive); //@@@
eControlPoints[0].cpInput:=True;
eControlPoints[1] := TControlPoint.Create(eID*10+3,Point(eImage.Width-Ofset,Round(eImage.Height/2)),Self,esInactive); //@@@
eControlPoints[1].cpInput:=False;
end;
end; // case
// ===
eCPCount := High(eControlPoints)+1;
RePaint;
eImage.Visible:=True;
end;
destructor TElement.Destroy;
var
i : Integer;
begin
if eCPCount>0 Then
for i:=Low(eControlPoints) to High(eControlPoints) do
eControlPoints[i].Destroy;
eControlPoints := nil;
eNode := nil;
eImage.Free;
Self.Destroy;
end;
← →
Erik (2003-09-09 14:27) [1]На первой строчке
inherited Create;
В диструкторе на последней строке
inherited;
И никаких Self.Destroy; и прочей ерунды.
← →
Dr. Well (2003-09-09 14:33) [2]Спасибо, значит я что-то не так делал... Вроде так и написано в хелпе, но теперь хотя бы уверен, что должно работать..
СПАСИБО!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c