⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmain2.pas

📁 股市分析K線,測試版本,可以研究修正,勿用於商業販賣
💻 PAS
字号:
unit fMain2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Menus, fDef, ExtCtrls;

const
	MAC	: array[0..5] of Integer = (5,10,30,60,120,240);
  VMAC: array[0..2] of Integer = (5,10,30);
  RSIC: array[0..1] of Integer = (5,10);

type
{ TVertLine }
	TVertLine = class(TGraphicControl)
  private
    FVisible: Boolean;
  protected
  	FPosition: Integer;
    procedure SetPosition(const Value: Integer);
  	procedure Paint; override;
  public
  	constructor Create(AOwner: TComponent); override;
  	property Position: Integer read FPosition write SetPosition;
  end;

{ TfrmMain2 }
  TfrmMain2 = class(TForm)
    GRID: TStringGrid;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    mi100: TMenuItem;
    mi101: TMenuItem;
    N3: TMenuItem;
    mi0: TMenuItem;
    mi1: TMenuItem;
    mi2: TMenuItem;
    mi3: TMenuItem;
    N041: TMenuItem;
    N051: TMenuItem;
    N061: TMenuItem;
    N071: TMenuItem;
    N081: TMenuItem;
    N091: TMenuItem;
    N101: TMenuItem;
    N111: TMenuItem;
    N121: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    Header: TStringGrid;
    miLeftOne: TMenuItem;
    miRightOne: TMenuItem;
    miPageLast: TMenuItem;
    miPageFirst: TMenuItem;
    miFirst: TMenuItem;
    miLast: TMenuItem;
    miQuickLeft: TMenuItem;
    miQuickRight: TMenuItem;
    miSizing: TMenuItem;
    N2: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    miShowKLineHighLow: TMenuItem;
    N13: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure GRIDDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    procedure mi100Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure mi0Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure HeaderDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    procedure N3Click(Sender: TObject);
    procedure miPageLastClick(Sender: TObject);
    procedure miLeftOneClick(Sender: TObject);
    procedure miRightOneClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormActivate(Sender: TObject);
    procedure miPageFirstClick(Sender: TObject);
    procedure miFirstClick(Sender: TObject);
    procedure miLastClick(Sender: TObject);
    procedure miQuickLeftClick(Sender: TObject);
    procedure miQuickRightClick(Sender: TObject);
    procedure N11Click(Sender: TObject);
  private
    FDataIndex: Integer;
    function GetDataPerPage: Integer;
    procedure SetDataIndex(Value: Integer);
  protected
  	VertLine: TVertLine;
  	ScaleHigh: array[0..3] of Single;
    ScaleLow: array[0..3] of Single;
    MA: array[0..5] of TArrayOfSingle;
    VMA: array[0..2] of TArrayOfSingle;
    RSI: array[0..1] of TArrayOfSingle;
    FStockName: string;
    FPageStart: Integer;
    FUnitWidth: Integer;
    procedure CalcMA;
    procedure CalcVMA;
    procedure CalcRSI;
    procedure DrawK(C: TCanvas; R: TRect); overload;
    procedure DrawV(C: TCanvas; R: TRect); overload;
    procedure DrawRSI(C: TCanvas; R: TRect); overload;
    procedure DrawScaleK(C: TCanvas; R: TRect);
    procedure DrawScaleV(C: TCanvas; R: TRect);
    procedure DrawLine(A: TArrayOfSingle; Color: TColor; C: TCanvas; R: TRect; High, Low: Single);
    procedure SetStockName(const Value: string);
    procedure SetPageStart(Value: Integer);
    procedure SetUnitWidth(Value: Integer);
    procedure CalcAll;
    function 	FindKLineScaleHighLow(DataFile: IDataFile; var High, Low: Single;
    	var HA, LA: TArrayOfSingle; var HIndex, LIndex: TArrayOfInteger): Boolean;
    function 	FindVLineScaleHighLow(DataFile: IDataFile; var High, Low: Single): Boolean;
    function 	PageIndex2DataIndex(Index: Integer): Integer;
    procedure DRAW_DATE_SCALE(C: TCanvas; R: TRect; ShowText: Boolean);
    procedure ITERATE_DATA(Index: Integer);
    procedure MOVE_VERTLINE(DataIndex: Integer); overload;
    function 	DataIndexToPixel(DataIndex: Integer): Integer;
    function  PixelToDataIndex(X: Integer): Integer;
    procedure CLEAR_ALL_CALCULATE_DATA();
  public
  	StkDataFile: IDataFile;
    function Fy2Iy(FY: Single; R: TRect; ScaleHigh, ScaleLow: Single): Integer;
    property StockName: string read FStockName write SetStockName;
    property PageStart: Integer read FPageStart write SetPageStart;
    property UnitWidth: Integer read FUnitWidth write SetUnitWidth;
    property DataPerPage: Integer read GetDataPerPage;
    property DataIndex: Integer read FDataIndex write SetDataIndex;
  end;

var
  frmMain2: TfrmMain2;

implementation

{$R *.dfm}

uses Math, fUtils;

procedure TfrmMain2.FormCreate(Sender: TObject);
begin
	IS_FRACTION_UNDERLINE := True;
  VertLine := TVertLine.Create(Self);
	WindowState := wsMaximized;
  FPageStart := 0;
  FDataIndex := 0;
  FUnitWidth:= 6;
  GRID.Color := clBlack;
  StockName := '00_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -