26. marts 2002 - 10:35Der er
15 kommentarer og 1 løsning
Min egen TForm som standard
Hejsa,
jeg har et brændende ønske om at lave min egen udgave af TForm, tilføje events, properties og methods, for derefter at få Delphi (5,6) til at bruge min udgave af TForm som standard. Dette vil jeg helst opnå UDEN at overskrive (eller rette i) forms.pas så jeg kan bruge den alm. TForm nogle gange.
Når jeg skaber et nyt komponent på basis af TCustomForm kommer komponentet op på paletten, og det var jo egentlig ikke meningen. Altså - en lille opskrift (skridt for skridt) hvordan jeg bærer med ad med det :-)
i øvrigt vil det være noget tåbeligt IKKE at inkludere forms, ellers kan man jo ikke længere bruge application mere, eller man skal til selv at lave en egen udgave af den også
Og forms.pas skal så lægges i dit lib-bibliotek, for ellers bliver den ikke kompileret. Du kan selv prøve at lave en syntaksfejl i forms.pas og kompilere et project der har forms i sin uses. Der vil ikke opstå en fejl. Dernæst skal du rebuilde vcl50.bpl osv. osv.
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: 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. There is also a much more complex method involving writing a module creation expert, a repository expert, and using CreateModuleEx and different streams, but is much more error-prone and for most people, has no distinct advantages.
Note that the IDE won't allow you to add both published properties and components to a custom module at the same time. The workaround is to create a form with your custom properties in a package, and then have a descendent form in the repository which adds the components you want there by default.
hatecaps >> hvorfor vil du ikke lave det på den rigtige måde, hvis du ligger og roder i din forms.pas roder du dig ud i noget snavs, hvad så næste gang der kommer en opd. osv., Den rigtige måde er noget smartere.
martin >> fordi jeg har lavet en event der burde være med i TForm under alle omstændigheder. Som det er nu har jeg en form i repository med event som property, men den kommer pine død ikke op i listen over events. Derfor er man nødt til at sige minform.minevent := (en procedure man så skal definere manuelt) og det burde ikke være sådan.
Måske finder jeg ud af at lave den form i repository så det virker, det ville selvfølgelig gi' lidt emre frihed.
type TMinForm = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } Fonbuh : tnotifyevent; public { Public declarations } published property OnBuh : Tnotifyevent read fonbuh write fonbuh; end;
var MinForm: TMinForm;
implementation
{$R *.DFM}
procedure TMinForm.FormCreate(Sender : TObject); begin if assigned(fonbuh) then begin fonbuh(sender); end; end;
end.
Denne form er gemt i repository, men når jeg vælger at arve fra den kommer OnBuh ikke med i listen over events for formen, og det er sådan set DET jeg er ude efter.
Hvis du gør som jeg skrev, så funker det som du gerne vil ha' det, det er ret nemt hvis du lige læser de 10 liner med opskriften, og jeg har testet i D5/6
Du skal compilere og installere den runtime package du har lagt din nyeform i
/Martin
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.