-
Создаю свой компонент. ОН должен представлять из себя метку, как элемент управления, на графике TChart, но пока он выглядит толька как рисунок на канве, подскажите как сделать чтобы при наведении мышки на элемент, курсор менялся на тот что прописываю в свойствах по умолчанию, и реагировал на события. Да и просьба силно не пинать за ошибки и не знание , я ведь не волшебник, я только учусь.
nit OscMet; interface uses Windows, SysUtils, Classes, Controls, Graphics, Chart; type TOscMet = class(TCustomControl) private FChart : TCustomChart; { Private declarations }
protected procedure SetChart(const Value: TCustomChart); { Protected declarations }
public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override;
published property Color; property Name; //property IndexMet;
property OnClick; property OnDblClick; property OnMouseDown; property OnMouseMove;
procedure DrawMet(); property Chart: TCustomChart read FChart write SetChart; { Published declarations } end;
procedure Register;
implementation
procedure Register; //регистрирую компонент begin RegisterComponents('New', [TOscMet]); end;
constructor TOscMet.Create(AOwner: TComponent); begin inherited Create(AOwner); // Унаследованный конструктор Cursor:=crHandPoint; // По умолчанию курсор в виде руки
end;
destructor TOscMet.Destroy; begin inherited; // Унаследованый деструктор end;
procedure TOscMet.SetChart(const Value: TCustomChart); begin if FChart<>Value then begin FChart:=Value; if Assigned(FChart) then FChart.FreeNotification(Self); end; end;
procedure TOscMet.DrawMet(); // процедура прорисовки метки var x1, y1, x2, y2, x3, y3: integer; ptCursor: array [0..2] of TPoint; //массив для хранения точек begin FChart.Canvas.Pen.Color:=clred; // цвет окантовки FChart.Canvas.Brush.Color:=clgreen; // цвет фона
// задаю размеры указаеля x1:=10; y1:=10; x2:=20; y2:=27; x3:=30; y3:=10; // конец задания размеров указателя
ptCursor[0].X:=x1; ptCursor[0].Y:=y1; //заполняю массив точками для прорисовки ptCursor[1].X:=x2; ptCursor[1].Y:=y2; ptCursor[2].X:=x3; ptCursor[2].Y:=y3;
FChart.Canvas.Polygon(ptCursor); // рисую указатель FChart.Canvas.DoVertLine(x2,y2,FChart.Height); //рисую вертикальную линию
FChart.Canvas.Font.Height:=(y2-y1)-5; // высота шрифта FChart.Canvas.Font.Style:=[fsBold]; // стиль шрифта - жирный FChart.Canvas.Font.Color:=clNone; // цвет шрифта FChart.Canvas.TextOut(x2-2,y1+1,'1'); end;
end.
-
Боюсь что у вас ничего не получится. Это всё потому, что ваша метка будет пытаться рисовать несто на другом компоненте. Вопрос, в какой момент времении понадобится перерисовать это Нечто ??? Как ваша метка узнает о том что уже пришло это время ? Когда будет вызываться метод DrawMet. Почитайте тут, была попытка рисовать на чужом контроле http://pda.delphimaster.net/?id=1157851665&n=12
|