Ver Mensaje Individual
  #8  
Antiguo 09-02-2012
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Reputación: 0
rounin Va por buen camino
Una manera de hacer esto es herramienta "Zoom" y herramienta "Seleccion" y
dos botones (TSpeedButton o TToolButton) por seleccionar las.

Otra manera es hacer Zoom cuando "Ctrl" o "Alt" botones estan presionado.

He hecho la ejemplo de primera manera.

Código Delphi [-]
unit main;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls,
  XYSel, Buttons;
type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TLineSeries;
    ListBox1: TListBox;
    BGetSelection: TButton;
    BSelectTool: TSpeedButton;
    BZoomTool: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure BGetSelectionClick(Sender: TObject);
    procedure Chart1AfterDraw(Sender: TObject);
    procedure Chart1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure Chart1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure BToolClick(Sender: TObject);
  private
    FSelection: TSelection;
    FMouseHandled: Boolean;
    FZoomMode: Boolean;
  public
    procedure SetZoomMode(ZoomOn: Boolean);
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  BZoomTool.GroupIndex := 1;
  BSelectTool.GroupIndex := 1;
  BSelectTool.AllowAllUp := False;
  BSelectTool.Down := True; 
  BZoomTool.OnClick := BToolClick;
  BSelectTool.OnClick := BToolClick;
  for i := 0 to 30 do
    Series1.AddXY(i, Random(i));
  SetZoomMode(False);
  Chart1.OnAfterDraw := Chart1AfterDraw;
  Chart1.OnMouseDown := Chart1MouseDown;
  Chart1.OnMouseMove := Chart1MouseMove;
  Chart1.OnMouseUp   := Chart1MouseUp;
  BGetSelection.OnClick := BGetSelectionClick;
  FSelection := TSelection.CreateEx(Self, Chart1, Series1);
end;
procedure TForm1.SetZoomMode(ZoomOn: Boolean);
begin
  FZoomMode := ZoomOn;
  if ZoomOn then
  begin
    Chart1.AllowPanning := pmBoth;
    Chart1.AllowZoom := True;
  end
  else
  begin
    Chart1.AllowPanning := pmNone;
    Chart1.AllowZoom := False;
  end;
end;
procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
  FSelection.Draw(Chart1);
end;
procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FMouseHandled := FZoomMode;
  FSelection.HandleMouse(X, Y, evMouseDown, Shift, FMouseHandled);
end;
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  FMouseHandled := FZoomMode;
  FSelection.HandleMouse(X, Y, evMouseMove, Shift, FMouseHandled);
end;
procedure TForm1.Chart1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FMouseHandled := FZoomMode;
  FSelection.HandleMouse(X, Y, evMouseUp, Shift, FMouseHandled);
end;
procedure TForm1.BGetSelectionClick(Sender: TObject);
var i, idx: Integer;
begin
  ListBox1.Items.Clear;
  for i := 0 to FSelection.Count-1 do
  begin
    idx := FSelection.Indexes[i];
    ListBox1.Items.Add(
      Format('%f  %f', [FSelection.Series.XValue[idx], FSelection.Series.YValue[idx]])
    );
  end;
end;
procedure TForm1.BToolClick(Sender: TObject);
begin
  SetZoomMode(Sender = BZoomTool);
end;
end.
Responder Con Cita