TForm z DLL - do execa

0

Chciałbym zrobić cos takiego : jest sobie exec i dll`ka.
Biblioteczka zawiera formę, którą chce zagnieździć w np. panel1 formy glownej programu. Ma ktoś jakieś pomysły? :D

0

na co ? na zagnieżdżenie do panelu, ładowanie z dll czy coś jeszcze innego ??

0

Mysle ze najlepszy bylby panel. ale niekoniecznie :P

0

Sorry, zle przeczytalem pytanie :P
Ogolnie, to znaczy co i jak przekazywać :P

Probowalem czegos takiego:
Dll:
procedure CreateFrm(parent:pointer);
begin
Form1:=TForm1.Create(pointer);
Form1.Parent:=(pointer as TWinControl);
Form1.Show;
end;

a w execu: CreateFrm(Panell1)
Ale nie wychodzlilo ;(

0

W jednym ze swoich programów zrobiłem po prostu tak:

function ShowPrinters(AParent: TWinControl): TForm;
begin
  Result := TPrintersFrm.Create(Application);
  with Result do
  begin
    Parent := AParent;
    BorderStyle := bsNone;
    BorderIcons := [];
    Left := 0;
    Top := 0;
    Align := alClient;
    Show;
  end;
end;

TPrintersFrm to typ formularza pokazywanego na Panelu. Funkcja przy okazji zwraca wskaźnik do formularza, aby można go było zwolnić, gdy już nie będzie potrzebny.

0

W jednym ze swoich programów zrobiłem po prostu tak:

function ShowPrinters(AParent: TWinControl): TForm;
begin
  Result := TPrintersFrm.Create(Application);
  with Result do
  begin
    Parent := AParent;
    BorderStyle := bsNone;
    BorderIcons := [];
    Left := 0;
    Top := 0;
    Align := alClient;
    Show;
  end;
end;

TPrintersFrm to typ formularza pokazywanego na Panelu. Funkcja przy okazji zwraca wskaźnik do formularza, aby można go było zwolnić, gdy już nie będzie potrzebny.

W zasadzie brzmi niezle,ale... Nie działa... Może źle używam? Robie to tak:

ShowPrinters(Panel1);

a deklaruje tak: function ShowPrinters(AParent: TWinControl): TForm;external 'project1.dll';

 a oczywiscie w project1.dll jest ta funkcja w exports :P. Jak klikam na button1 (do ktorego jest przypisane uzycie funkcji) to nie dzieje sie nic a jak wylaczam program to sie pojawia blad Acces Violation...  :-/ 
0

Hmm, ciężko mi powiedzieć bez kodu... Ja to miałem w EXE :) Może ew. spróbuj zrobić tak:

function ShowPrinters(AParent: Longint): Longint;
begin
  Result := Longint(TPrintersFrm.Create(TWinControl(AParent)));
  with TForm(Result) do
  begin
    Parent := TWinControl(AParent);
    BorderStyle := bsNone;
    BorderIcons := [];
    Left := 0;
    Top := 0;
    Align := alClient;
    Show;
  end;
end;

Czyli przekazuj zwykłe Longinty zamiast "kompletnych" obiektów. Później sprawę załatwisz poprzez rzutowanie. Jak nie działa, to może zamieść kod, który powoduje problem.

// DOPISANE:
Podaj kod, który powoduje ten problem, to postaram się coś wykombinować.

0

Ech... nie macie juz pomyslow?</ort>

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