![]() |
|
|
#1
|
|||
|
|||
|
Подскажите пожалуйста новичку!!!
Есть форма с кнопкой, по нажатию вызывается другая форма (как библиотека), но нужно в библиотеке добавить еще форму (она добавляется, но при попытке к ней обратится при выполнение программы выскакивает ошибка). Можно ли как-то ее победить)??? |
|
#2
|
|||
|
|||
|
Код в студию.
Что значит "библиотека"? Как вызывается первая форма из нее? Как сделана вторая форма - так же, как первая или есть различия? |
|
#3
|
|||
|
|||
|
первая форма
Код:
procedure TFMain.Button1Click(Sender: TObject); var hDll : THandle; begin hDll := LoadLibrary(PChar(extractFileDir(ParamSTR(0)) + '\' + 'passport.drs')); @OpenPassport1 := GetProcAddress(hDll,'OpenPassport'); OpenPassport1(Handle); FreeLibrary(hDll); end; Код:
library passport;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {FPass};
{$E drs.res}
{$R *.res}
exports
OpenPassport;
begin
end.
***************
код из самой формы
procedure OpenPassport(aHandle: THandle); Export; StdCall;
implementation
{$R *.dfm}
procedure OpenPassport(aHandle: THandle);
var
OldHandle : THandle;
begin
CoInitialize(Nil);
OldHandle := Application.Handle;
Application.Handle := aHandle;
FPass:= TFPass.Create(Application);
try
FPass.ShowModal;
finally
Application.Handle := OldHandle;
FPass.Free;
end;
end;
Последний раз редактировалось crazyman, 09.05.2017 в 18:28. |
|
#4
|
|||
|
|||
|
ну дык, ёкарный бабай!!!
У тебя же тут спец. процедура для открытия формы. Соответственно, для второй формы надо написать такую же. Или эту поменять так, что бы она могла по параметру открывать любую из форм. |
|
#5
|
|||
|
|||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Цитата:
может запамятовал, но вот тогда ещё один пример вызова из библиотеки модальной (About form) и обычной (Splash form), сначала скомпилите dll и затем переместите её в папку с проверочной сборкой |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
crazyman (12.05.2017)
| ||
|
#7
|
|||
|
|||
|
СПАСИБО!!!
|
|
#8
|
||||
|
||||
|
А за что, спасибки-то? Наверное всёж будут непонятки, пжлст, лучше прикрепите в теме образцы ваших форм и что с ними должно происходить и набор "спец. процедур" вам будет обеспечен
|
|
#9
|
|||
|
|||
|
Цитата:
есть "главная" форма из нее вызывается модальная форма, нужно из модальной формы вызвать еще одну форму ну типа форма модальная модальной. В пример из прошлой ветки как раз таки хотелось добавить еще одну форму вызываемую вызванной формой) Последний раз редактировалось crazyman, 12.05.2017 в 22:45. |
|
#10
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
crazyman (12.05.2017)
| ||
|
#11
|
|||
|
|||
|
Цитата:
Оказывается так просто. Я балбес...Последний раз редактировалось crazyman, 12.05.2017 в 23:28. |