Formular in DLL



  • Hallo!

    Mal wieder gibt es ein kleines Problem.
    Ich habe ein Formular in eine Dll gepackt.
    Die Dll ist statisch in meine Exe gelinkt.

    In Programm rufe ich eine Funktion aus der Dll auf, die das Formular erzeugt.

    EXE:
    LadeFormular()

    DLL:
    int ... Lade Formular()
    {
    //...Hier muessen noch so ein paar Kleinigkeit erledigt werden.
    Form=new TForm(Application);
    Form->ShowModal();
    return 1;
    }

    Das Formular funktioniert auch soweit, die Frage ist nur wie bekomme ich mit das das Formular geschlossen wird. Ich müsst dann nämlich wieder ein paar Kleinigkeiten erledigen und es waere auch ganz gut wenn das Programm mitbekäme das das Formular aus der Dll geschlossen wurde.

    Danke



  • Mach dir eine neue Unit, in der du eine Klasse von TForm ableitest. Darin kannst du dann ein OnClose-Ereignis für die Form definieren. In der DLL benutzt du dann diese Klasse anstatt von TForm.



  • Hallo nochmal!

    Die zu erledigenden Kleinigkeiten könnte ich eigentlich auch im OnClose-Ereignis des vorhandenen Formulars erledigen. Das ist nicht so sehr das Problem.
    Es waere aber wie schon gesagt ganz praktisch wenn ich in der EXE bemerken wuerde ob das Formular geschlossen wurde.

    Tschuess



  • Hi,
    wie wärs mit einer Nachricht aus der DLL in dein Hauptprg ??



  • hallo barni,

    das meiste hast du schon. du brauchst dir gar keine große mühe machen und irgendwelche klassen ableiten. ergänze deinen code einfach folgendermaßen:

    int ... Lade Formular()
    {
    Form=new TForm(Application);
    Form->ShowModal(); //Bei einem modalen aufruf hält der compiler hier an und führt solange den code des "Form" aus, bis dieser verlassen wird...
    Form->Release(); //hier wurde dann form verlassen...
    return 3;
    }
    

    in deiner aufrufenden exe kannst du dann einfach:

    if (LadeFormular == 3)
    {
    //Code der auf schließen des Forms reagiert...
    ShowMessage("Form wurde entladen!");
    }
    

    und in Form kannst du ausführen was du willst, erst wenn du Form schließt, wird an der stelle "Form->Release" weitergemacht und das bekommst du durch den ausgewerteten return-wert ja mit...

    mfg
    murphy



  • Hallo nochmal!

    Prima, das war genau die einfache Lösung nach der ich gesucht hatte.
    Und gleich auch noch was gelernt (Form->Release() kannte eich noch nicht!), was will man mehr.

    Das Beste daran ist, das ein "unbekannter Softwarefehler" beim Beenden des Programmes, um den ich mich als naechstes kümmern wollte, nun auch schon weg ist.

    Danke!
    Tschues



  • OK, wenn das Fenster modal angezeigt werden soll, dann geht das so wunderbar. Sorry, hatte ich übersehen. Wenn man es allerdings "normal" anzeigen will, dann muss man der Form ein OnClose-Ereignis zuweisen.


Anmelden zum Antworten