Конференция "Компоненты" » Обработка событий компонента [D7, WinME, Win2k, WinXP]
 
  • impuls (04.03.07 05:20) [0]
    Создаю свой компонент. ОН должен представлять из себя метку, как элемент управления,  на графике 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.
  • DimaBr (05.03.07 09:55) [1]
    Боюсь что у вас ничего не получится. Это всё потому, что ваша метка будет пытаться рисовать несто на другом компоненте.
    Вопрос, в какой момент времении понадобится перерисовать это Нечто ??? Как ваша метка узнает о том что уже пришло это время ?
    Когда будет вызываться метод DrawMet.
    Почитайте тут, была попытка рисовать на чужом контроле
    http://pda.delphimaster.net/?id=1157851665&n=12
 
Конференция "Компоненты" » Обработка событий компонента [D7, WinME, Win2k, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0]