pluginy z DLL

0

Hej,

Pisze program... z zakładkami. I chcę zrobić, by obsługiwał on pluginy. Tzn. napisze plugin (plik DLL), wrzucę do katalogu z aplikacją i chcę by pokazała się nowa zakładka z róznymi komponentami itp. No wiecie... z tego pluginu.

Nałatwiej by mi było, że w bibliotece DLL robiłbym formularz... oprogramowywał go... i chciałbym żeby ten formularz pojawiał się NIE jako okno jakieś w programie-marce ;) tylko właśnie na zakładce.

Nie wiem, czy jasno się wyrażam.

Nie mam pojęcia jak to zrobić. Umiem posługiwać się plikami DLL, wywoływać formularze z nich itd. Ale nie wiem jak zrobić to co opisałem.

Byłbym wdzięczny za pomysły i sugestie.

ps.
Ja już myślałem może, żeby jakoś tak napisać program "matka", że analizowałby on formularz z pliku DLL i po prostu tworzył samemu taki na zakładce... wiecie... że w ogóle nie ten z DLL, tylko własny w aplikacji. Ale to chyba kiepski pomysł.. bo nie wiem jak ze zdarzeniami i kodem sobie poradzić... no i "matka" musiałaby umieć utworzyć każdy komponent jaki byłby w DLL czyli bez sensu.

Jeszcze raz proszę o pomoc.

0

jak masz formularz w DLL to może wystarczy zmienić rodzica i pójdzie, ale nigdy nie próbowałem ;P

0

mozna to zrobic w taki sposob:

na glownej fomie tam gdzie chcesz miec te zakladki kladziesz komponent PageControl. Ustawiasz mu wlasciwosc DockSite na TRUE.

W DLL tworzysz normalne okno takie jakie chcesz i po wywolaniu tego okna wywolujesz metode ManualDock tej formy (w parametrze podajesz PageControl) i okno pojawia sie jako zakladka. NIestety takie okno mozna wyjac z zakladek ale na pewno da sie to zablokowac. niestety z braku czasu nie sprawdzalem jak.

0

Główny program niech do DLL jakimś wywołaniem podaje MainForm.Handle (nazwijmy to MainFormDLLHandle), a Forma z DLL niech ma FormDLL.parent := MainFormDLLHandle;

0

Poszła metoda z dokowanie co podał Gothmog. Ta druga metoda co podał Szczawik nie działa.

Ale metoda Gothmog działą połowicznie... jest tak...

w DLL zrobiłem formularz i umieściłem na nim TMemo.

W programie głównym dałem PageControl i przycisk, który jak się kliknie to wywołałuje procke z DLLki przekazują do niego jako parametr typu TWinControl ten PanelControl.

Eefekt..

Uruchamiam program - nie ma zakładek. Wciskam przycisk - zakładka się tworzy, a a niej TMemo. Czyli super... mogę tak klikać ile chce i ok działa. Tyle że..

  1. Zamykam program - to się wykrzacza.. błędy jakieś... może problem ze zwalnianiem pamięci? Nie wiem.

  2. W tym memo... mogę normalnie pisać, ale... hehe
    jak klikam ENTER - to nie działa. Wciska się przycisk i tworzy nowa zakładka. Jakby ENTER nie leciał do Memo.. dziwne.
    Jak klikne w Memo prawy klawisz myszki zamiast menu pokazuje się błąd
    'Control "Memo1" has no parent window.'

Co radzicie?

0

Obejrzyj TjvPLUGIN z pakietu JVCL tam jest to o co ci chodzi - kiedys nawet wydobylem kod ale juz nie mam :(

0
kamilos1982 napisał(a)

Poszła metoda z dokowanie co podał Gothmog. Ta druga metoda co podał Szczawik nie działa.

No no.. to, że nie umiesz zrobić, nie znaczy, że nie działa.

Poniżej masz linka do napisanego na szybko kodu, który tworzy zakładki, na każdą ładuje nową formę z DLL (proponowana przeze mnie idea pozostała, tylko dla ułatwienia przekazuję TabSheet, a nie tylko Handle, okna głównego - w sumie plugin sam z TabSheet pobiera i tak, i tak Handle). [Plik test.dll musi znaleźć się w C:, bo nie chciało mi się robić programu idiotoodpornego].

http://szczawik.psq.fm.interia.pl/dllform.zip [link nieaktualny]

Jak pobierzesz, daj znać, to usunę z serwera. Pozdrawiam.

[DOPISANE]

Co do entera w memo: to wynika z różnicy między obiektami Application oraz Screen formy oraz programu głównego: szczegóły niedawno opisałem tutaj:

http://4programmers.net/Forum/viewtopic.php?id=78121

Zauważ, że przy naciskaniu klawisza Tab pomijane są komponenty formy z DLL. Niestety - to uroki środowisk Borlanda.

0

Pobrałem, dzięki!

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