Приветствую Вас, Гость! Регистрация RSS
Вторник, 19.03.2024
Главная » Файлы » Delphi » Система

Использование DLL
[ Скачать с сервера (8.5 Kb) ] 06.01.2016, 12:29

unit FormDLLU;

interface

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

type
  TFormDLL = class(TForm)
    Timer: TTimer;
    ExitBtn: TButton;
    TimeLbl: TLabel;
    procedure TimerTimer(Sender: TObject);
    procedure ExitBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    t: Integer;
{*--}
    ParentForm: THandle; { Родительская форма (её Handle) }
{--*}
  end;

var
  FormDLL: TFormDLL; { Форма, хранимая в библиотеке }

{ Показать форму
  Отдельная процедура написана для экспорта }
procedure ShowForm(AOwner: TForm);

implementation

{$R *.dfm}

{ Показать форму }
procedure ShowForm(AOwner: TForm);
begin
  FormDLL := TFormDLL.Create(AOwner); { Создать форму }
{*--}
  FormDLL.ParentForm := AOwner.Handle;{ Запомнить Handle родительской формы }
{--*}
  FormDLL.Show;                       { Показать форму (не модально) }
end;

procedure TFormDLL.TimerTimer(Sender: TObject);
begin
  { Здесь может быть любое действие
    Таймер сделан для демонстрации длительности  процесса }
  Inc(t);
  TimeLbl.Caption := 'Время выполнения: '+IntToStr(t)+ ' с.';
end;

procedure TFormDLL.ExitBtnClick(Sender: TObject);
begin
  { Здесь может быть любое действие }
  Close;
end;

procedure TFormDLL.FormCreate(Sender: TObject);
begin
  { Здесь может быть любое действие }
  t := 0;
  { Расположить форму в произвольном месте экрана }
  Randomize;
  Left := Random(Screen.Width - Width);
  Top := Random(Screen.Height - Height);
end;

procedure TFormDLL.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{*--}
  { Если надо, при закрытии формы передать сообщение об этом в главную (вызвавшую) форму }
  if ParentForm <> 0 then SendMessage(ParentForm, WM_USER, 0, 0);
{--*}

{ После закрытия автоматически освободить память и уничтожить форму
  Важно! Это действие надо, чтобы не занимать память оставшимися закрытыми форматми }
  Action := caFree;
end;

end.

library ShowWin;

{ 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,
  ShellAPI,
  Windows,
  FormDLLU in 'FormDLLU.pas' {FormDLL};

{$R *.res}

{ Экспортируемые процедуры
  RunExe - запускает внешнее приложение и выполняется дальше (не контролирует приложение)
  1 - Блокнот, 2 - Калькулятор, иначе - Проводник }
procedure RunExe(n: Byte);
begin
  case n of
    1: ShellExecute(0, 'open', 'notepad.exe', nil, nil, SW_ShowNormal);
    2: ShellExecute(0, 'open', 'calc.exe', nil, nil, SW_ShowNormal);
    else ShellExecute(0, 'open', 'explorer.exe', nil, nil, SW_ShowNormal);
  end;
end;

{ Экспортируемые процедуры и функции }
exports
  RunExe,   // Запустить внешнюю программу (после запуска не влияет на работу и не контролируется )
  ShowForm; // Показать форму из библиотеки (описана в FormDLLU)

begin
end.

 

Категория: Система | Добавил: Alex | Теги: библиотека, dll, формы
Просмотров: 346 | Загрузок: 12 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar