Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2008, 10:15
Schranz_TOTAL Schranz_TOTAL вне форума
Прохожий
 
Регистрация: 18.08.2008
Сообщения: 6
Репутация: 10
Смущение Проблема при работе с динамически созданными объектами 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;
Admin: Пользуемся тегами для оформления кода, иначе последуют санкции.

Жирным шрифтом помечены главные элементы данной программы.

Так вот, все замечательно, объекты создаются, onChange вызывается тогда, когда это нужно... но, есть одна караказябра.... ArrayOfFilters[indx].Text возвращяет пустое значение, не знаю почему... ((

Последний раз редактировалось Admin, 14.10.2008 в 10:24.
Ответить с цитированием
  #2  
Старый 15.10.2008, 09:46
Schranz_TOTAL Schranz_TOTAL вне форума
Прохожий
 
Регистрация: 18.08.2008
Сообщения: 6
Репутация: 10
По умолчанию

Прошу простить дурака
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter