![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Классы
Алексей П © (2003-01-03 14:10:00)Подскажите, как сделать код покороче?
if (hWinControl is TrdQuickRep) then
vleProperties.Values[PropName]:=(hWinControl as TrdQuickRep).Name;
if (hWinControl is TrdQRBand) then
vleProperties.Values[PropName]:=(hWinControl as TrdQRBand).Name;
uw (2003-01-04 11:16:00) [1]Переменную использовать можно, только в твоем случае это вряд ли что-то даст. Но иногда вещь удобная.
procedure Proc(wc: TControl);
type
TCC = class of TControl;
var
cc: TCC;
n: String;
begin
cc := TWinControl;
n := (wc as cc).Name;
end;
Дело не в том, что компилятор не доверяет, а в том, что ".Name" говорит компилятору, чтобы он обратился к полю или вызвал метод доступа к полю и т.д. Если мы напишем ".abcd", то какой код он должен сгенерировать?
Юрий Зотов (2003-01-04 10:05:00) [2]Для published-свойств - RTTI. Позволяет выяснить, если у произвольного объекта свойство с заданным именем, получить или изменить его значение и т.д. См. модуль TypInfo.
Алексей П (2003-01-04 10:05:00) [3]Жаль.
А неужели нельзя после "as" переменную использовать, или директиву компилятору указать, чтобы этот момент пропускал, а то я то ведь знаю, что во всех экземплярах это свойство есть, а компилятор не доверяет.
Lord Warlock (2003-01-04 09:59:00) [4]Тут ничего не поделаешь, нужно делать как ты написал в начале
Алексей П (2003-01-04 09:57:00) [5]ну, с Name Еще такой вариант пройдет, а как быть со свойствами типа TDataSet, Caption и т.д. Которые присутствуют только в последнем классе?
Lord Warlock (2003-01-04 09:54:00) [6]Выясни общего предка этих TrdQuickRep и TrdQRBand, где еще есть Name, хотя по логике это TComponent
Алексей П (2003-01-04 09:50:00) [7]To TTCustomDelphiMaster © :-)
Я имею в виду обьединение присвоений такого рода (Экземпляры разных классов имеют некоторые однотипные свойства) за один присест.
TTCustomDelphiMaster (2003-01-03 14:13:00) [8]На 4 символа короче
vleProperties.Values[PropName]:=TrdQuickRep(hWinControl).Name;