Delphi 获取Form中数据

Delphi中其它Unite中的数据需要在uses中进行引用,但若是循环引用的话需要其中一个在implementation下用uses引用。有关循环引用在下面代码中也提供了具体的解决方法。

下面的代码将生成一个Form,使用了一个TImageList控件,定义了7个图形按钮:

unit Demo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ImgList, Buttons, GetDemoFrm;

type
  TForm1 = class(TForm)
    pnl1: TPanel;
    ilButttons: TImageList;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure SpeedButtonClick(Sender: TObject);
  public
    { Public declarations }
    getfrmdata: TButtonInfo;
    SpBtnArr: array[0..6] of TSpeedButton;
    procedure InitSpeedButton;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.InitSpeedButton;
const
  strHints: array[0..6] of string =
  ('选择', '文档', '读文档', '写文档', '删除文档', '邮件', '拷贝文档');
var
  i: Integer;
  nTop, nLeft: Integer;
  procedure SetBtnIco(index: Integer);
  var btnIndex: Integer;
  begin
    case index of
      0: btnIndex := 0; //选择
      1: btnIndex := 37; 2: btnIndex := 17; 3: btnIndex := 15; 4: btnIndex := 16; 5: btnIndex := 18;
      6: btnIndex := 19;
    else
      btnIndex := -1;
    end;
    ilButttons.GetBitmap(btnIndex, SpBtnArr[index].Glyph);
  end;
begin
  nTop := 8;
  nLeft := 12;
  for i := 0 to 6 do
  begin
    SpBtnArr[i] := TSpeedButton.Create(nil);
    SpBtnArr[i].Height := 23;
    SpBtnArr[i].Width := 36;
    SpBtnArr[i].Left := nLeft;
    SpBtnArr[i].Top := nTop;
    if (i mod 1) = 0 then
    begin
      Inc(nTop, 20);
      nLeft := 12;
    end
    else
      Inc(nLeft, 40);
    SpBtnArr[i].Flat := True;
    SpBtnArr[i].GroupIndex := 1;
    SetBtnIco(i);
    SpBtnArr[i].Parent := pnl1;
    SpBtnArr[i].ShowHint := True;
    SpBtnArr[i].Hint := strHints[i];
    SpBtnArr[i].OnClick := SpeedButtonClick;
    SpBtnArr[i].Tag := i;
  end;  

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  InitSpeedButton;
end;

procedure TForm1.SpeedButtonClick(Sender: TObject);
var
  i: Integer;
  ChoicebtnId: Integer;
  Flag: Boolean;
begin
  Flag :=
  (self.SpBtnArr[2].Down) or
    (self.SpBtnArr[3].Down) or (self.SpBtnArr[4].Down) or (self.SpBtnArr[5].Down) or
    (self.SpBtnArr[6].Down);
  getfrmdata.getBtnInfo;
end;  

end.

下面的Unit是用来获取Form中SpBtnArr这个TSpeedButtons的数组,根据其Down属性来决定对哪个按钮进行响应。在这里只是做了个简单的测试:

unit GetDemoFrm;

interface
uses
  SysUtils, Classes, Windows, Graphics, Messages, StdCtrls, Forms,
  Dialogs, Buttons;

type
  TButtonInfo = class
  private
    bflag: Boolean;
  public
    procedure getBtnInfo;
    property flag: Boolean write bflag;
  end;

implementation
uses Types, mssbs, Demo;  {为了避免循环引用错误,所在Demo在此处引入。}

procedure TButtonInfo.getBtnInfo;
var
  i: integer;
  ChoicebtnId: integer;
begin
  ChoicebtnId := -1;
  {Form1 是类TForm1的一个对象,由于引入了Demo,所以在这里可以直接调用其对象}
  for i := 0 to length(Form1.SpBtnArr) - 1 do
  begin
    if Form1.SpBtnArr[i].Down then
    begin
      ChoicebtnId := i;
      break;
    end;
  end;
  case ChoicebtnId of
    0: begin ShowMessage('选择:' + IntToStr(ChoicebtnId)); end;
    1: begin ShowMessage('文档:' + IntToStr(ChoicebtnId)); end;
    2: begin ShowMessage('读文档:' + IntToStr(ChoicebtnId)); end;
    3: begin ShowMessage('写文档:' + IntToStr(ChoicebtnId)); end;
    4: begin ShowMessage('删除文档:' + IntToStr(ChoicebtnId)); end;
    5: begin ShowMessage('邮件:' + IntToStr(ChoicebtnId)); end;
    6: begin ShowMessage('拷贝文档:' + IntToStr(ChoicebtnId)); end;
  else
    ShowMessage('error');
  end;
end;

end.

上述完成后,就可运行程序,然后就可以看到我们想要的测试结果了。

例子很简单,可以帮助初学都加深对Delphi的了解,由于我也是在学习阶段,记录一下全当是学习笔记。希望能对其它初学者有所帮助。


附上源码下载地址http://download.csdn.net/detail/welcome000yy/4488816

你可能感兴趣的:(Delphi 获取Form中数据)