在新建..对话框中选Frame建一新的Frame,你可以象窗体一样设计它,做完后,它在你的工程里就可
以象控件或类一样复用.这是Frame的特点.
若在另一个窗体中想用它,在控件面板上点Frames(在standard上)放到窗体上,出现对话框,列出
了当前工程中所有可用的Frame,选择即可.
我做了这么一个Frame,显示结构相同的表的内容,并可返回值:
.
.
type
  TFrameInput = class(TFrame)
    DBGrid1: TDBGrid;
    DSCodeName: TDataSource;
    QryCodeName: TQuery;
  private
    str_sql:string;
    { Private declarations }
  public
    procedure OfferAllCodeName(const TableName,ASpell:string);
    procedure OfferCodeNameByCode(const ACode:string);
    procedure OfferCodeNameNow(var ACode,AName:string);
    procedure MovePoint(const ADrict:string);
    { Public declarations }
  end;implementation{$R *.DFM}{ TFrameInput }procedure TFrameInput.MovePoint(const ADrict: string);
begin
if ADrict='up' then
begin
 if not QryCodeName.Bof then
        QryCodeName.Prior;
end
else if ADrict='down' then
begin
 if not QryCodeName.Eof then
        QryCodeName.Next;
end;
end;procedure TFrameInput.OfferAllCodeName(const TableName,ASpell: string);
begin
if TableName<>'' then
begin
str_sql:='select 编码,名称,简码 from '+TableName+' '+
         'where 简码 like '''+ASpell+'%'+''' order by 简码';
with QryCodeName do
begin
 close;
 sql.Clear;
 sql.add(str_sql);
 open;
 fieldbyname('编码').visible:=false;
 fieldbyname('简码').visible:=false;
end;
end;end;procedure TFrameInput.OfferCodeNameByCode(const ACode: string);
begin
if Length(ACode) <= QryCodeName.FieldByName('简码').Size then
begin
 QryCodeName.Locate('简码',ACode,[lopartialkey]);
end;
end;procedure TFrameInput.OfferCodeNameNow(var ACode, AName: string);
begin
with QryCodeName do
begin
 ACode:=fieldbyname('编码').asstring;
 AName:=fieldbyname('名称').asstring;
end;
end;end.