Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Komponenten mit dem Formular-Designer entwerfen

  Alt 12. Mär 2014, 14:57
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?
  Mit Zitat antworten Zitat