Войти
ПрограммированиеФорумОбщее

Вопросы по Delphi (56 стр)

Страницы: 151 52 53 54 55 56
#825
17:20, 19 ноя 2022

skalogryz
> вангую, что такое безымянный объект, на самом деле "лежит" внутри "списка"
Да, безымянный объект действительно лежит внутри поименованного, но я думал это и так очевидно. Просто сам факт что внутри именованного объекта, имя которого соответствует некоторой структуре внутри кода, можно добавлять вот такие безымянные не прибегая к перекомпиляции приложения и всё будет работать. Этот момент я и хотел уточнить.

#826
18:31, 19 ноя 2022

Вообщем, что я понял на текущий момент:
1. dfm-файл при компиляции конвертируется в очередной текстовый формат, но более компактный. В дальнейшем приложение парсит именно его.
2. Парсинг res-файлов происходит из вызова функции ReadRootComponent( nil ); То есть имя и тип корневого компонента читаются из res-файла
3. Затем происходит чтение дочерних компонентов уже внутри корневого, они от него как бы наследуются, но на уровне WinAPI, а на уровне самого Delphi, там просто линейный список этих компонентов в классе TScreen.
4. для пользовательского класса, где на компоненты указывают переменные происходит автоматическая линковка объектов, созданных при парсинге res-файла с членами этого класса. Если у объекта нет своего имени, то он просто остаётся в списке класса TScreen и ведёт себя как контрол соответствующего класса, но из пользовательского кода к нему нет явного доступа (как правило он просто не нужен).

#827
(Правка: 19:30) 19:07, 19 ноя 2022

g-cont
> значит гарантированно в массиве ClassTable не может быть двух одинаковых имён,
могут быть два одинаковых имени.
имя класса в делфи не уникально. Т.к. classname это лишь строка из 256 символов, и НЕ содержит в себе имени модуля (как это делает имя класса в шарпе).
т.е. ты в двух разных модулях можешь объявить два разных класса с одним и тем же именем.
И один может быть наследником другого....

Более того, это можно использовать для разного рода... хаков.

Например, переобъявив свой собственный класс.
Изначально:

unit Unit1;

uses ...

type
  TForm1= class
   ...
    Button1 : TButton;

добавляем свою "прослойку"...

unit Unit1;

uses ...

type
  TButton  = class(StdCtrls.TButton)
   ...
  end;
 
  TForm1= class
   ...
    Button1 : TButton;


В итоге, даже если Delphi честно дизайнила кнопочки основываясь на TButton из StdCtrls, в рантайме будут создавать объекты класса Unit1.TButton.

#828
13:07, 20 ноя 2022

О как! Получается вся эта замута с RegGroups и TClassFinder для того и нужна, чтобы выявлять разные классы с одинаковыми именем, но в разных модулях? Меня смутило что там классы группируются по какому-то признаку. Вот видимо по имени юнита.

Страницы: 151 52 53 54 55 56
ПрограммированиеФорумОбщее