在新建..对话框中选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.
以象控件或类一样复用.这是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.
但使用它就跟窗口不一样了,更象个容器或一个元件;
可以再放在另一个容器内,例如,放到一个窗口里或Panel1内,
动态显示也可以,只要将Frame1.Parent指向另一个容器,就显示出来
你真是高手啊,这分加定了!