Een goede grap mag vrienden kosten.
Nee, dat is niet hetzelfde. Je kunt in Delphi niet zomaar RTTI aanmaken, dat doet de compiler.
Een goede grap mag vrienden kosten.
Ow, ok, ik veronderstel Delphi 7 != Delphi.Net...
Dan heb ik er eerlijk gezegd geen idee van. Als er niet zoiets als propertydescriptors bestaat moet je dan waarschijnlijk een afgeleide of wrapper class maken...
Dan heb ik er eerlijk gezegd geen idee van. Als er niet zoiets als propertydescriptors bestaat moet je dan waarschijnlijk een afgeleide of wrapper class maken...
Nee, dat is niet mogelijk. Waarom kan je het event niet published maken?
We adore chaos because we like to restore order - M.C. Escher
Property editors gebruik je toch niet om een property in de Object inspector weer te geven maar om de waarde van een bepaalde property te veranderen. De enige mogelijkheid om properties in de Object Inspector te krijgen is via published.
Of er moet een andere manier zijn om voor een bepaalde property RTTI generatie aan te swengelen. Vraag blijft natuurlijk waarom je het event bij juist dit component wilt laten zien (terwijl het er eigenlijk niet bij hoort?).Delphi help
Published members have the same visibility as public members. The difference is that runtime type information (RTTI) is generated for published members. RTTI allows an application to query the fields and properties of an object dynamically and to locate its methods. RTTI is used to access the values of properties when saving and loading form files, to display properties in the Object Inspector, and to associate specific methods (called event handlers) with specific properties (called events).
www.fendt.com | Nikon D7100 | PS5
Ik heb een component met als property LoginDlgOptions. Dat is een class TDBLoginDlgOptions, een descendant van TPersistent. Alle subproperties van die property worden netjes weergegeven.

Tot zover niets aan de hand. Het probleem bevindt zich bij de events. LoginDlgOptions heeft ook een paar published events, maar die zijn niet zichtbaar in de tree structure. Je ziet alleen een published event van DialogManager. Blijkbaar geeft de Object Inspector events niet genest aan zoals het bij de properties wel doet.

Dat het wel degelijk mogelijk is bewijst Developer Express. Hier zie je van de property PanelStyle alle events.

Dat is precies wat ik voor mijn component wil weergeven in de Object Inspector. Het probleem is echter niet de property editor, maar de truc die Developer Exptress gebruikt om de events weer te geven. De published PanelStyle property gebruiken zij om alle properties weer te geven, maar niet de events. Voor het weergeven van de events gebruiken zij een published property die PanelStyleEvents heet.
Deze oplossing wil ik niet gebruiken, omdat je dan een published event hebt die puur dient voor de weergave in de Object Inspector. Iemand die de broncode zit door te lezen vraagt zich vervolgens af wat die property eigenlijk doet (niets dus).
Nog een laatste ontdekking: het lijkt erop dat de Object Inspector alleen 'echte' events weergeeft op het tabblad met events en dat hij niet te bewegen is om daar classes weer te geven.

Tot zover niets aan de hand. Het probleem bevindt zich bij de events. LoginDlgOptions heeft ook een paar published events, maar die zijn niet zichtbaar in de tree structure. Je ziet alleen een published event van DialogManager. Blijkbaar geeft de Object Inspector events niet genest aan zoals het bij de properties wel doet.

Dat het wel degelijk mogelijk is bewijst Developer Express. Hier zie je van de property PanelStyle alle events.

Dat is precies wat ik voor mijn component wil weergeven in de Object Inspector. Het probleem is echter niet de property editor, maar de truc die Developer Exptress gebruikt om de events weer te geven. De published PanelStyle property gebruiken zij om alle properties weer te geven, maar niet de events. Voor het weergeven van de events gebruiken zij een published property die PanelStyleEvents heet.
Delphi:
PanelStyleEvents wordt in de Object Inspector bij de events weergegeven, omdat het ook daadwerkelijk een event is (TNotifyEvent). Vervolgens haalt de property editor van PanelStyleEvents wat smerige trucjes uit; zo geeft hij als naam niet PanelStyleEvents weer maar PanelStyle en als waarde niet (TNotifyEvent) maar (TdxStatusBarTextPanelStyle). Het lijkt daardoor alsof je de events van PanelStyle ziet, maar eigenlijk zie je events die kunstmatig worden weergegeven als subproperties van een event!1
2
3
4
5
6
7
8
| type TPanels = class(TCollectionItem) ... published PanelStyle: TdxStatusBarTextPanelStyle read FPanelStyle write SetPanelStyle; PanelStyleEvents: TNotifyEvent read FPanelStyleEvents write FPanelStyleEvents; end; |
Deze oplossing wil ik niet gebruiken, omdat je dan een published event hebt die puur dient voor de weergave in de Object Inspector. Iemand die de broncode zit door te lezen vraagt zich vervolgens af wat die property eigenlijk doet (niets dus).
Nog een laatste ontdekking: het lijkt erop dat de Object Inspector alleen 'echte' events weergeeft op het tabblad met events en dat hij niet te bewegen is om daar classes weer te geven.
Een goede grap mag vrienden kosten.
Developer Express heeft dit zo opgelost omdat het niet anders kan. Als je dit niet wilt, is het gewoon niet mogelijk.
Je zou alle event kunnen wrappen in je hoofdcomponent, maar dat is m.i. echt smerig. Je maakt dan events van subitems onderdeel van je hoofditem.
Je zou alle event kunnen wrappen in je hoofdcomponent, maar dat is m.i. echt smerig. Je maakt dan events van subitems onderdeel van je hoofditem.
Pagina: 1