Funktion von einem Formular zu einem anderen weiterleiten...



  • Hallo,

    wie kann ich "Funktionen", die in der .cpp von einzelnen Formularen von einem Programm stehen, mit dem Hauptformular verbinden ?? z.B. wenn jmd. in einem Formular ein Button drückt soll die eigentliche Button Funktion an das Hauptformular(Form1) gegeben werden.

    Habe es so versucht Form1 wird aber nicht gefunden...:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit6.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TRunderForm *RunderForm;
    //---------------------------------------------------------------------------
    __fastcall TRunderForm::TRunderForm(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TRunderForm::OKButtonClick(TObject *Sender)
    {
     if(Bla Bla)
     Form1->Komponente1->Caption = "BlaBla"; // Nur ein Beispiel
    }
    //---------------------------------------------------------------------------
    

    Wie kann ich so so etwas machen ?

    mfg
    noob



  • Hast Du auch die Headerdatei von Form1 eingebunden?



  • hallo,

    ohja danke - vergessen!



  • Hallo,

    ich habe jetzt die .h eingebunden usw und habe jetzt mal ein Versuch gemacht kommt aber folgende Fehlermeldung:

    Zugriffsverletzung bei Adresse 40106420 ind Modul 'vcl60.bpl'. Lesen von Adresse 657265B2.
    

    ???

    mfg



  • Keiner Idee ???



  • Hallo

    Auf Basis des gezeigten Codes : nein. Wir haben keine Lust zu raten.

    bis bald
    akari



  • Hallo,

    ich hab jetzt den Fehler ich hab in dem Hauptformular auch noch die Runderform.cpp included (obwohl die .h genügt) - Warum kommt eigentlich so ein Fehler wenn ich die .ccp datei in das Hauptformular include ??



  • Hallo

    Wenn du zu einer Codedatei eine Headerdatei hast solltest du immer nur die Headerdatei includen, niemals die Codedatei selber.

    Dein Fehler ist ein lustiger Folgefehler :
    In jedem Header eines VCL-Form wird ein Pointer auf so ein Form vordeklariert

    extern PACKAGE TForm1 *Form1;
    

    Das extern besagt das es diesen Pointer nur einmal im Projekt geben soll und die echte Dekalaration in der Codedatei erfolgt

    TForm1 *Form1;
    

    Dieser Projektweite Pointer wird in der Haupt-Codedatei auch mit einer gültigen Instanz besetzt, wenn in den Projektoptionen das Form als "Automatisch erzeugen" angegeben ist

    Application->CreateForm(__classid(TForm1), &Form1);
    

    In deinem Fall aber wurde durch das Zusätzliche Einbinden der Codedatei für die einbindende Übersetzungseinheit die Forward Deklaration unterlaufen. Für diese Übersetzungseinheit gibt es nun einen normalen globalen Pointer, der eigentliche projektweite ist nicht mehr erreichbar. Dieser wird nun aber niemals mit einer gültigen Instanz belegt, was dann bei jedem Zugriff die Speicherverletzung verursacht.

    bis bald
    akari


Anmelden zum Antworten