Ĺadny brzuch
Napisałem program który korzysta z formatek wyświetlanych z plikow dll. Jednak chciałbym zeby po wyświetleniu formatki z dll okno programu mogło byc aktywne. czy jest to możliwe i jak to zrobić??
Hmm.. nie rozumiem problemu :P Co ma formatka z DLLa do okna programu? :) Wyświetlaj tą formatkę tak samo, jakbyś chciał wyświetlić inną formatkę tak, żeby okno główne pozostało aktywne :).
Postaw bardziej precyzyjne pytanie, nie rozumiem jak 'wyswietlasz formatke z pliku dll'..
pozdrowienia
Mam na przykład taki kod biblioteki:
library Test; uses shareMem, Forms, Unit1 in 'Unit1.pas'; type TInfo = class Name:string; Version:string; Author:string; Lang:string; Description:string; constructor Create; end; constructor TInfo.Create; begin inherited; Name := 'Test'; Version := '1.0'; Author := 'Mariush Soft'; Lang := 'Polski'; Description := 'Test'; end; procedure Initiatize; begin Application.CreateForm(TForm1, Form1); Form1.ShowModal; end; function Show_Info:TInfo; begin Result := TInfo.Create; end; exports Show_Info name 'Info', Initiatize name 'Initiatize'; begin end.
(najważniejsza jest procedura initiatize)
i kod procedury wywołującej procedure w pliku exe:
procedure TForm1.uruchomDll(name:string); var DLL : THandle; Initiatize: procedure; begin DLL := LoadLibrary(pchar(AppPath+'\Plugins\'+name)); try Initiatize := GetProcAddress(DLL, 'Initiatize'); if @Initiatize = nil then begin showmessage('Ta wtyczka nie posiada procedury inicjującej!'); end else Initiatize; finally FreeLibrary(DLL); end; end;
jako parametr przyjmuje ona nazwe pliku biblioteki dll.
I w tym wszystkim chodzi mi oto że ta formatka, ktora jest wyświetlona z biblioteki, uniemożliwia korzystanie z reszty programu (to znaczy jest aktywna aż do zamknięcia)
Nie pokazuj okna przez Form1.ShowModal ale przez Form1.Visible := true;
:)
Jak robie to przez TForm1.Visible := true; formatka pojawia mi sie na moment i od razu znika
Jak robie to przez TForm1.Visible := true; formatka pojawia mi sie na moment i od razu znika Problem polega na tym, ze Ty zaraz po wywolaniu procedurki zwalniasz biblioteke.
Roznica miedzy ShowModal a Visible jest taka, ze pierwszy pokazuje okno /otrzymuje ono atrybut najwazniejszego, cos w stylu okna z komunikatem/ i czeka az to okno zostanie zamkniete. Druga opcja po prostu nadaje oknu atrybut 'widoczny' i leci dalej z kodem, tak wiec zgodznie z koleja kodu zostaje wywolana funkcja FreeLibrary ktora zwalnia biblioteke a wiec i niszczy okno.
Jezeli mozesz to wcisnij gdzies indziej te funkcje /np. pod inny przycisk albo przy zakanczaniu programu/ a powinno zadzialac.
a jak zrobic zeby formatka nie chowała sie za oknem programu?? (Przy czym nie chodzi mi o StayOnTop)
Użytkownik mariush13 edytował ten post 08 październik 2006, 17:24
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Hmm.. nie rozumiem problemu :P Co ma formatka z DLLa do okna programu? :) Wyświetlaj tą formatkę tak samo, jakbyś chciał wyświetlić inną formatkę tak, żeby okno główne pozostało aktywne :).
Postaw bardziej precyzyjne pytanie, nie rozumiem jak 'wyswietlasz formatke z pliku dll'..
pozdrowienia
Mam na przykład taki kod biblioteki:
library Test; uses shareMem, Forms, Unit1 in 'Unit1.pas'; type TInfo = class Name:string; Version:string; Author:string; Lang:string; Description:string; constructor Create; end; constructor TInfo.Create; begin inherited; Name := 'Test'; Version := '1.0'; Author := 'Mariush Soft'; Lang := 'Polski'; Description := 'Test'; end; procedure Initiatize; begin Application.CreateForm(TForm1, Form1); Form1.ShowModal; end; function Show_Info:TInfo; begin Result := TInfo.Create; end; exports Show_Info name 'Info', Initiatize name 'Initiatize'; begin end.
(najważniejsza jest procedura initiatize)
i kod procedury wywołującej procedure w pliku exe:
procedure TForm1.uruchomDll(name:string); var DLL : THandle; Initiatize: procedure; begin DLL := LoadLibrary(pchar(AppPath+'\Plugins\'+name)); try Initiatize := GetProcAddress(DLL, 'Initiatize'); if @Initiatize = nil then begin showmessage('Ta wtyczka nie posiada procedury inicjującej!'); end else Initiatize; finally FreeLibrary(DLL); end; end;
jako parametr przyjmuje ona nazwe pliku biblioteki dll.
I w tym wszystkim chodzi mi oto że ta formatka, ktora jest wyświetlona z biblioteki, uniemożliwia korzystanie z reszty programu (to znaczy jest aktywna aż do zamknięcia)
Nie pokazuj okna przez Form1.ShowModal ale przez Form1.Visible := true;
:)
Jak robie to przez TForm1.Visible := true; formatka pojawia mi sie na moment i od razu znika
Jak robie to przez TForm1.Visible := true; formatka pojawia mi sie na moment i od razu znika Problem polega na tym, ze Ty zaraz po wywolaniu procedurki zwalniasz biblioteke.
Roznica miedzy ShowModal a Visible jest taka, ze pierwszy pokazuje okno /otrzymuje ono atrybut najwazniejszego, cos w stylu okna z komunikatem/ i czeka az to okno zostanie zamkniete. Druga opcja po prostu nadaje oknu atrybut 'widoczny' i leci dalej z kodem, tak wiec zgodznie z koleja kodu zostaje wywolana funkcja FreeLibrary ktora zwalnia biblioteke a wiec i niszczy okno.
Jezeli mozesz to wcisnij gdzies indziej te funkcje /np. pod inny przycisk albo przy zakanczaniu programu/ a powinno zadzialac.
a jak zrobic zeby formatka nie chowała sie za oknem programu?? (Przy czym nie chodzi mi o StayOnTop)
Użytkownik mariush13 edytował ten post 08 październik 2006, 17:24