komplexe VCL-Komponenten selbst erstellen (war: VCL-Komponenten)



  • Hallo zusammen

    Ich möchte eigene VCL-Komponenten entwickeln und habe dazu ein paar Fragen. Die Hilfetexte sowie weitere Anleitungen im Internet habe ich dazu schon gelesen bzw. überflogen. Trotzdem ist für mich noch nicht alles soweit klar.

    Gibt es Einschränkungen für grafische Elemente was die Komplexität angeht? Oder wäre es sogar theoretisch möglich, dass ich aus meiner kompletten GUI eine einzelne Komponente erstelle (der Sinn dahinter sei erst mal egal)? Kann es solche Komponente auch direkt das Anfangsformular sein, was bei Programmstart direkt angezeigt wird?

    Wenn eine von mir entwickelte Komponente eine DLL nutzen soll, wie kann ich das für den späteren Entwickler problemlos umsetzen? Da in eigenen Projekten die DLL im gleichen Verzeichnis wie die EXE liegen muss, dürfte es doch schwierig werden, da der Benutzer dieses von Hand kopieren müsste. Oder gibt es da eine galantere Lösung?

    Kann eine VCL-Komponente auch mehrere Klassen beinhalten, um z.B. interne Daten besser vorhalten und verarbeiten zu können? Und wenn ein solcher Typ bzw. eine solche Klasse auch als Eigenschaft verfügbar sein soll, wie ist das realisierbar?

    Ich weiß, dass diese Fragen wohl kaum einfach und schnell zu beantworten sind. Daher würde es mir reichen, wenn eine grobe Erklärung erfolgt. Da ich eh noch in der Planungsphase bin, ist die genaue technische Umsetzung momentan noch nicht so wichtig.

    Ich hoffe, dass mir hier jemand meine Fragen beantworten kann.

    mfG
    DarkGuardian

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Hallo

    Gibt es Einschränkungen für grafische Elemente was die Komplexität angeht? Oder wäre es sogar theoretisch möglich, dass ich aus meiner kompletten GUI eine einzelne Komponente erstelle (der Sinn dahinter sei erst mal egal)? Kann es solche Komponente auch direkt das Anfangsformular sein, was bei Programmstart direkt angezeigt wird?

    Nein, die maximale Komplexität ist nur von Programmierfähigkeiten, den WinAPI-Möglichkeiten und den Rechneressourcen abhängig. 😉

    Da auch Forms als Komponenten betrachtet werden können (Siehe TOpenDialog), kannst du auch Forms wiederverwenden und parametriesieren.
    Willst du eine völlig eigenständige Komponente für den direkten Gebrauch in einen Form erstellen, hast du diese Ausgangsmöglichkeiten :
    - TComponent : Für nichtvisuelle Komponenten
    - TControl : Für visuelle Kompenten
    - TFrame : Für komplexe Komponentensammlungen

    Wenn eine von mir entwickelte Komponente eine DLL nutzen soll, wie kann ich das für den späteren Entwickler problemlos umsetzen? Da in eigenen Projekten die DLL im gleichen Verzeichnis wie die EXE liegen muss, dürfte es doch schwierig werden, da der Benutzer dieses von Hand kopieren müsste. Oder gibt es da eine galantere Lösung?

    Natürlich muß die DLL auf jedem Rechner vorhanden sein, wo das Programm laufen soll. Dafür gibt es Setup-Skripts, und auch Tools die ganze Installationsdateien erstellen, zum Beispeil InnoSetup.

    Kann eine VCL-Komponente auch mehrere Klassen beinhalten, um z.B. interne Daten besser vorhalten und verarbeiten zu können? Und wenn ein solcher Typ bzw. eine solche Klasse auch als Eigenschaft verfügbar sein soll, wie ist das realisierbar?

    Auch VCL-Komponenten sind vollständige Klassen, du kannst also diese erweitern wie du willst.
    Um dann im Objektinspektor diese Eigenschaft manipulieren zu können, must du allerdings noch die VCL-spezifischen Properties anwenden.

    Ein guter Überblick und Einstieg sowohl in Komponentenerstellung als auch in DLL-Erstellung findest du in unserem Tutorial.

    bis bald
    akari



  • Vielen Dank für deine schnelle Antwort. Aber zu einem Punkt habe ich weitere Fragen:

    Auch VCL-Komponenten sind vollständige Klassen, du kannst also diese erweitern wie du willst.
    Um dann im Objektinspektor diese Eigenschaft manipulieren zu können, must du allerdings noch die VCL-spezifischen Properties anwenden.

    Wenn ich nun meiner Komponente eine Eigenschaft vom Typ "Datencontainer" geben will und ich diesen Typ selbst geschrieben habe (also sonst nicht bekannt ist), wie kann ich dieses möglichst einfach für andere Entwickler umsetzen? Wo müssen die Resourcen (welchen Typ auch immer) des neuen Datentyps liegen, damit die Komponente einfach per Drag&Drop nutzbar wird? Und wie kann ich das so umsetzen, dass die Funktion auch in der endgütligen Software enthalten ist (geht das nur über DLLs oder gibt es die Möglichkeit, dass BCB die Sourcen direkt mit in die EXE umsetzt)?



  • Hallo

    Grundsätzlich geht das. Soll der Komponentmember nur für internen "Quellcode-Gebrauch" sein, brauchst du keine speziellen Anpassungen. Erst wenn zur Entwurfszeit dieser Member noch im Objektinspektor manipuliert werden soll, must du spezielle VCL-Properties (deutsch : Eigenschaft) um den Member drumherumbauen.
    Ist der Typ kein einfacher, bereits unterstützer Typ wie int, AnsiString oder "Pointer auf Komponente"... must du eventuell noch einen entsprechenden Dialog für die Entwurfszeit einbauen. Das ist aber schon recht komplex, da solltest du besser mit einfacheren Sachen anfangen.

    Du must unterscheiden zwischen der Komponente im Quellcode und der kompilierten Komponente in der EXE.
    Den Quellcode einer neuen Komponente kannst du grundsätzlich direkt in einem Projekt integrieren, hast aber dann keine Entwurfszeit-Kontrolle. Dazu must du den Quellcode der Komponente in ein Package packen, was aber die IDE des Builders fast automatisiert (steht auch im Tutorial).
    Bei diesen zwei Varianten ist dann die Komponente im Programm, es ist für das fertige Programm keine weitere DLL notwendig.

    Die letzte Möglichkeit ist es, auch den Quellcode der Komponente in eine DLL auszulagern. Dann muß natürlich die kompilierte DLL auch dem kompiliertem Programm mitgegeben werden, und Entwickler die diese Komponente einsetzen wollen brauchen die Headerdateien.

    bis bald
    akari



  • Vielen Dank, das klingt doch schon mal vielversprechend. Dann werde ich mich mal mit dem Tutorial beschäftigen, welches du verlinkt hast. Vielleicht klärt sich dadurch so viel, dass ich mir ein richtiges Bild zu diesem Thema machen kann.



  • Diskussion zum BCB-Tutorial abgetrennt:
    http://c-plusplus.net/forum/viewtopic-var-t-is-171134.html


Anmelden zum Antworten