Announcement

Collapse
No announcement yet.

MDI in DLL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MDI in DLL

    Ich möchte ein MDI - Child Fenster in einer Dll erzeugen,
    Die Hauptapplication ist die MDI Hauptform, ich bekomme beim erzeugen
    des Kindfenster die Fehlermeldung das keine MDI Application vorhanden
    ist. Er kann mir helfen ?

    U.Lochner [email protected]

  • #2
    Hallo,

    das Problem hat seine Ursache darin, das die EXE und die DLL nicht die gleiche <b>Application</b>-Instanz verwenden. Am einfachsten kann die Fehlermeldung umgangen werden, wenn sowohl die EXE als auch die DLL mit Runtime-Packages compiliert werden. In diesem Fall verwenden beide die gleiche (!) Application-Instanz

    Comment


    • #3
      "gleiche (!)" würde zwei bedeuten. ...verwenden beide die selbe (!) Application-Instanz

      Comment


      • #4
        Auf der Delphi-Superpage ist ein demoprogramm, mit dem mdifenster rausziehen kann.

        http://sunsite.informatik.rwth-aachen.de/delphi/

        und zwar unter Delphi 4/Apps with Source.

        Leider ist da das Problem, dass in Delphi 5 die Tab-Tasten nicht mehr funktioniere

        Comment


        • #5
          Hallo,
          ich habe hier schon sehr viel Hilfe gefunden. Danke an alle.

          Jetzt habe ich jedoch ein kniffeliges Problem. Ich habe mir den Code von der DSP herunter geladen. Mit der org. Exe und DLL funktioniert das alles einwandfrei. Wenn ich jetzt nur die DLL neu compiliere dann ist der aufruf der DLL nicht mehr möglich. Weder dyn. noch statisch.
          Ich bekomme einen "Abstract Error" und das MDI Child wird nicht angezeigt. Des weiteren wird die Host App. nicht mehr aus dem Speicher entfernt. Das hängt jedoch wahrscheinlich an der Resourcen Freigabe der DLL.

          Mach ich alles mit SDI Forms funktioniert das alles einwandfrei.

          Wenn mir hier jemand helfen könnte wäre klasse.

          Gruß
          Sascha Henne

          Comment


          • #6
            Wurden Exe und Dll mit der gleichen Delphiversion compiliert??<p>
            Schöne Grüße, Mario Noac
            Schöne Grüße, Mario

            Comment


            • #7
              Hallo Mario,

              ja. Sie wurden beide in Delphi 6 compiliert.

              Gruß

              Sascha Henne

              Comment


              • #8
                hmm, ein Gedanke wäre vielleicht noch, die Compilereinstellungen bezüglich der Laufzeitpackages zu überprüfen. Bei beiden sollte meines Wissens nach VCL eingetragen sein.<br>
                Kann es sein, dass du teilweise nur dcu-Dateien eingebunden hast und das die von einer anderen Delphi-version stammen?? Auf alle Fälle ist es eine gute Idee, in der Entwicklungsumgebung erst mal alle Formulare noch mal zu öffnen und dann nochmal alles zu erzeugen.<br>
                Aber betrachte die Vorschläge jetzt mal nicht als besonders fundiert, es sind mehr so Vorschläge zum rumstochern, wenns halt gar nicht will. Begründen könnte ich die Sachen auf Dein Problem hin, nicht sauber.<p>
                Schöne Grüße, Mario Noac
                Schöne Grüße, Mario

                Comment


                • #9
                  Das Beispiel auf DSP muß eines sein das OHNE Packages arbeitet, anders ist der Fakt das die TAB Tasten nicht mehr arbeiten nicht zu erklären. Wird die EXE und die DLL mit Packages kompiliert (min. VCL) dann treten diese Probleme nicht merh auf. Wird die DLL ohne Packages kompiliert und die Application Instance der DLL umgebogen auf die der EXE oder das Application.Handle der DLL auf die der EXE gesetzt, dann treten unschöne Fehler auf. Z.b. eben das TAB Problem usw. usw. Normalerweise sollten solche Sachen nur über Packages laufen.

                  Gruß Hage

                  Comment


                  • #10
                    Hallo zusammen,

                    ich hatte das gleiche Problem wie Ulrich und habe mir deshalb über den von Anthony geposteten Link der DSP die Demo geholt.<BR>

                    Das funktioniert nun auch sehr gut ( D7 pro ) nun habe ich aber noch das Problem dass das "importierte" Fenster nicht in der MDI-Fensterliste ( MDIChildCount ) auftaucht!<BR>

                    Da ich in meinen Apps vermeide dass mehrere Instanzen eine MDIChilds geöffnet werden indem ich das entspr. Fenster ggf. nach vorne hole habe ich hier ein Problem.<BR>

                    Im Fenster - Menü taucht das Formular übrigens schon auf!?<BR>

                    Danke für jeden Tip<BR>

                    Holger Rogg

                    Comment


                    • #11
                      P.S.<BR>

                      Über Screen.Forms taucht das Fenster auch

                      Comment


                      • #12
                        Hallo zusammen,<BR>

                        nur zur Info für evtl. auch betroffene!<BR>

                        Nachdem das MDIChild ( mein Beitrag vom 11.08 s.o. ) aus der DLL nicht in der Childliste auftauchte und auch das "Abklappern" der Screen.Forms nichts brachte habe ich die DLL-Prozedur in eine Funktion umgewandelt die als Ergebnis das erzeugte TForm zurückgibt.<BR>

                        Über try...except bringe ich nun das Form in den Vordergrund bzw. erzeuge es neu. Keine saubere aber funktionierende Lösung!<BR>

                        Sollte sich aber jemand mit der Win32API besser auskennen bzw. eine "saubere" Lösung haben würde ich mich über eine Antwort freuen!<BR>

                        Mfg Holger Rogg

                        Comment

                        Working...
                        X