Имеется MDI-Parent окно в котором создается дочернее
Код:
procedure TFrm_Main.C1Click(Sender: TObject);
var
createdForm : TFrm_Hz;
sql : String;
begin
createdForm := TFrm_Hz.Create(Application);
with createdForm do
begin
Caption := 'Справочник подсистем';
DisplayCaptions.Add('Идентификатор');
DisplayCaptions.Add('Заголовок');
FieldNames.Add('ID');
FieldNames.Add('Caption');
TableName := 'SYBSYSTEM';
count := 2;
SetLength(arrayOfFilters, Count);
CreatingArrayOfFilteres(arrayOfFilters, FieldNames, 2, createdForm.FilterPanel);
SqlView.Add('Select S.ID, S.Caption from SYBSYSTEM S');
RefreshThis(Sender);
end;
end;
В дочернем окне имеются
....
var
arrayOfFilters: array of TLabeledEdit;
....
// эта байда создает массив лэбэледэдитов
procedure TFrm_HZ.CreatingArrayOfFilteres(ourArray: array of TLabeledEdit;
captionToEdits: TStringList; count: Integer; parentObject: TWinControl);
var
indx, objLeft, objTop, objWidth, objHeight: Integer;
step, beforeTop, beforeLeft : Integer;
begin
objLeft := 0;
objTop := 0;
objWidth := parentObject.ClientWidth;
objHeight := parentObject.ClientHeight;
step := 25;
beforeTop := objTop;
beforeLeft := objLeft;
for indx := 0 to count-1 do
begin
ourArray[indx] := TLabeledEdit.Create(Application);
ourArray[indx].Parent := ParentObject;
ourArray[indx].Top := step + beforeTop;
ourArray[indx].Left := step + beforeLeft;
ourArray[indx].EditLabel.Caption := captionToEdits.Strings[indx];
ourArray[indx].OnChange := LabeledEditChange;
if (beforeLeft + step + ourArray[indx].Width * 2) > (objWidth - objLeft - step) then
begin
beforeTop := beforeTop + ourArray[indx].Height + step;
beforeLeft := objLeft;
end
else
beforeLeft := beforeLeft + ourArray[indx].Width + step;
end;
end;
// Эта байда позволяет осуществлять множественный поиск
procedure TFrm_hz.LabeledEditChange(Sender: TObject);
var
indx: Integer;
sql: String;
begin
sql := EmptyStr;
for indx := 0 to count-1 do
if ArrayOfFilters[indx].Text <> EmptyStr then
begin
if sql <> EmptyStr then
sql := sql + ' and';
sql := sql + FieldNames.Strings[indx] + ' Like ''%' + ArrayOfFilters[indx].Text + '%''';
end;
if sql = EmptyStr then
SimpleDC.Filter := EmptyStr
else
SimpleDC.Filter := sql;
end;
Admin: Пользуемся тегами для оформления кода, иначе последуют санкции.
Жирным шрифтом помечены главные элементы данной программы.
Так вот, все замечательно, объекты создаются, onChange вызывается тогда, когда это нужно... но, есть одна караказябра....
ArrayOfFilters[indx].Text возвращяет пустое значение, не знаю почему... ((