Dynamiczne tworzenie komponentów z DLL

0

Mam problem chce zrobić za pomocą dll tworzyć dynamicznie komponenty na panelu w formie.

kod dll-a

procedure generate(AOwner: TComponent; AParent: TWinControl); stdcall;
var
  Button: TButton;
begin
Button:=TButton.Create(AOwner);
Button.Parent:=AParent;
Button.Name := 'Przycisk';
Button.Left:=10; // pozycja X przycisku na formularzu
Button.Top:=10; // pozycja Y przycisku na formularzu
Button.Width:=140; // szerokość przycisku
Button.Height:=40; // wysość przycisku
Button.Caption:='Przycisk dynamiczny'; // podpis przycisku
Button.Visible:=True; // czy przycisk widoczny?
Button.Show;
end;

lądowanie biblioteki

procedure TOknoOpcje.comboTypHostaSelect(Sender: TObject);
var
  DLL : THandle;
  generate : procedure(AOwner: TComponent; AParent: TWinControl); stdcall;
begin
    DLL := LoadLibrary('components/vpxP.dll'); // załadowanie pliku

    @generate := GetProcAddress(DLL, 'generate');  // pobranie wskaźnika do procedury
    if @generate = nil then raise Exception.Create('Nie można załadować procedury');
    generate(panelHost.Owner, panelHost.Parent); // wykonanie procedury
end;

I podczas próby stworzenia tych komponentów dostaję błąd "cannot assign a TFont to a TFont"

0
Misiekd napisał(a)

a application i screen podmieniłeś w dllce??

http://www.google.com/search?client=opera&rls=pl&q=cannot+assign+a+TFont+to+a+TFont&sourceid=opera&ie=utf-8&oe=utf-8
http://groups.google.com/groups?client=opera&rls=pl&q=cannot%20assign%20a%20TFont%20to%20a%20TFont&sourceid=opera&ie=UTF-8&oe=UTF-8&um=1&sa=N&tab=wg

BTW: takie coś jest wielce nie wskazane - jak już chcesz to robić to poczytaj o bplach

W końcu zrobiłem to trochę inna metodą z wykorzystaniem framów i uchwytów

Co do bpli wolał bym z nich nie korzystać ponieważ

  1. Exe i bpl musi być kompilowany w tej samej wersji Delphi z tego co czytałem
  2. Jakoś nie mogłem znaleźć jakiegoś porządnego arta gdzie by było opisane jak zrobić taką biblioteczkę.

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