就是一般的一个窗体,窗体上面放一个DbGrid就可以了,下面的代码给你参考
//就是你下拉框所显示的窗体的代码
public
function Execute(HostControl: TControl; var ItemNo: String; var ItemName: String; var UnitPrice:Double;Var Aunit:String;Var Spec:String):Boolean;
{ Public declarations }
end;var
FrmSelectProduct: TFrmSelectProduct;
-----------------------------------------------procedure AdjustDropDownForm(AControl : TControl; HostControl: TControl);
var
WorkArea: TRect;
HostP, PDelpta: TPoint;
begin
SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);
HostP := HostControl.ClientToScreen(Point(0,0));
PDelpta := AControl.ClientToScreen(Point(0,0)); AControl.Left := HostP.x;
AControl.Top := HostP.y + HostControl.Height + 1; if (AControl.Width > WorkArea.Right - WorkArea.Left) then
AControl.Width := WorkArea.Right - WorkArea.Left; if (AControl.Left + AControl.Width > WorkArea.Right) then
AControl.Left := WorkArea.Right - AControl.Width;
if (AControl.Left < WorkArea.Left) then
AControl.Left := WorkArea.Left;
if (AControl.Top + AControl.Height > WorkArea.Bottom) then
begin
if (HostP.y - WorkArea.Top > WorkArea.Bottom - HostP.y - HostControl.Height) then
AControl.Top := HostP.y - AControl.Height;
end; if (AControl.Top < WorkArea.Top) then
begin
AControl.Height := AControl.Height - (WorkArea.Top - AControl.Top);
AControl.Top := WorkArea.Top;
end; if (AControl.Top + AControl.Height > WorkArea.Bottom) then
begin
AControl.Height := WorkArea.Bottom - AControl.Top;
end;end;function TFrmSelectProduct.Execute(HostControl: TControl; var ItemNo: String; var ItemName: String; var UnitPrice:Double;Var Aunit:String;Var Spec:String):Boolean;
begin
AdjustDropDownForm(Self,HostControl);
Visible := True;
ModalResult := mrCancel;
while (Visible) do Application.ProcessMessages;
Result := False;
if ModalResult = mrOk then
begin
ItemNo := Query1.FieldByName('ItemNo').AsString;
ItemName := Query1.FieldByName('ItemName').AsString;
unitPrice:= Query1.FieldByName('CurrentPrice').AsFloat;
Aunit:=Query1.FieldByName('Unit').AsString;
Spec :=Query1.FieldByName('Spec').AsString;
Result := True;
end;
end;
然后你就可以在双击某一个文本框中的事件中引用function TFrmSelectProduct.Execute(HostControl: TControl; var ItemNo: String; var ItemName: String; var UnitPrice:Double;Var Aunit:String;Var Spec:String):Boolean;函数就可以了,其他的你自己补充
//就是你下拉框所显示的窗体的代码
public
function Execute(HostControl: TControl; var ItemNo: String; var ItemName: String; var UnitPrice:Double;Var Aunit:String;Var Spec:String):Boolean;
{ Public declarations }
end;var
FrmSelectProduct: TFrmSelectProduct;
-----------------------------------------------procedure AdjustDropDownForm(AControl : TControl; HostControl: TControl);
var
WorkArea: TRect;
HostP, PDelpta: TPoint;
begin
SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);
HostP := HostControl.ClientToScreen(Point(0,0));
PDelpta := AControl.ClientToScreen(Point(0,0)); AControl.Left := HostP.x;
AControl.Top := HostP.y + HostControl.Height + 1; if (AControl.Width > WorkArea.Right - WorkArea.Left) then
AControl.Width := WorkArea.Right - WorkArea.Left; if (AControl.Left + AControl.Width > WorkArea.Right) then
AControl.Left := WorkArea.Right - AControl.Width;
if (AControl.Left < WorkArea.Left) then
AControl.Left := WorkArea.Left;
if (AControl.Top + AControl.Height > WorkArea.Bottom) then
begin
if (HostP.y - WorkArea.Top > WorkArea.Bottom - HostP.y - HostControl.Height) then
AControl.Top := HostP.y - AControl.Height;
end; if (AControl.Top < WorkArea.Top) then
begin
AControl.Height := AControl.Height - (WorkArea.Top - AControl.Top);
AControl.Top := WorkArea.Top;
end; if (AControl.Top + AControl.Height > WorkArea.Bottom) then
begin
AControl.Height := WorkArea.Bottom - AControl.Top;
end;end;function TFrmSelectProduct.Execute(HostControl: TControl; var ItemNo: String; var ItemName: String; var UnitPrice:Double;Var Aunit:String;Var Spec:String):Boolean;
begin
AdjustDropDownForm(Self,HostControl);
Visible := True;
ModalResult := mrCancel;
while (Visible) do Application.ProcessMessages;
Result := False;
if ModalResult = mrOk then
begin
ItemNo := Query1.FieldByName('ItemNo').AsString;
ItemName := Query1.FieldByName('ItemName').AsString;
unitPrice:= Query1.FieldByName('CurrentPrice').AsFloat;
Aunit:=Query1.FieldByName('Unit').AsString;
Spec :=Query1.FieldByName('Spec').AsString;
Result := True;
end;
end;
然后你就可以在双击某一个文本框中的事件中引用function TFrmSelectProduct.Execute(HostControl: TControl; var ItemNo: String; var ItemName: String; var UnitPrice:Double;Var Aunit:String;Var Spec:String):Boolean;函数就可以了,其他的你自己补充
2,delphi自带的那个可以设计出来,
3,这个问题就很简单了
2、delphi可以做出来。
3、文本框双击事件: form2.show;
在form2的onclose事件中写:
form1.edit.text:=form2.dm1.text;