本帖最后由 huboy 于 2012-08-12 21:27:18 编辑

解决方案 »

  1.   

    问题解决了。代码附上吧。代码未经整理,将就着看吧。只能说一句:DELPHI本身的代码真实博大精深(以下代码完全抄袭自DBNavigator)。  楼下的继续来接分吧。
      EBtnClick = procedure (Sender: TObject; Button: TButton) of object;
      TyHistoryLineChart = class(TChart)
      private
        FDataEdit:TsDateEdit;
        FButton:TButton;
        FOnBtnClick: EBtnClick;
        procedure ClickHandler(Sender: TObject);
      protected
        //
      public
        constructor Create(AOwner:TComponent);override;
        destructor Destroy;override;
        //procedure   Paint;   override;
        procedure   Click;   override;
        procedure BtnClick(Index: TButton); virtual;
      published
        property OnClick: EBtnClick read FOnBtnClick write FOnBtnClick;
      end;constructor TyHistoryLineChart.Create(AOwner:TComponent);
    var
      t:TLineSeries;
    begin
      inherited; // Create(AOwner);
      //
      FDataEdit := TsDateEdit.Create(nil);
      FDataEdit.Parent := self;
      FDataEdit.Top := 3;
      FDataEdit.Left := 3;
      FDataEdit.Height := 25;
      FDataEdit.Width := 90;
      FDataEdit.Text := FormatDateTime('yyyy-mm-dd',Now);
      //
      FButton := TButton.Create(nil);
      FButton.Parent := self;
      FButton.Top := 3;
      FButton.Left := 3 + 90 + 3;
      FButton.Height := 25;
      FButton.Width := 65;
      FButton.OnClick := ClickHandler;
    end;destructor TyHistoryLineChart.Destroy;
    begin
      FDataEdit.Free;
      FButton.Free;
      inherited;
    end;procedure TyHistoryLineChart.ClickHandler(Sender: TObject);
    begin
      if Sender.ClassName = 'TButton' then BtnClick(TButton(Sender)); 
    end;procedure TyHistoryLineChart.BtnClick(Index: TButton);
    begin
      if not (csDesigning in ComponentState) and Assigned(FOnBtnClick) then
        FOnBtnClick(Self, Index);
    end;
      

  2.   

    我不明白你这个是干嘛的, 向Chart里塞2个控件, 什么目的啊, 你把用途说出来, 我觉得这样做你的button都没干什么啊
      

  3.   


    目的就是将Button的Click事件Publish,,看我后面给的代码。