Formdesign für eine dll



  • Hallo,

    ich muss von einer dll aus eine Form öffnen. Gibt es mit Borland eine
    bessere Möglichkeit als diese von Hand zu programmieren? Also praktisch
    einen Form Editor der mit für die dll eine Form erstellt?

    bisher sieht das so aus (ungetestet):

    TForm * MyForm = new TForm(this);
    
    TButton * MyButton = new TButton(MyForm);
    MyButton->Left = 8;
    MyButton->Top = 8;
    MyButton->ParentWindow = MyForm
    MyButton->OnClick = MyButtonClick;
    
    TEdit * MyEdit = new TEdit(MyForm);
    MyEdit->ParentWindow = MyForm
    MyEdit->Left = 8;
    MyEdit->Top = 50;
    MyEdit->OnChange = MyEditChange;
    

    das ganze wird natürlich schrecklich unübersichtlich und wenn ich einmal
    etwas ändern muss gibt das ein perfektes Chaos.

    Ich weiß, dass in Resourcen auch Dialoge enthalten sein können, aber
    welcher Resource Editor kann diese erstellen? Und wie kann ich festlegen
    welche Funktionen aufgerufen werden wenn ich z.B. auf einen Knopf klicke?

    Vielen Dank schonmal!



  • Ich hoffe ich habe dich richtig verstanden.
    Du möchtest in einer DLL ein Formular aus dieser DLL verwenden.

    Dann kannst du das Formular genauso erstellen wie bei einer EXE-Datei.

    In die DLL packst du dann eine exportierte Funktion hinein die von deinem Programm aufgerufen wird darin öffnest du das Formular.

    Bsp:

    int __stdcall ShowFormFromDll(.....was man vielleicht noch so benötigt...)
    {
    //
    // Hier könnte noch was erledigt werden
    // 
    dllform=new Tdllform(Application)
    dllform->Show()/ShowModal(); //ShowModal ist wahrscheinlich besser!
    dllform->Release();
    delete dllform;
    return 7654;
    }
    


  • ja, so ähnlich hab ich mir das vorgestellt. Zuerst hab ich auch gedacht es
    funktioniert, aber irgendwie macht der nur ein neues Fenster indem nichts
    drin steht:

    TForm2 * dllform=new TForm2(Application);
    dllform->ShowModal(); 
    dllform->Release();
    delete dllform;
    return 0;
    

    die Form sieht z.B. so aus:

    class TForm2 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
        TButton *Button1;
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
        __fastcall TForm2(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm2 *Form2;
    


  • Das scheint so ähnlich zu sein wie ein Programm das ich vor kurzem geschrieben hab.
    Da hab ich ein Hauptprogramm das die DLL's lädt und eine Form der DLL auf einem Panel anzeigt.
    In der DLL steht folgendes:

    Der DLLEntryPoint:

    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    	//In einer DLL müssen die Formulare selbst erstellt werden
            //sonst wird bei der Prozeduren die auf diese Form zugreifen eine Exception augegeben
            Application->CreateForm(__classid(TfrmMain), &frmMain);
            return 1;
    }
    

    Die Funktion die vom Hauptprogramm aufgerufen wird um das Formular anzuzeigen:

    VOID __stdcall SetFormParent (HWND Handle)
    {
     SetParent(
    
        frmMain->Handle,	// Handle der Form die Im Hauptprogramm angezeigt werden soll.
        Handle 	// Dies ist das Handle des Panels das vom Hauptprogramm übergeben wird
     );
     frmMain->Align=alClient;//Formular soll sich automatisch anpassen
     frmMain->Show(); //Formular anzeigen
    }
    

    Wenn die Form nur angezeigt werden soll kann man das SetParent und Align natürlich weglassen, aber so funktioniert es bei mir(C++ Builder 6).
    Hoffe das hilft dir.

    [EDIT]Im FAQ unter Forms steht auch etwas dazu[/EDIT]



  • vielen Dank!

    Ich habs nun hinbekommen. Wenn ich etwas Luft habe in den nächsten Tagen, dann
    schreib ich mal alles zusammen.


Anmelden zum Antworten