Quellcode auslagern klappt nicht richtig



  • Moin.

    Ich habe meinen 10000Zeilen Code zur übersicht in verschiedene Dateien abgelegt.
    Sprich ich habe eine TForm mit einem TPageControl und jedes TTabSheet (cpp text) in ein seperates header/source objekt gelegt.

    Compilieren klappt auch und das Programm läuft. Aber wenn ich auf eine Komponente zur Entwurfszeit klicke dann sagt er mir das er die Methode nicht finden kann.
    Muss ich jetzt damit leben oder mach ich noch was falsch?



  • Habe schon x-Versionen ohne Resultat probiert. Er will mir nicht in die Methode der Komponente springen.
    Hier mal das Ausgangsbeispiel:

    Unit1.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "test.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    

    Unit1.h

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	TButton *Button1;
    	void __fastcall Button1Click(TObject *Sender);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    test.cpp

    #include "test.h"
    #include "Unit1.h"
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	Button1->Caption="helllo world";
    }
    //---------------------------------------------------------------------------
    

    test.h

    Ich habe schon in der test.h auch void __fastcall Button1Click(TObject *Sender); deklariert. aber auch das wollte er nicht finden. Bzw auch die test.h in die Klasse inludet aber auch das juckte ihn nicht. Das muss doch gehen oder sucht er wirklich nur in der Unit.h und nirgends anders?

    Achja ich arbeite mit CBuilder5 UpdatePack1 ... gibts was aktuelleres?



  • Klick mal auf Button1 und schau mal, ob im "Objektinspektor -> Ereignisse -> OnClick" was drin steht!



  • So weit ich weiß, kann man Ereignisfunktionen nicht in andere Units auslagern.



  • @-xy-
    "Button1Click" steht da

    @Joe_M.
    Also auslagern geht doch. Es besteht nur das Problem das ich per Doppelklick auf eine Komponente nicht mehr automatisch in deren Funktion komme. Ansonsten läuft alles.



  • Man kann die Ereignisfunktionen schon auslagern, hat dann aber das beschriebene Problem. Nur der Objektinspektor kann die Funktion nicht finden, vorhanden ist sie schon (sonst würde ja der Linker meckern). Wenn du derartige Funktionen auslagern willst musst du damit leben.
    Eine andere Variante wäre, die Deklarationen und Definitionen der Ereignisfunktionen in der Hauptunit zu belassen, dort aber auf ausgelagerte Funktionen zuzugreifen.
    Allerdings finde ich weder das eine, noch das andere Konzept wiklich schön.

    Ciao


Anmelden zum Antworten