OnCreate bei komponenten



  • Gerhard schrieb:

    Sorry gibt es nicht.

    Schon was von Konstruktoren gehört???

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • Ja und ?
    Wo bleibt der Rest. Nun zeige mir mal wie Du den Konstruktor eines auf Deiner Form befindlichen sagen wir mal Button, welches Du zur Designzeit dort plaziert hast, aufrufst.

    Gruß
    Gerhard

    P.S. Ich glaube hingeschmissene Brocken sind in einem solchen Forum nicht sehr hilfreich



  • Ich bin kein Admin oder Moderator und kann deshalb nichts ändern, schau mal aber Dein oberes Posting an, fällt Dir da was auf? Da steht wenn ich es richtig lese ZUR LAUFZEIT.

    Wie ich es aber zur Laufzeit zum Beispiel feststellen kann ob ein Objekt (egal ob Button oder nicht) erzeugt wurde, könnte ich zum Beispiel folgendes schreiben:

    ofstream out("logging.txt");
    TMyObject::TMyObject()
    {
       out << "jetzt wurde ich erzeugt\n";
    }
    
    // zur Ergänzung
    TMyObject::~TMyObject()
    {
       out << "jetzt wurde ich gelöscht\n";
    }
    

    Mit meinem "hingeschmissenen Brocken" wollte ich Dich zum Denken anregen, anstatt dir gleich eine fertige Lösung zu präsentieren.



  • Nun mogel Dich mal nicht heraus. Ich habe geschrieben:

    "
    Wenn ich Dich richtig verstanden habe, möchtest Du zur Laufzeit, also wenn das Programm gestartet wird, wissen ann z.B. ein Button welches sich auf Deiner Form befindet, erzeugt wird. Wenn dem so ist, kann ich Dir leider nur mit einem 'Nein' antworten. Sorry gibt es nicht.
    "
    Es dreht sich also nicht um eigene Objekte, die ich zur Laufzeit erzeuge, sondern um VCL-Objekte, die auf eine Form plaziert werden. Und wo der geneigte Frager wissen will, wann diese erzeugt werden. Das war und ist meine Annahme und darauf bezieht sich meine Antwort und mein "Sorry" !Gruß

    Gruß Gerhard

    P.S. Unabhängig davon, dass ich es gerade noch schaffe einen Konstruktor geistig zu verarbeiten glaube ich auch nicht, dass Du mit Deiner ersten Antwort einen Anfänger zum Nachdenken verleiten könntest. Da wäre die zweite schon besser, die aber nicht das Problem trifft !



  • Ein VCL Beispiel funktioniert ähnlich, dazu musst Du aber von der Klasse ableiten.
    Ein Beispiel?, Bitte:

    class TMyButton : public TButton
    {
    private:
       ofstream out("ausgabe.txt";
    public:
       __fastcall TMyButton(Component * AOwner)
          : TButton(AOwner)
       {
           out << "jetzt wurde ich erstellt\n";
       };
       virtual __fastcall ~TMyButton()
       {
           out << "und jetzt gelöscht\n";
       };
    };
    

    Natürlich muss Du zunächst mit dem Komponenten Wizard einige Sachen festlegen, aber so ungefähr sieht es dann aus. Was meines Wissens nach funktionieren sollte.



  • Nochmals Sorry,

    es geht um Standard VCL Komponenten, die ich von der IDE auf meine Form plaziere. Alles andere ist mir nicht neu !

    Gruß
    Gerhard



  • Diese Komponenten kannst Du dann auch - wenn sie zu Packages zusammengefasst wurden - in ein Formular rüberziehen. Sind dann aber keine Standard VCL Komponenten. Bei diesen wird es vielleich mit OnCreate, OnDestroy funktionieren.



  • Also bIce,

    das trifft alles nicht den Kern. Selbstverständlich kann ich mir neue Packages zusammenbauen und das bei einer an sich fast perfekten RAD-Entwicklungsumgebung. Hier geht es um Komponenten, die in der IDE stehen und mit denen die meisten Entwickler arbeiten ohne die Zeit zu haben, nochmals eigene zusammenzubauen (was übrigens auch nicht immer geht).
    Ein OnCreate,OnDestroy (welches man übrigens unter C++ möglichst nicht verwenden sollte, sondern stets den Konstuktor/Destruktor) gibt es dabei nicht.
    Für mich ist damit der Thread beendet.

    Gruß
    Gerhard

    P.S.
    Noch ein Tip, aber mit Vorsicht. Es gibt Umstände, wo ich die Reihenfolge der Erzeugung der einzelnen Komponenten beeinflussen bzw. ändern möchte. Ist manchmal wichtig, wenn ein Fenster (.zB. ein Editfeld) aktiviert wird, ohne das es den Focus hat. Hierzu (aber bitte vorher sichern) den .dfm File mit dem Builder öffnen und dort die entsprechenden Änderungen vornehmen



  • Gerhard schrieb:

    Hierzu (aber bitte vorher sichern) den .dfm File mit dem Builder öffnen und dort die entsprechenden Änderungen vornehmen

    Nun tu mal nicht so, als ob das besonders schwierig oder gefährlich wäre. 😉
    Rechtsklick auf die Form, "View as text", die object-Blöcke umkopieren, "View as form" und fertig.
    Wenn du beim Kopieren einen Fehler fabriziert hast gibt's eine entsprechende Fehlermeldung.



  • Hallo Jansen,

    safety first ist eine Regel, die man immer wieder beherzigen sollte nnd bestimmt nicht um hier den Larry heraushängen zu lasse, wie toll und schwierig was ist.
    Entäuscht mich eigentlich ein wenig, was Du da als Moderator von Dir gibst.
    Ich habe mich bisher redlich bemüht in diesem Forum den einen oder anderen zu helfen und nicht in Form von "kennste das nicht?" agiert.
    Aber offenbar ist das ein Stil der hier nicht sonderlich gerfragt ist.
    In diesem Sinne wünsche ich Euch weiterhin gute Fragen und noch bessere Antworten.

    Tschüss
    Gerhard



  • Dass man seine Projektdateien einschliesslich *.dfm regelmässig sichern sollte ist doch selbstverständlich, oder sollte es sein. Ich sehe keinen Grund, bei der dfm-Datei besonders vorsichtig zu sein; bei einem Code-Beispiel schreibst du doch auch nicht "aber vorher cpp-Datei sichern"!?

    Nichts gegen deine Beiträge, aber die Tendenz, offensichtliche Gegebenheiten als vermeintlich besondere Tips darzustellen ist schon etwas irritierend.

    Im Übrigen: ein 😉 bedeutet üblicherweise, dass der davorstehende Satz nicht tierisch ernst zu nehmen ist.


Anmelden zum Antworten