Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2

Свойство типа 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]

Удалено модератором


Страницы: 1 2 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо