В пакете компонентов новый компонент типа TPanel формируется не адекватно его Unit

m830
Дата: 25.06.2019 09:45:46
Создал Unit с новым компонентом типа TPanel с положенными на него объектами

unit SmtFltr;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, System.UITypes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB,
  Data.Win.ADODB, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Buttons, Vcl.Menus,Vcl.DBCtrls;

type
  TPanel1 = class(TPanel)
    Label1: TLabel;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Button3: TButton;
    Panel2: TPanel;
    CheckBox1: TCheckBox;
    FontDialog1: TFontDialog;
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure GridTitleClick(Column: TColumn);
    procedure Button3Click(Sender: TObject);
    procedure Button3KeyPress(Sender: TObject; var Key: Char);
    procedure Button3Exit(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  procedure Register;

var
  Panel1:  TPanel1;
  GrName, FldName, FldType, Fltr, FltrAdd: string;

implementation

{$R *.dfm}

procedure Register;
begin
  RegisterComponents('New7', [TPanel1]);
end;

procedure TPanel1.BitBtn1Click(Sender: TObject);
Var
  AGrid :TDBGrid;
begin
  AGrid:=Screen.ActiveForm.FindComponent(GrName) as TDBGrid;
  if Length(ComboBox1.text)>0 then
    Begin
      if AGrid.SelectedField.DataType=ftString then
        Begin
          FltrAdd:=FldName+' like %'+ComboBox1.text+'%';
        End
      else
          FltrAdd:=ComboBox1.text;
      if (CheckBox1.Checked) and (Length(Fltr)>0) then
        Fltr:=Fltr+' And '+FltrAdd
      Else
        Fltr:= FltrAdd;
      BitBtn1.Hint:='Установить фильтр '+Fltr;
      ComboBox1.Text:='';
    End;

  AGrid.DataSource.DataSet.Filter:=Fltr;
  AGrid.DataSource.DataSet.Filtered:=True;
end;

procedure TPanel1.BitBtn2Click(Sender: TObject);
...

end.


Вставляю его в существующий пакет New7 в главном меню Delphi XE3 --> Component --> Install Component ...
Компонент успешно добавляется в пакет. Пакет вместе с компонентом виден в Tool Palette.
Далее выбираю форму, куда хочу добавить новый компонент, выбираю Design закладку редактора, дважды кликаю по новому компоненту в Tool Palette и на форме появляется новый объект, состоящий ТОЛЬКО из одной панельки.
Что пошло не так?
black-manatee
Дата: 25.06.2019 09:53:38
m830,

Ваши кнопки - это просто переменные в классе. Если хотите, чтобы они показались на панели, Вы должны в конструкторе Вашей панели создать эти кнопки, и присвоить их Parent-у панель.


В любом случае, m830, поверьте, Вам не нужен новый компонент. Ну вот просто поверьте. Используйте фреймы.
aford
Дата: 25.06.2019 10:07:14
m830, можно еще шаблон панели сделать, бросаешь на нее компоненты и Component -> Create Component Template, он потом появится в панели инструментов.
DimaBr
Дата: 25.06.2019 10:20:55
Что не понятно в этом ответе ?
DimaBr
Дата: 25.06.2019 10:30:32
Вместо того, чтобы написать функцию, которая будет создавать выпадающее окно с фильтом и вызывать её на клике по гриду, вы занимаетесь изобретением компонентов, ничего не смысля в компонентостроении

function ShowFilter(Grid: TDBGrid): boolean;
var F: TFilterForm;
begin
  with TFilterForm.Create(Application) do
  try
    Result := ShowModal = 1
  finally
    Free;
  end;
end;


procedure TForm1.GridTitleClick(Column: TColumn);
begin
  ShowFilter(Column.Grid);
makhaon
Дата: 25.06.2019 11:35:59
m830,

повторюсь. посмотри статьи. вот, специально нашел твой случай:
https://compress.ru/article.aspx?id=9739
Док
Дата: 26.06.2019 00:53:16
makhaon,

ему бесплатно полные буквари выкладывают, а ты, Дим, какие-то отрывочные статейки суешь, в которых разберется только сведущий человек :)
makhaon
Дата: 26.06.2019 10:57:11
Док,

там как раз то, что ему нужно :)
автор
Реализуем конструктор в секции реализации:
DimaBr
Дата: 26.06.2019 13:54:56
Когда ТС узнает что компоненты по панельке нельзя двигать мышкой, то это будет шок
Док
Дата: 26.06.2019 14:08:51
makhaon
там как раз то, что ему нужно :)

он базовых понятий не имеет, а ты ему статейки, что и куда написать, чтоб взлетело. Потому у ТС и получается что-то вроде этого
+
Картинка с другого сайта.