Работа с модальными окнами из dll в Delphi имеет ряд особенностей.
Дело в том, что в нативных языках, по крайней мере, ориентированных на Windows практически невозможно получить модальный результат из формы напрямую. Поэтому то, что делается без труда, например, в C# или Java в Delphi сопряжено с определёнными сложностями.
Однако их можно преодолеть.
Решение данной проблемы на самом деле предельно простое. Нужно просто поместить работу с модальным окном в коде dll в функцию, которая будет возвращать модальный результат.
Ниже приведён код dll библиотеки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
library ActionDialogDLL; uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, ActionDialogForm in 'ActionDialogForm.pas' {ActionDialog}; {$R *.res} function ShowActionDialog: TModalResult; stdcall; var ActionDialog: TActionDialog; begin ActionDialog := TActionDialog.Create(Application); result := ActionDialog.ShowModal; end; exports ShowActionDialog; begin end. |
Используя данный приём можно без труда получить модальный результат работы окна из dll библиотеки и обработать его в коде программы.
Ниже приведён пример использования описанного подхода в программе.
1 2 3 4 5 6 7 8 9 10 11 12 |
function ShowActionDialog: TModalResult; external 'ActionDialogDLL.dll'; . . . procedure TForm1.Button1Click(Sender: TObject); begin case (ShowActionDialog) of mrOk: Label1.Caption := 'Ok'; mrCancel: Label1.Caption := 'Cancel'; end; end; |
Добавить комментарий