Конференция "Компоненты" » Свойство типа TStrings [D7]
 
  • кгшзх © (20.08.15 11:36) [20]
    раз:
    property DropDownList : TTSTDropDownList read FDropDownList write SetDropDownList;

    два:
    procedure TTSTPanel.SetDropDownList(const Value: TTSTDropDownList);
    begin
    FDropDownList := Value;
    end;


    какая магия при чтении панели из дфм должна вызвать SetItemList, если ты сам этого не сделал?
  • кгшзх © (20.08.15 11:37) [21]
    Удалено модератором
  • r00xus © (20.08.15 11:42) [22]
    а какая магия тогда вызывает SetActive????? который тоже метод TTSTDropDownList скопируй код поставь breakpoint в SetActive и программа там остановиться. а в SetItemList нет. объясни это гений блин :)
  • кгшзх © (20.08.15 11:46) [23]
    Удалено модератором
  • r00xus © (20.08.15 11:52) [24]
    TTSTDropDownList = class(TPersistent)
    ...
    published
      property Active : Boolean read FActive write SetActive;
      property ItemList : TStrings read FItemList write SetItemList;
    end;

    гений, обрати пожалуйста внимание, что и Active и ItemList это published свойства TTSTDropDownList а не панели :)))))
  • кгшзх © (20.08.15 13:03) [25]
    Ты наконец уже обрати внимание, умник, что в дфм лежат компоненты формы.
    а на форме лежит панель, а не твой драный дропдаунлист.
    он всего лишь свойство у панели.

    вот если бы на форме  лежал сам TTSTDropDownList тогда и был бы тебе вызов SetItemList при загрузке из дфм.

    хотя кому я это говорю.....
  • r00xus © (20.08.15 13:20) [26]
    Удалено модератором
  • кгшзх © (20.08.15 13:54) [27]
    procedure TTSTDropDownList.SetActive(const Value: Boolean);
    begin
    ShowMessage('вызван TTSTDropDownList.SetActive(' + VarToStr(Value) + ')'#13#10'Список итемов:' + ItemList.Text);

    ShowMessage('А появится он только после того, как отработает Loaded панели. Но дятлам  это пофик. Они из чайлд-класса хотят рулить заполнением списков парента. Не имея представления ни о чем');

    FActive := Value;
    if FActive then
    begin
      FOwner.FComboBox := TComboBox.Create(FOwner);
      FOwner.FComboBox.Parent := FOwner;
      UpdateItems;
    end
    else
    begin
      if Assigned(FOwner.FComboBox) then
        FreeAndNil(FOwner.FComboBox);
    end;
    end;

  • кгшзх © (20.08.15 13:57) [28]
    причем в примере выше все паблишед уже переставлены в "правильном" порядке

    published
      property ItemList : TStrings read FItemList write SetItemList;
      property Active : Boolean read FActive write SetActive default False;
  • кгшзх © (20.08.15 14:08) [29]
    TTSTPanel = class(TCustomPanel)
    .....
    procedure Loaded; override;
    ...

    procedure TTSTPanel.Loaded;
    begin
    inherited;
    ShowMessage('Вызван TTSTPanel.Loaded'#13#10'Списочек из дизайнтайм-редактора' + FDropDownList.ItemList.Text + #13#10'А теперь, осёл, запусти еще раз и на бумажке запиши последовательность появления всех мессаджбоксов');

    end;
  • DimaBr © (20.08.15 15:29) [30]

    > 1. Почему если я ставлю breakpoint-ы в методе SetActive
    > и SetItemList то при запуске программы breakpoint срабатывает
    > только в SetActive. Ведь оба значения этих свойств по идее
    > грузятся из DFM если они не установлены в значения по умолчанию.

    Потому что вы не читали то что я вам написал, особенно пункт № 4. Методы SET для классов присваиваются при НАЗНАЧЕНИИ свойствам новых ВНЕШНИХ классов.
    Если я в коде напишу так, то сработает SetItemList
    var SL: TStringList;
    begin
     SL := TStringList.Create;
     TSTPanel.DropDownList.ItemList := SL;




    > 2. Насколько я понял порядок загрузки свойств из DFM аналогичен
    > алфавитному порядку их имен (я сделал свойство AA и оно
    > загрузилось раньше Active). Возможно ли как-то изменить
    > этот порядок? При определении свойства можно указать index,
    >  но это вроде не для этого. Как поменять порядок?

    Загрузки из DFM происходит в том порядке, в котором в DFM хранятся данные. А вот сохраняются они туда в том порядке, в котором расположены в описании.
    TTest = class(TComponent)
     published
        property AAA: integer;
        property BBB: string;
    end;
    // в DFM сохранится свойство ААА, а за ним свойство BBB

    TTest = class(TComponent)
     published
        property BBB: string;
        property AAA: integer;
    end;
    // в DFM сохранится свойство BBB, а за ним свойство AAA

  • имя (20.10.15 17:50) [31]
    Удалено модератором
  • имя (20.10.15 19:16) [32]
    Удалено модератором
  • имя (20.10.15 20:14) [33]
    Удалено модератором
 
Конференция "Компоненты" » Свойство типа TStrings [D7]
Есть новые Нет новых   [118574   +17][b:0][p:0.001]