Forma z dll w MDIApp

0

Witam wszystkich...
Problem jest dokładnie taki jak w temacie.
chcę w aplikacji MDI wyświetlić jako fsMDIChild formę z pliku dll
Kiedy ustawiam właściwości formy (tej w dll) na FormStyle := fsMDIChild;
wyświetla mi się błąd ;( : EInvalidOperation in module Project1.dll at 000460F7 [???]
Kiedy ustawię na fsnormal to wyświetla się oczywiście jako normalne okno...

Będę bardzo wdzięczny za pomoc [browar]

0

Teoretycznie się nie da:

http://delphi.about.com/library/weekly/aa020805a.htm

Paczki (Package) rozwiązują ten problem. Praktycznie się da (sam tak zrobiłem cały program), ale nie wolno ci używać pewnych rzeczy.

Dlaczego? Pomimo, że program i DLLka mieszczą się w tej samej pamięci mają osobne między innymi obiekty Application oraz Screen. Aby działało, przy pierwszym wywołaniu funkcji z DLL musisz przekazać te obiekty do DLL i podmienić.

Ale nie rozwiązuje to problemu, bo np.: takich obiektów jak FontManage przekazać się w ogóle nie da, bo unit'y przechowują je jako prywatne - a DLL oraz aplikacja nawet ten sam unit wgrywają osobno, przez co istnieją dwa zupełnie różne zbiory obiektów (poczytaj o tym przy paczkach, bo też tam jest to kluczowe zadanie).

Ostatecznie i tak próba zmiany czcionki w oknie DLL przez aplikację kończy się Access Violation, bo po podmianie czcionki, jeśli stara jest niepotrzebna - jest niszczona. Aplikacja usuwa starą ze swojego FontManager'a (a nie ma jej tam bo jest w DLLkowym FontManager'ze), więc wywala Access Violation.

Możesz użyć Package (trudne) albo innej metody (na około) - tworzyć MDI child jako puste okno (w ramach aplikacji) i wywołaniem funkcji z DLL tworzyć zwykłe okno z DLL i jako parent ustawiać jako uchwyt MDIChild.

0

Dzięki bardzo [browar]
Zrobię inaczej: Wstawie w MDI gołą formę a wszelkie funkcje i procedury przechowam w dll...

0

Ja mam nie tylko problem z fsMDIChild przy wyświetlaniu formularza z dll-a.
Okazuje się, że jak tworzę formularze w bibliotekach to nie wszystko mogę wówczas na nich robić. Niektóre funkcje lub komponenty nie działają poprawnie. Próbowałem do uses wpisywać właściwości te same co ma exe-k i nic nie dało.
Nie mogę sobie z tym poradzić. Co muszę wpisać w kod źródłowy, aby formularze utworzone w bibliotekach miały te same właściwości co formularze utworzone w exe-kach.

0

Powiedz trochę więcej bo ja w sumie nie miałem tego problemu, komponenty mi działają i ogólnie forma jest w pełni funkcjonalna...
co do tego jak to zrobić polecam artykuł o dll w dziale delphi.

0

Co do bibliotek to tworzę je tak http://4programmers.net/Forum/viewtopic.php?id=77109
a co do problemu to link mam w opisie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1