能够稍微详细点吗?关于那个"函数指针"的?俺是新人,需要锤炼.//bow

解决方案 »

  1.   

    一定要用这种方法啊?
    如:用query——
    if checkbox1.checked then
    query1.sql.add('select * from table where sex=男性')
    else if checkbox2.checked then
    query1.sql.add('select * from table where sex=女性')
    不简单啦!
      

  2.   

    //以下是我帮朋友做的分数登记的部分代码,可参考一下,我也是菜鸟。
      private
        { Private declarations }
        function classid(myid: string): string;
        procedure OnSetText(Sender: TField; const Text: string);//在这里声明
        procedure OnAdd(DataSet: TDataSet);//在这里声明
        procedure DatatoEdit;
      public
        { Public declarations }
      end;var
      studentfrm: Tstudentfrm;implementation
    uses dmu;{$R *.dfm}procedure Tstudentfrm.OnAdd(DataSet: TDataSet);//在这里实现
    begin
      if (cbjiid.ItemIndex = -1) or (cbbanid.ItemIndex = -1) then
      begin
        dm.studentdata.Cancel;
        showmessage('请选中数据');
        exit;
      end;
    end;procedure Tstudentfrm.OnSetText(Sender: TField; const Text: string);//在这里实现
    begin
      if length(text) > 2 then
      begin
        showmessage('请输入两位或以下的数字!');
        exit;
      end;  dm.query.Close;
      dm.query.SQL.Clear;
      dm.query.SQL.Add('select count(studentid) from studentinfo where studentid=''' + trim(cbbanid.Items[cbbanid.ItemIndex]) + classid(text) + '''');
      dm.query.Open;
      if dm.query.Fields[0].AsInteger <> 0 then begin
        showmessage('ID重复请重输!');
        dm.query.Close;
        exit;
      end;
      dm.query.Close;
      sender.AsString := trim(cbbanid.Items[cbbanid.ItemIndex]) + classid(text);
    end;procedure Tstudentfrm.DatatoEdit;
    begin
      with dm.studentdata do
      begin
        txtstudentid.Text := copy(fields[0].AsString, 6, 2);
        txtsname.Text := fields[1].AsString;
      end;
    end;function Tstudentfrm.classid(myid: string): string;
    begin
      case length(myid) of
        1: result := '0' + myid;
        2: result := myid;
      end;
    end;procedure Tstudentfrm.quitExecute(Sender: TObject);
    begin
      close;
    end;procedure Tstudentfrm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      dm.studentdata.Close;
    end;procedure Tstudentfrm.InsertExecute(Sender: TObject);
    begin
      dm.studentdata.Append;
    end;
    procedure Tstudentfrm.FormShow(Sender: TObject);
    begin
      dm.studentdata.AfterInsert := OnAdd;//注意了在这里指
      dm.studentdatastudentID.OnSetText := OnSetText;//注意了在这里指
      dm.studentdata.Open;
    end;procedure Tstudentfrm.CBjiidDropDown(Sender: TObject);
    begin
      try
        cbjiid.Items.Clear;
        dm.query.Close;
        dm.query.SQL.Clear;
        dm.query.SQL.Add('select id from classji');
        dm.query.Open;
        dm.query.First;
        while not dm.query.Eof do begin
          cbjiid.Items.Append(dm.query.Fields[0].asstring);
          dm.query.Next;
        end;
      finally
        dm.query.Close;
      end;
    end;procedure Tstudentfrm.editExecute(Sender: TObject);
    begin
      dm.studentdata.Edit;
    end;procedure Tstudentfrm.cbbanidDropDown(Sender: TObject);
    begin
      try
        cbbanid.Items.Clear;
        dm.query.Close;
        dm.query.SQL.Clear;
        dm.query.SQL.Add('select id from classba where id like ''' + trim(cbjiid.Text) + '%' + '''');
        dm.query.Open;
        dm.query.First;
        while not dm.query.Eof do begin
          cbbanid.Items.Append(dm.query.Fields[0].asstring);
          dm.query.Next;
        end;
      finally
        dm.query.Close;
      end;
    end;procedure Tstudentfrm.DBGrid1CellClick(Column: TColumn);
    begin
      DatatoEdit;
    end;procedure Tstudentfrm.deleteExecute(Sender: TObject);
    begin
      dm.studentdata.Delete;
    end;procedure Tstudentfrm.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if key = #13 then
        PostMessage(dbgrid1.Handle, WM_KEYDOWN, VK_TAB, 0);
    end;end.
      

  3.   

    谢谢.用query我实现没有问题.
    关键是我想了解一下我提到的那种方法.也就是你回复的那个"函数指针"问题.我不知道如果
    从一个form里面利用另外一个form或者DM里面的过程.
    先给你分再说!
      

  4.   

    用c++的语言理解一下吧
    #include "stdafx.h"
    #include<iostream.h>
    void (*fd)();
    void function()
    {
      cout<<"Hello"<<endl;
    }main (){
      fp=Function;
      fp();
      return 0;
    }
    只不过用delphi实现更加淋漓尽致
      

  5.   

    你的意思就是自己先声明一个指针变量,然后用该指针指向要调用的函数或过程的handler?(不知道是不是这样说,见笑)
      

  6.   

    纠正一下,应该是自己声明一个过程,然后用vcl的指针,指向自己的过程