Примечание : Вероятно, это выстрел в темноте, и это просто из любопытства, о котором я спрашиваю.
При использовании элемента управления ImageList из библиотеки Microsoft Common Control (mscomctl.ocx) я обнаружил, что VB6 генерирует код FRM, который не разрешается в имена реальных свойств / методов, и мне любопытно, как выполняется разрешение. Пример сгенерированного кода FRM приведен ниже с ImageList, содержащим 3 изображения:
Begin MSComctlLib.ImageList ImageList1
BackColor = -2147483643
ImageWidth = 100
ImageHeight = 45
MaskColor = 12632256
BeginProperty Images {2C247F25-8591-11D1-B16A-00C0F0283628}
NumListImages = 3
BeginProperty ListImage1 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "Form1.frx":0054
Key = ""
EndProperty
BeginProperty ListImage2 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "Form1.frx":3562
Key = ""
EndProperty
BeginProperty ListImage3 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "Form1.frx":6A70
Key = ""
EndProperty
EndProperty
End
Исходя из моего опыта, тег BeginProperty обычно означает, что присваивается составное свойство (объект), например объект Font большинства элементов управления, например:
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 10950
ClientLeft = 60
ClientTop = 450
ClientWidth = 7215
BeginProperty Font
Name = "MS Serif"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = -1 'True
Strikethrough = 0 'False
EndProperty
End
Который легко увидеть, чтобы разрешить в VB.Form.Font. <Имя свойства>.
В ImageList отсутствует свойство с именем Images. GUID, связанный со свойством Images, указывает тип ListImages, который реализует интерфейс IImages. Этот тип имеет смысл, так как элемент управления ImageList имеет свойство ListImages типа IImages. Во-вторых, свойства ListImage1, ListImage2 и ListImage3 не существуют для типов IImages, но GUID, связанный с этими свойствами, указывает тип ListImage, который реализует интерфейс IImage. Этот тип также имеет смысл, так как IImages фактически является коллекцией IImage.
Что не имеет смысла для меня, так это то, как VB6 создает эти ассоциации. Как VB6 узнает, что связь между именем Images -> ListImages связана исключительно из-за связанного типа (предоставляемого GUID) - возможно, потому что это единственное свойство этого типа? Во-вторых, как он разрешает ListImage1, ListImage2 и ListImage3 в дополнения к коллекции IImages, и использует ли он метод Add? Или, может быть, свойство ControlDefault?
Возможно, VB6 обладает определенными знаниями об этом элементе управления, и логическое разрешение не существует?