我想为我的应用程序创建一个搜索框。搜索框将包含两个内容:搜索字段和搜索按钮。我认为,正确的做法是将这两个组件放在一个组合框中,它将作为容纳它们的容器。我想我需要创建一个派生自TGroupBox类的类,该类在创建时将接收一个表名作为要搜索的参数。两个组件,搜索框和按钮,将成为它的子项 - 这些是它将如何运作的基本原则。
此图片说明了搜索框的外观:
这是我到目前为止所做的:
unit clsTSearchBox;
interface
uses Classes, SysUtils, StdCtrls, Dialogs, ADODB, DataModule;
type
TSearchBox = class (TGroupBox)
constructor CreateNew(AOwner: TObject; Dummy: Integer);
end;
implementation
constructor TSearchBox.CreateNew(AOwner: TObject; Dummy: Integer);
begin
inherited;
Self.Height := 200;
Self.Width := 400;
Self.Caption := 'Test:'
end;
end.
正如你所看到的,并不多。我刚刚创建了一个从TGroupBox类派生的类。请帮助我编写正确的代码来实例化我的表单上的搜索框组件,因为我真的不知道该怎么做。我只需要用于正确创建对象的代码。
提前谢谢大家。
答案 0 :(得分:3)
如果您只是将所有3个组件放在TFrame中,在控件上添加所需的代码,然后实例化框架的实例,这听起来似乎更容易。
然后框架保持组框,编辑和&按钮。您只需使用TYourFrame.Create创建框架,或者在设计时执行此操作。
答案 1 :(得分:2)
您的群组框看起来像这样:
type
TSearchBox = class(TGroupBox)
private
FSearchEdit: TEdit;
FFindButton: TButton;
public
constructor Create(AOwner: TComponent); override;
end;
对于TComponent
后代,您通常应该覆盖名为Create
的虚拟构造函数。这将允许您的组件由流框架实例化。
实现如下:
constructor TSearchBox.Create(AOwner: TComponent);
begin
inherited;
FSearchEdit := TEdit.Create(Self);
FSearchEdit.Parent := Self;
FSearchEdit.SetBounds(...);//set position and size here
FFindButton := TButton.Create(Self);
FFindButton.Parent := Self;
FFindButton.SetBounds(...);//set position and size here
end;
最重要的一课可能是您必须设置动态创建的控件的Parent
属性。这需要强制底层窗口的父/子关系。
为了在运行时创建其中一个,你可以这样编码:
FSearchBox := TSearchBox.Create(Self);
FSearchBox.Parent := BookTabSheet;
FSearchBox.SetBounds(...);//set position and size here
此代码将在表单的构造函数或OnCreate
事件中运行。
我相信你现在得到了基本的想法。