| Структура программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Как узнать обьект?, Как узнать обьект? Вопрос о TThread, Одновременные процессы TAction - несколько горячих клавиш TAction - области "видимости" Совместная разработка приложений, Какое лучше использовать средство? Разрушение компонента ПОМОГИТЕ плз, Языки программирования ПОМОГИТЕ , ПОЖАЛУЙСТА, КАК ЧЕРЕЗ ПАСКАЛЬ УПРАВЛЯТЬ ПОРТОМ Edit на MainMenu, как разместить Смена шрифтов в редакторе Делфи, надоел Courier New Из чего сделаны типы, на мето языках??? Сколько работала программа? Debug Dll, Как отдебажить библиотеку сканирование файла как сделать taskbar прозрачным? (-) Как узнать размер директории?, Может быть есть отдельная функция? Как выйти из for цикла? Вращения эллипса вокруг точки, Вращения эллипса вокруг точки Языки и раскладки..., Где найти раскладки разных языков? О разных версиях операционных систем! COM порт, слежение Помогите перекодировать Crystal Reports 8.5 О локалке! Как Вы относитесь к курящим девушкам? Вопрос по поводу свернуть прогу в system tray, подскажите! Мистика в компиляторе Delphi JPEG в BLOB, Есть необходимость хранить JPEG в BLOB Указатель на поле записи, Как сделать? О сохранении иконки, Не могу добиться сохранения иконки Delphi+Excel, Решение задач линейного программирования Представление строк Как отследить с какими парамами запущен процесс Прямые преобразования, RTTI Присвоение события в run-time Функция TypeInfo, Опять объектное ориентирование... Объявить класс в DLL? Работа с объектами в DLL Вызов методов предков, Вопрос по объектному ориентированию... Помогите плиз!!! Вызов BPL Операторы As, Is Предлагаю решение как сохранить иконку 256 цветов, Сохранение 256-цветной иконки программа в виде справки А можно ли высоту TComboBox сделать менее 21. Спаренные кнопки !!!, Как изменять величину на нецелое значени Грызуны, Скрытные грызуны По поводу *.dcu В чем ошибка? Поиск окон, Z-order Замена названия окон Читаем значение реестра с помощью RegOpenKeyEx. Снова не могу поймать MM_MCINOTIFY. Delphi между Excel и Oracle8i, Проблема Ошибка в функции..., Хелп ID Процесса Как переключить в RichEdit Charset?, Как в программе на Дельфи изменит CharSe WinAmp Директивы вызовов функций, Может кто объяснит обход дерева Ссылка на MDI окно, Как сделать чтобы фрма предавалась в про Com-port, чтение - запись Управление OpenOffice (StarOffice) из Delphi Delphi and DBF Ошибка соединения с сервером Как вывести диалоги свойств следующих вещей: Обработка нажатия мыши Delphi6: 1251 -> 866 - как?, :-) - не нашел по этой теме! FindComponent, Проблема использования Hook, запретить что-нть. |
Платные хостинги Раскрутка сайта Книги по программированию Прямые преобразования, RTTI
- Тут Вит запостил на мой взгляд очень интересные темы. Решил я с RTTI тоже по-экспериментировать и вот что у меня получилось (хотя для кого-то это все равно, что Америку открыть, для меня - нет). Прошу пояснить как же так получается?Вот код:procedure TForm1.Button2Click(Sender: TObject);begin TEdit(Button1).Color:=clred; edit1.Color:=TEdit(Button1).Color;end; Получается, что Button1 хранит значение св-ва Color (причем вместо TEdit во второй строке можно TLabel написать), а у него такого св-ва нету... Мало того, если, например, добавить еще одну кнопку (Button3) и написать Button3:=Button1 то происходит "передача" св-ва колор. Если в кратце не получиться, то хоть ссылку... - TEdit и TButton - наследники TControl, в котором вводится свойство Color (на этом этапе иерархии оно скрыто). Некоторые наследники делают его видимым, но имеется и хранится оно у всех детей по одному адресу (новые поля у наследников добавляются в конец) - Ну нет и нет. Просто в тех книгах что у меня есть в разделе про RTTI такие операции как TEdit(TSomeObject) описывались как аналог AS. Или может я читал не внимательно Что значит "испортишь объект"? А если, как написано выше Button3:=Button1, я и его "испорчу"? - Что-то обычно я не встречал запорченных объектов ни после TClass1(class2) ни после class2 as TClass1. Обычно преобразования проходят если свойство происходит от общего предка (даже если его проявление "заблокировано" в потомках), и ничего страшного не происходит - например можно поменять Caption у объекта TEdit - и оно поменяется! - если сделать Docking TEdit то заголовок "докированной" формы будет именно тот на который поменян, а вот если типы не совместимы то хоть TClass1(class2), хоть class2 as TClass1 генерят ошибку либо "Invalid typecast" либо "Abstract Error", но не AV - Код TEdit и TButton - наследники TControl, в котором вводится свойство Color (на этом этапе иерархии оно скрыто). Некоторые наследники делают его видимым, но имеется и хранится оно у всех детей по одному адресу (новые поля у наследников добавляются в конец)highlightSyntax('delphijkwMzZ','delphi'); Само по себе насколько я помню, Color - это propeprty, так что на самом деле будет вызван какой-нибудь метод типа TEdit.SetColor, где self будет указывать на тот TButton. Сам по себе этот метод не меняет кажись никаких полей, а вызывает API на соответсвующем handle(которое храниться уже как поле в TWinControl?). Так что тут никаких данных опять таки перезаписанно не будет. Вот еще одно достоинство использования property! Шутка. - В этом случае скажем еще раз: в Delphi переменная типа класса является указателем! Адрес ты этому указателю и задаешь, вызывая класс функцию Create, которая динамически создает объект, и возвращает указатель на этот объект. - Спасибо, довольно исчерпывающе. Особенно про частные случаи. А то сразу - испортишь! в холодильнике хранить надо! Еще раз всем спасибо. |