|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема при работе с динамически созданными объектами LabeledEdits
Имеется 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; Жирным шрифтом помечены главные элементы данной программы. Так вот, все замечательно, объекты создаются, onChange вызывается тогда, когда это нужно... но, есть одна караказябра.... ArrayOfFilters[indx].Text возвращяет пустое значение, не знаю почему... (( Последний раз редактировалось Admin, 14.10.2008 в 10:24. |
#2
|
|||
|
|||
Прошу простить дурака
|