Avatar billede friiiiis Novice
11. januar 2005 - 20:49 Der er 16 kommentarer og
1 løsning

Forme i DLL filer - Rødvin udloves for svar

Hej,

Jeg har lavet en række DLL-filer der alle indeholder forme... Når jeg starter en DLL-fil op med en form, så ser det ud som om jeg starter endnu et program op i windows ved at der kommer et nyt aktivt program (DLL-filen med formen) nederst i processlinien - hvordan undgår jeg det? - sådan at kun "hovedprogrammet" kan ses som værende aktivt?

Jeg har før spurgt eksperterne herinde - se http://www.eksperten.dk/spm/545192

Borrisholt svarede at man skulle sætte "Borderstyle" til "bsToolWindow", men det ændrer formens udseende så meget at jeg ikke kan bruge det...

Problemet er pt. så stort at der udloves 2 flasker god rødvin til nogle der kommer med et fyldestgørende svar! - se dog helst ovenstående spørgsmål (http://www.eksperten.dk/spm/545192) før I svarer...
Avatar billede martinlind Nybegynder
11. januar 2005 - 21:19 #1
prøv at leg lidt med denne

du skal ikke bruge denne parm WS_EX_APPWINDOW men måske 0

SetWindowLong(Handle,GWL_EXSTYLE,WS_EX_APPWINDOW);
Avatar billede borrisholt Novice
12. januar 2005 - 12:07 #2
Man kan da heller ikke vende ryggen til jeg 3 minutter uden i laver ulykker !!!!

Godt nok er jeg officielt stoppet men jeg kiggede lige lidt for sjov, og så dit spørgsmål. Nu har jeg løsningen (ental bestemt form). Send mig lige en mail på Jens@Borrisholt.com så retunerer jeg projektet!

Håber rødvinen ER god, for så vil jeg se frem til den. Pointsene kan du give til en der trænger ....

Jens B
Avatar billede martinlind Nybegynder
12. januar 2005 - 12:57 #3
hov, hov JB, du ved godt at løsningen skal lægges her !!
Avatar billede borrisholt Novice
12. januar 2005 - 13:00 #4
martin, jeg har ikke lige adgang til FTP herfra. Men du må da gerne publisere den for mig ..

Jens B
Avatar billede martinlind Nybegynder
12. januar 2005 - 13:02 #5
skal vi ikke bare sige at friiiiis gør det !
Avatar billede friiiiis Novice
12. januar 2005 - 13:03 #6
det skal jeg nok... men skal lige have en mail fra borrisholt med projektet først...
Avatar billede borrisholt Novice
12. januar 2005 - 13:33 #7
Jeg har sendt det.

Jens B
Avatar billede friiiiis Novice
12. januar 2005 - 13:39 #8
- og jeg har lige kigget på det... skal lige hjem og sidde og nørkle med det, så giver jeg et prej når jeg har fundet ud af det - skal nok ligge en forklaring her ud siden...

hvis alt virker (som det ser ud til her nu) så bestiller jeg rødvinen så den er der lørdag formmidag iflg. din mail...
Avatar billede friiiiis Novice
13. januar 2005 - 08:20 #9
I exe filen skrives:

procedure ShowForm(ParentApplication: TApplication; ParentForm: TForm); stdcall; external 'Project1dll.dll' name 'ShowDllForm';
function ShowFormModal(ParentApplication: TApplication; ParentForm: TForm): integer; stdcall; external 'Project1dll.dll' name 'ShowDllFormModal';

dll-filen hentes ved showmodal via: ShowFormModal(Application, SELF);

dll-filen hentes ved show via: ShowForm(Application, SELF);

bemærk at funktionen/procedure IKKE hedder det samme i DLL filen og exe filen. F.eks. hedder funktionen i exe filen ShowFormModal mens den i dll-filen hedder
ShowDllFormModal... lidt specielt...

=====================================================================

I DLL-filen skrives:

først - lav en VAR declaration:

var
  DllApplication : TApplication;

lav procedure/funktion:

procedure ShowDllForm(ParentApplication: TApplication; ParentForm: TForm); stdcall;
begin
  Application := ParentApplication;
  frmDllForm := TfrmDllForm.Create(ParentForm);
  frmDllForm.Show;
end;


function ShowDllFormModal(ParentApplication: TApplication; ParentForm: TForm): integer; stdcall;
begin
  Application := ParentApplication;  // Jeg har været nødt til at medtage denne linie
                                    // for at få det til at virke - det har
                                    // borrisholt ikke
  frmDllForm := TfrmDllForm.Create(ParentForm);
  Result := frmDllForm.ShowModal;
end;

hvor "frmDllForm" er navnet på formen i DLL-filen


tilføj desuden funktionen:

procedure DLLUnloadProc(Reason: Integer); register;
begin
  if Reason = DLL_PROCESS_DETACH then
    Application := DllApplication;
end;

... og tilføj i det nederst begin end. afsnit i dll filen

begin
  DllApplication := Application;
  DLLProc := @DLLUnloadProc;
end.
Avatar billede friiiiis Novice
13. januar 2005 - 08:21 #10
sig endeligt til hvis I har nogle kommentarer... Jeg har sikkert glemt noget, men så må borrisholt lige tilføje de guddommelige detaljer...
Avatar billede friiiiis Novice
13. januar 2005 - 08:21 #11
-->> Borrisholt, rødvinen er på vej...!!
Avatar billede borrisholt Novice
13. januar 2005 - 08:36 #12
friiiiis>> Den er korrekt der mangler en linje i det eksemel jeg sendte. Det opdagede jeg bagefter .. Men du fandt det selv.

Men summa sumarium så overfører man blot applikations objektet til DLL filen, og husker at ligge dettilbag. Så er den i vinkel.

Navne forviring ? Tja tjo lidt måske ... Men det gik stærkt !

Jens B
Avatar billede friiiiis Novice
13. januar 2005 - 09:25 #13
Hvis Borrisholt ikke vil have point'ene, så er det vidst mest rimeligt at martinlind får point'ene, hvis altså ikke Borrisholt har vildt og voldsomt mange indvendinger...

- kan jeg ikke lige få et svar fra dig martinlind?
Avatar billede friiiiis Novice
13. januar 2005 - 20:42 #14
... endnu en lille berigtigelse...

Hvis exe-filen henviser til en dll-fil med en form og denne dll-fil henviser igen til en ny dll-fil med en ny form, så skal ParentApplication og ParentForm være fra den forhenværende forms dll-fil og ikke ParentApplication og ParentForm fra exe-filen...

måske giver det sig selv, men det tog mig lige et par minutter (lavt sat..) at regne det ud...
Avatar billede borrisholt Novice
14. januar 2005 - 07:41 #15
OKI DET viste jeg ikke. Det ander er blot noget jeg har lavet fordi jeg havde brug for at ligge et MDI Child i en DLL fil. Og så så jeg tilfældigvis dit spm, og så vidste jeg at jeg kendte svaret.

Jens B
Avatar billede borrisholt Novice
16. januar 2005 - 12:21 #16
friiiiis>> Tusinde tak for rødvinen !!!! Det er altid rart at kunne hjælpe. Må man spørge hvad du skal bruge det . Jeg er bare rasende nysgerrig, fordi det er sjælden man bliver tilbudt noget af vikrelig værdi for at besvare et spm. (Rødvin, kontanter etc)

Jens B
Avatar billede friiiiis Novice
12. marts 2005 - 12:29 #17
lukker spm nu, når martinlind ikke vil have point'ene...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester