Mein Ziel: Ich möchte, ausgehend von einem TFrame, eine eigene
VCL-Komponente erstellen. Mit eigenen Properties und Event-Handler.
Das bekomme ich relativ flott hin und bin vom Ergebnis begeistert.
Ich glaube aber nicht, dass ich alles richtig gemacht habe, vor allem da das benutzende Projekt die .DFM-Datei des Frames im Suchpfad haben
muss.
Ich gehe so vor:
- Neue Komponente, ausgehend von TFrame erstellen, in neues Package
- Die automatisch angelegte Unit kann ich wegwerfen. Das ist eine reine Unit ohne Formular dahinter.
- Ich füge meinem "Projekt" einen VCL-Frame hinzu.
- Ich bastele den Frame so zusammen, wie ich ihn haben möchte. Event-Handler, interne Logik, alles.
- Ich füge in meiner Frame-Unit (oder einer separaten) eine Prozedur "Register" ein und registriere die Kompente so wie ich es für richtig halte
- Ich installiere die Komponente
Wenn ich meine Komponente in ein lauffähiges Projekt einbauen möchte habe ich sie jetzt wie einen TButton in der Tool-Palette und kann damit anstellen, was ich mag. Allerdings muss das Projekt den Pfad, an welchem die
DFM des Frames liegt im Suchpfad haben. Ich habe keine Ahnung warum.
Weiterhin bekomme ich beim Kompilieren einen Hinweis
Code:
[dcc32 Hinweis] H2161 Warning: Duplicate resource: Type 10 (RCDATA), ID TMYFRAME; File C:\Pfad\MyComponent\TestProject\..\MyFrameUnit.dfm resource kept; file C:\Pfad\MyComponent\MyFrameUnit.dfm resource discarded.
An den Pfaden sieht man, dass es er ein und dieselbe Datei für zwei verschiedene hält.
Ich würde mich freuen wenn mir jemand erklären kann warum das benutzende Projekt die
DFM zur Kompilierzeit kennen muss. Und ob ich den Kompilierhinweis abstellen oder beruhigt ignorieren kann. Und ob ich die Komponente dann auch im C++ Builder verwenden kann habe ich noch überhaupt nicht ausprobiert. Sollte gehen, oder?