1

我想为我的应用程序创建一个搜索框。搜索框将包括两件事:一个搜索字段和一个搜索按钮。我认为,正确的做法是将这两个组件放在一个组合框中,该组合框将用作将它们容纳在里面的容器。我想我需要创建一个派生自 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 类派生的类。请帮助我编写正确的代码来实例化我的表单上的搜索框组件,因为我真的不知道该怎么做。我只需要正确创建对象的代码。

谢谢大家。

4

2 回答 2

3

如果您只是将所有 3 个组件放在一个 TFrame 中,在控件上添加您需要的任何代码,然后实例化该框架的一个实例,这听起来可能会更容易。

然后框架包含组框、编辑和按钮。您只需使用 TYourFrame.Create 创建框架或在设计时进行。

于 2013-04-24T16:51:55.330 回答
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事件中运行。

我相信你现在明白了基本的想法。

于 2013-04-24T12:21:37.970 回答