Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Вызов формы из dll   Найти похожие ветки 

 
Koala ©   (2004-10-21 16:09) [0]

Знаю что вопрос заезженый на форуме, вот пытаюсь с этим разобратся...
создал форму на ней 2 lebel и
button ModalResult = mrOK

функция


 function ShowInfo(infData, infName: PChar) : Boolean;
  var
   infoForm : TfmInfo;
 begin
   {Создаем экземпляр infoForm формы TinfoForm}
   infoForm := TfmInfo.Create(Application);
   {В Label выводим сообщения}
   infoForm.lbInfoDate.Caption := StrPas(infData);
   infoForm.lbInfoName.Caption := StrPas(infName);
   {Возвращаем True только если нажата OK (ModalResult = mrOk)}
   Result := (infoForm.ShowModal = mrOk);
   {Освобождаем память}
   infoForm.Free;
 end;

вызов функции:

 function ShowInfo(infD, infN : PChar) : Boolean; stdcall;
 external "info.dll";

implementation

procedure TfmMain.spBtn_TestDllClick(Sender: TObject);
begin
 ShowInfo("текст 1", "текст 2");
end;


при открытии формы в lebel чепуха (почему-то???)

а при закрытии формы ошибка:
Project Test.exe raised exception class EPrivilege with message "Privileged instruction". Process stopped. Use Step or Run to continue.

что не так делаю????


 
Koala ©   (2004-10-21 16:52) [1]

плз... подскажите....


 
Ega23 ©   (2004-10-21 17:01) [2]

1. stdcall зачем?
2. ShowInfo(PChar("текст 1"), PChar("текст 2"));
3. infoForm := TfmInfo.Create(Application);  А какой Application?


 
Koala ©   (2004-10-21 17:13) [3]

Ega23 ©   (21.10.04 17:01) [2]
Огромное спасибо....
Убрал stdcall, добавил PChar и все заработало как надо....


 
Koala ©   (2004-10-21 17:18) [4]

Ega23 ©   (21.10.04 17:01) [2]
вопрос в догонку по поводу п.3 [2]
можно по подробнее...
я брал статью http://delphimaster.ru/articles/usedll/index.html
и по ней разбираюсь...
там:
Пример 4. Размещение формы в DLL
function ShowMyDialog(Msg: PChar): Boolean; stdcall;

...
exports ShowMyDialog;

function ShowMyDialog(Msg: PChar): Boolean;
begin
 {Создаем экземпляр Form1 формы TForm1}
 Form1 := TForm1.Create(Application);
 {В Label1 выводим Msg}
 Form1.Label1.Caption := StrPas(Msg);
 {Возвращаем True только если нажата OK (ModalResult = mrOk)}
 Result := (Form1.ShowModal = mrOk);
 {Освобождаем память}
 Form1.Free;
end;



Если же нужно разместить в DLL немодальную форму, то необходимо сделать две функции - открытия и закрытия формы. При этом нужно заставить DLL запомнить дескриптор этой формы.


 
-=SS=- ©   (2004-10-21 17:58) [5]

library DllProj;

uses
 SysUtils,
 Classes,
 DllForm in "DllForm.pas" {Form1};

{$R *.res}
Function ShowInfo(infData, infName: PChar) : Boolean; export;
Begin
 Form1:=TForm1.Create(Form1);
 Form1.Label1.Caption:=StrPas(InfData);
 Form1.Label2.Caption:=StrPas(infName);
 Result:=True;
End;

Procedure DestroyForm; Export;
Begin
Form1.Free;
Form1:=nil;
End;

begin
end.


 
-=SS=- ©   (2004-10-21 17:59) [6]

unit DllForm;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Label1: TLabel;
   Button1: TButton;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end.


 
-=SS=- ©   (2004-10-21 18:02) [7]

unit Test;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

Function ShowInfo(infData, infName: PChar) : Boolean; External "DllProj.dll";
Procedure DestroyForm;  External "DllProj.dll";

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowInfo("info","dara");

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DestroyForm;
end;

end.


 
-=SS=- ©   (2004-10-21 18:03) [8]

Надеюсь это поможет


 
Koala ©   (2004-10-21 19:53) [9]

-=SS=- ©   (21.10.04 18:03) [8]
Огромнейшее спасибо....



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.035 c
1-1098265555
Анатолий
2004-10-20 13:45
2004.11.07
Установить курсор перед выделенным текстом


1-1097385449
focor
2004-10-10 09:17
2004.11.07
mousewheel


4-1096569449
Alekc
2004-09-30 22:37
2004.11.07
Передача данных по ИК-порту


1-1098655862
saNat
2004-10-25 02:11
2004.11.07
Глюки TMemo


3-1096745805
matt
2004-10-02 23:36
2004.11.07
Статистическая информация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский