Форум: "Основная";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
ВнизПрисвоить свойство из строки Найти похожие ветки
← →
Den303 © (2007-08-21 11:54) [0]Доброго времени суток!
Такой вопрос: есть набор свойств в текстовом виде (из xml), нужно задать свойства контрола из этого файла.
Короче, как задать свойство компонента, которое хранится в виде строки?
Рыл в сторону FindComponent, но он находит только контрол, а не его свойства.
← →
Сергей М. © (2007-08-21 11:56) [1]
> находит только контрол, а не его свойства
а какие св-ва тебя интересуют - приватные, защищенные, публичные, опубликованные ?
← →
Den303 © (2007-08-21 12:03) [2]Только публичные, грубо говоря создаю форму из xml, нужны такие вещи, как Top... Name... Сaption... Font.Style...
← →
Сергей М. © (2007-08-21 12:05) [3]
> нужны такие вещи, как Top... Name... Сaption... Font.Style
Это не публичные, а опубликованные свойства.
Для работы с оными имеется набор функций в составе typinfo.pas
← →
den303 © (2007-08-21 12:07) [4]Спасибо за разъяснения.
Какие конкретно для моего вопроса функции, не подскажете?
← →
den303 © (2007-08-21 12:11) [5]Пробую присвоить свойство через SetPropValue - ругается на Invalid Typecast :-(
← →
Сергей М. © (2007-08-21 12:11) [6]SetPropValue()
← →
Сергей М. © (2007-08-21 12:13) [7]
> ругается на Invalid Typecast
Ну а как не "ругаться", если ты, к примеру, целочисленному свойству пытаешься задать строковое значение ?)
← →
den303 © (2007-08-21 12:13) [8]Точнее, даже на Invalid Class Typecast. Не пойму, в чём дело
← →
den303 © (2007-08-21 12:18) [9]
SetPropValue((sender as TControl),ObjectsValueList.Strings.Names[ObjectsValueList.Row-1],ObjectsValueList.Strings.ValueFromIndex[ObjectsValueList.Row-1]);
Sender - TLabel
ObjectsValueList - TValueListEditor,
ObjectsValueList.Strings.Names[ObjectsValueList.Row-1] - к примеру, меняю Top, в текстовом виде нормально (надпись "Top").
ObjectsValueList.Strings.ValueFromIndex[ObjectsValueList.Row-1] - значение, в текстовом виде нормально (надпись "50").
← →
Юрий Зотов © (2007-08-21 12:18) [10]> den303 © (21.08.07 12:13) [8]
1. Определяем тип свойства (см. TypInfo).
2. Преобразуем строку в значение этого типа.
3. Вызываем SetPropValue.
← →
den303 © (2007-08-21 13:25) [11]TNX за ответы.
Нашёл (после обеда сразу голова заработала :o) ) ошибку, оказывается, Sender был TValueListEditor, недосмотрел. Всё работает, пасиб
← →
Den303 © (2007-08-21 14:30) [12]Чтоб новую ветку не создавать, кину ещё вопросец:
Как disable"ить конкретную строку в ValueListEditor?
← →
Сергей М. © (2007-08-21 15:38) [13]
> Как disable"ить конкретную строку в ValueListEditor?
Никак.
← →
den303 © (2007-08-21 15:54) [14]
> Никак.
А как у Борланда в Object Inspector получилось? Тож так хочу :o)
← →
Сергей М. © (2007-08-21 15:57) [15]
> den303 © (21.08.07 15:54) [14]
Скриншот покажи)..
← →
den303 © (2007-08-21 16:05) [16]>Сергей М. © (21.08.07 15:57) [15]
Мож выразился неправильно...
Короче, как в Object Inspector при щелчке на пункте Font, к примеру.
← →
Сергей М. © (2007-08-21 16:08) [17]
> Короче, как в Object Inspector при щелчке на пункте Font,
> к примеру.
И что там при этом заdisableно ?
Скриншот покажи ..
← →
den303 © (2007-08-21 16:18) [18]
> Сергей М. © (21.08.07 16:08) [17]
Я же сказал, что, возможно, выразился неправильно.
Переформулирую вопрос: как сделать ReadOnly конкретную строку в ValueListEditor?
← →
Сергей М. © (2007-08-21 16:18) [19]
> как сделать ReadOnly конкретную строку в ValueListEditor?
>
>
Никак.
← →
den303 © (2007-08-21 16:26) [20]>Сергей М. © (21.08.07 16:18) [19]
А в Борланде как сделали?
← →
Сергей М. © (2007-08-21 16:29) [21]
> в Борланде как сделали?
>
Сделали ЧТО ?!
Скриншот покажи)..
← →
den303 © (2007-08-21 16:47) [22]
> Сергей М. © (21.08.07 16:29) [21]
Создание скриншота вопроса den303 собственными руками. Инструкция.
1. Запускаете Delphi. К номеру версии просим не прикапываться; желательна 7 версия, как и в первоисточнике, хотя и не принципиально.
2. Помещаете Label со вкладки Standard на форму (не забудьте создать форму!).
3. Устанавливаете фокус (нет-нет, никакого отношения к фокусникам это не имеет, не стоит пытаться прикопаться к словам; это всего лишь фокус ввода) на Label (TLabel, Label1, как угодно).
4. В инспекторе объектов ставите фокус на Font. Пытаетесь ввести что нибудь. Не получается.
5. Инструкция закончена.
6. Внимание, вопрос: как сделать аналогичную функциональность? Хотя неважно, я уже клавиши перехватываю.
← →
Юрий Зотов © (2007-08-21 16:57) [23]> den303 © (21.08.07 16:47) [22]
1. Установить фокус ВВОДА на TLabel может все-таки ТОЛЬКО фокусник. К словам, конечно, прикапываться не стоит, но и употреблять ТЕРМИНЫ надо по их назначению. Или не употреблять их совсем, чтобы никого не путать.
:о)
2. В среде Delphi это делается с помощью редактора свойства (см. метод GetAttributes). Покольку в run-time среды Delphi у нас нет, то и такого способа тоже нет. Поэтому можно делать хоть перехватом клавиш, хоть как угодно еще.
← →
Плохиш © (2007-08-21 17:01) [24]ValueListEditor1.ItemProps[...].ReadOnly := true;
← →
den303 © (2007-08-21 17:06) [25]
> Юрий Зотов © (21.08.07 16:57) [23]
ОК, спасибо за замечания. Я не знаю, как по другому назвать фокус на лейбле. Он же таки есть. Конечно не фокус ввода, но фокус :o)
И вообще, к словам прикапываться не есть гуд. Мы все не боги и делаем ошибки.
> Плохиш © (21.08.07 17:01) [24]
Это пробовал, но, по какой-то причине, всё равно происходят события OnKeyDown и OnSetEditText
← →
Плохиш © (2007-08-21 17:16) [26]
> всё равно происходят события OnKeyDown и OnSetEditText
Какое это имеет отношение к куче букав из [22]?
← →
den303 © (2007-08-21 17:17) [27]
> Плохиш © (21.08.07 17:16) [26]
А это я не Вам :o)
← →
den303 © (2007-08-21 17:19) [28]
> Плохиш © (21.08.07 17:16) [26]
А это ([22]) я не Вам :o)
← →
Плохиш © (2007-08-21 17:26) [29]
> den303 © (21.08.07 17:19) [28]
ItemProps...ReadOnly реализует функциональность, описанную в [22] и нигде не говориться, что указанные события не будут активизироваться. К тому же требование о запрещении OnKeyDown вообще отражает нелицеприятным образом знания требующего основ используемого языка программирования.
← →
Юрий Зотов © (2007-08-21 18:07) [30]> den303 © (21.08.07 17:06) [25]
> как по другому назвать фокус на лейбле
Это не фокус, это выделение. Лейбл ВЫДЕЛЕН (или ВЫБРАН) в дизайнере формы. В ToolsAPI оно так и называется - SelectionList (ведь выбрать можно и несколько компонентов одновременно).
← →
Den303 © (2007-08-22 08:45) [31]> Плохиш © (21.08.07 17:26) [29]
ОК, тогда следующий вопрос: в каком обработчике "моего Object Inspector" писАть функцию изменения объекта (к примеру, изменение Caption в реальном режиме времени)? Я пишу в OnKeyDown. Приходится ведь запрещать ручками изменение и проверять в обработчике события. Неужто нет родного свойства запрета изменений?
>Юрий Зотов © (21.08.07 18:07) [30]
ОК, спасибо ещё раз, буду знать :o)
← →
Плохиш © (2007-08-22 11:22) [32]
> ОК, тогда следующий вопрос: в каком обработчике "моего Object
> Inspector" писАть функцию изменения объекта (к примеру,
> изменение Caption в реальном режиме времени)?
OnGetEditText и OnSetEditText, если включена опция goEditing или
OnSelectCell, если эта опция выключена.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.046 c