Een goede grap mag vrienden kosten.
Je kan wel heel veel zaken via de OpenTools API regelen, zoals je zelf ook al had gevonden. Waaronder je eigen forms met properties. Bepalen welke componenten er op een form gemikt mogen worden. Acties ondernemen op het plaatsen van componenten. Items toevoegen bij File -> New en dan specifieke code uitvoeren. En nog veel meer. Waarschijnlijk ken je de url al, maar het is een goed beginpunt voor veel informatie over de OTA: http://www.gexperts.org/opentools/
Wat is je doel? Misschien kan het ook op een andere manier opgelost worden.
/edit
De functie RegisterCustomModule komt, denk ik, het dichtste in de buurt van wat jij wilt.
[ Voor 6% gewijzigd door LordLarry op 22-11-2003 17:21 ]
We adore chaos because we like to restore order - M.C. Escher
De OpenTools API publiceert wel hoe de IDesigner interface eruit ziet, maar niet hoe die voor TForm, TDataModule en TFrame geïmplementeerd is. Daar kom ik helaas niet verder mee. Ook die website die je noemt had ik al doorgespit, maar daar vond ik niets bruikbaars.
Een goede grap mag vrienden kosten.
Verwijderd
http://www.dream-com.com/designer.html
[ Voor 17% gewijzigd door Verwijderd op 22-11-2003 20:22 ]
Zie ook [rml][ delphi] Iets heel moeilijks met property editors[/rml]
日本!🎌
Dat is zoals ik het nu ook doe, maar ik ben er niet echt tevreden mee. Ik ben er inmiddels achter dat je dat misschien met TCustomModule (unit DesignEditors) kunt doen, maar er is nergens een voorbeeld te vinden._Thanatos_ schreef op 23 november 2003 @ 00:06:
Ik heb ook es zo'n zelfde idee gehad, maar ik los het nu maar op met frames. Bij de Execute() methode van m'n wizard geef ik een TCustomFrameClass mee en het eigenlijke wizard dialoog maakt dan dat frame aan. Dan vereis ik alleen dat mijn zelfgemaakte TWizardPageSet (een soort TNotebook) op het frame staat.
Zie ook [rml][ delphi] Iets heel moeilijks met property editors[/rml]
Een goede grap mag vrienden kosten.
Misschien kun je dit probleem overkomen door het frame (of wat je ook wilt gebruiken) een child van het owner form te laten worden en de code ook in de unit van het owner form te zetten. Maar dat laatste kan dus weleens erg lastig gaan worden. En dan rest nog steeds het probleem dat je de designer van het frame wilt oproepen...
Either way, ik denk dat het meer loont om naar een eenvoudiger alternatief te kijken, dan een misschien onnodig aantal uren gaat stoppen in iets als dit. Maarja, zelf weten natuurlijk
日本!🎌
Dat is runtime. Wij praten hier over designtime. Je zou dit component wel in je designtime code kunnen gooien, maar ik neem aan dat tomatoman gewoon de Delphi IDE dingen wil gebruiken en niet twee object inspectors en twee component pallettes.Verwijderd schreef op 22 november 2003 @ 20:21:
Kijk 's naar DreamDesigner, die kan je wel integreren in je component denk ik. MOet je er ff een property editor om heen wrappen.
http://www.dream-com.com/designer.html
We adore chaos because we like to restore order - M.C. Escher
Wij zijn geen open-source bedrijf, maar als je het heel graag wilt kan ik even de directie vragen. Dan vraag ik of ik een voorbeeldje mag posten.
Siditamentis astuentis pactum.
We adore chaos because we like to restore order - M.C. Escher
Runtime natuurlijk.LordLarry schreef op 23 november 2003 @ 18:00:
Maar is dat runtime of ook echt designtime in de Delphi IDE?
Wil je dan design-time je een design maken in je designer-component? Is dat nou echt nodig? (Ik kan me namelijk niet voorstellen dat tekstverwerker-programmeurs design time in hun tekstverwerker willen typen. ) Nouja.. eigenlijk willen ze dat wel: dan hoef je niet steeds te compileren :-D Maar ga met dit soort wensen niet richting een ge-interpreteerde taal?
Siditamentis astuentis pactum.
Met deze methode is het mogelijk om een afgeleide te maken van TDataModule of TForm en zelf je eigen DesignTime gedrag, properties en events toe te voegen.How can I add published properties to a TForm descendent?
- Add published properties to a regular TForm
- Add the form to the Object Repository (Project menu)
- Add the form to an existing design time package (such as Borland User Components) or to a new design-time package.
- Add DsgnIntf/DesignIntf to the implementation uses clause of some unit in the package, and add a register procedure as follows:
Delphi:
1 2 3 4 procedure Register; begin RegisterCustomModule(TMyForm, TCustomModule); end;
- Finally, inherit from your form in the repository inside a project and the new published properties will show up.
Wellicht dat je idd ook van TCustomModule zou kunnen afleiden, maar dan moet je wel eerst zien te achterhalen welke functies wat doen en welke je kan overriden. Het is namelijk ongedocumenteerd gebied
We adore chaos because we like to restore order - M.C. Escher
Simpel gezegt wil Tomatoman designtime zijn wizard opmaken alsof je met een gewoon form bezig bent, maar kennelijk kan dat niet als TComponent, maar moet het als TForm.Varienaja schreef op 23 november 2003 @ 18:22:
Runtime natuurlijk.
Wil je dan design-time je een design maken in je designer-component? Is dat nou echt nodig? (Ik kan me namelijk niet voorstellen dat tekstverwerker-programmeurs design time in hun tekstverwerker willen typen. ) Nouja.. eigenlijk willen ze dat wel: dan hoef je niet steeds te compileren :-D Maar ga met dit soort wensen niet richting een ge-interpreteerde taal?
We adore chaos because we like to restore order - M.C. Escher
Voor wie een werkend voorbeeld van de wizard wil zien of de source code wil bekijken: zie hier (316 kB).
De code zit zodanig in elkaar dat de wizard bestaat uit een window dat met een rijtje API calls door Windows wordt gemaakt. Voor iedere wizardpagina zet ik daar een TForm op en op dat form kan weer een frame worden gezet. Op dit moment is de TForm verborgen in de code en kun via property's instellen welke frame class moet worden gebruikt voor een wizardpagina. De pagina wordt dan runtime gecreëerd, uitgaande van de frame class die je via een property hebt ingesteld.
Het voordeel daarvan is dat je in design time een frame kunt bouwen zoals je van Delphi gewend bent. Ik weet alleen niet hoe je in design time een frame class aan een property moet toekennen en al helemaal niet hoe je dan ook nog in design time het eindresultaat in de werkende wizard kunt laten zien.
Op dit moment doe ik het (runtime) als volgt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| { de volgende code uitvoeren VOORDAT de wizard wordt getoond } var Page: TDialogPage; // dit is een wizardpagina begin { 1 wizardpagina toevoegen. Let op: Het frame op de wizardpagina wordt pas gecreeerd op het moment dat de wizard wordt getoond. } with Wizard do begin Page := Pages.Add; Page.PageType := ptWelcome; Page.Title := 'Dit is de welkomstpagina'; Page.FrameClass := TMijnFrame; end; end; |
- TWizard is een descendant van TComponent.
- TDialogPage (een wizard-pagina) is een TCollectionItem. Alle dialogpages tezamen (een TCollection) zijn een property van TWizard.
- Een TDialogPage heeft onder andere een property FrameClass van het type TCustomFrameClass. Hier zou je in design-time een frame moeten selecteren. Helaas geeft Delphi deze (published) property niet eens weer! Blijkbaar weet de IDE zich hier geen raad mee.

Opmerking: eigenlijk zijn die frames niet nodig, want dat frame komt op een TForm te staan. Maar ja, zonder frame verplaatst het probleem zich naar het form.
Sorry voor dit lange verhaal,
[ Voor 1% gewijzigd door Tomatoman op 24-11-2003 02:51 . Reden: ab[i]r[/i]acadabra ]
Een goede grap mag vrienden kosten.
Ik denk dat je via de OTA wel een lijst van frames kan achterhalen door alle files van het project te doorlopen en te kijken of het een frame is. Als je deze lijst in een combobox wilt tonen in de object inspector zal je een eigen property editor moeten maken. Zie de Source\ToolsAPI dir voor standaard VCL property editor voorbeelden.
We adore chaos because we like to restore order - M.C. Escher