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

Вниз

Создание и удаление объектов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
3-71559
AlexWeb
2003-08-29 11:07
2003.09.22
Как использовать серверный курсор в IBX компонентах?


1-71586
saNat
2003-09-10 02:10
2003.09.22
MainMenu


14-71902
Е-Моё имя
2003-09-02 11:34
2003.09.22
Проблема с OLE акробата


7-71968
kalishenko
2003-07-08 19:00
2003.09.22
Принтер и шрифты


3-71560
Domkrat
2003-08-28 22:41
2003.09.22
Вопрос по IBX - default значения полей в базе данных Firebird