Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров
0/0

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Уважаемые читатели!
Тут можно читать бесплатно Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров. Жанр: Программирование. Так же Вы можете читать полную версию (весь текст) онлайн книги без регистрации и SMS на сайте Knigi-online.info (книги онлайн) или прочесть краткое содержание, описание, предисловие (аннотацию) от автора и ознакомиться с отзывами (комментариями) о произведении.
Описание онлайн-книги Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров:
…начиная с 1001. Смотрите другие файлы…
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 97 98 99 100 101 102 103 104 105 ... 123

• требуется настройка клиентов (DCOM Configuration Utility — DCOMCNFG.EXE);

• встроенная поддержка модели безопасности Windows NT;

• поддержка обратных вызовов (методов);

CORBA

• на клиентах и серверах требуется наличие Common Object Request Broker;

• требуется настройка клиентов;

• поддержка обратных вызовов (методов);

OLE Enterprise:

• на клиентах и серверах требуется наличие OLE Enterprise;

• требуется настройка клиентов;

• поддержка обратных вызовов (методов);

DDE 

DDE – передача текста

Delphi 1 

Вот я как работаю с Excel:

type

 DDEClientConv1.SetLink('Excel','Sheet1');

try

 DDEClientConv1.OpenLink;

 DDEClientItem1.DDEItem:= 'R1C1';

 DDEClientConv1.PokeData(DDEClientItem1.DDEItem, StrPCopy(P, SomeString)));

finally

 DDEClientConv1.CloseLink;

end;

Как вы можете здесь видеть, свойство DDEItem определяется сервером. Если ваш сервер является приложением Delphi, то DDEItem – имя DDEServerItem. На вашем месте я бы не стал так долго заниматься отладкой DDE-программ. Воспользуйтесь синхронизацией, позволяющей понять при отладке правильность действий.

Управление Program Manager в Win95 с помощью DDE

Delphi 1

Для управления программными группами в Program Manager с помощью DDE мною был использован следующий модуль. За основу был взят код Steve Texeira (sp) из руководства Dephi Developers Guide.

Работает под Win 3.1 и '95.

unit Pm;

interface

uses SysUtils, Classes, DdeMan;

type

 EProgManError = class(Exception);

 TProgMan = class(TComponent)

 private

  FDdeClientConv: TDdeClientConv;

  procedure InitDDEConversation;

  function ExecMacroString(Macro: String): Boolean;

 public

  constructor Create(AOwner: TComponent); override;

  destructor Destroy; override;

  Procedure CreateGroup(GroupName: String; ShowGroup:Boolean);

  procedure DeleteGroup(GroupName: String);

  procedure DeleteItem(ItemName: String);

  procedure AddItem(CmdLine, ItemName: String);

 end;

implementation

uses Utils;

const

 { DDE-макростроки для Program Manager }

 SDDECreateGroup = '[CreateGroup(%s)]';

 SDDEShowGroup   = '[ShowGroup(%s, 1)]';

 SDDEDeleteGroup = '[DeleteGroup(%s)]';

 SDDEDeleteItem  = '[DeleteItem(%s)]';

 SDDEAddItem     = '[AddItem(%s, "%s", %s)]';

constructor TProgMan.Create(AOwner: TComponent);

begin

 inherited Create(AOwner);

 InitDDEConversation;

end;

destructor TProgMan.Destroy;

begin

 if Assigned(FDDEClientConv) then FDdeClientConv.CloseLink;

 inherited Destroy;

end;

function TProgMan.ExecMacroString(Macro: String): Boolean;

Begin

 StringAsPchar(Macro);

 Result := FDdeClientConv.ExecuteMacro(@Macro[1], False);

End;

Procedure TProgMan.InitDDEConversation;

begin

 FDdeClientConv := TDdeClientConv.Create(Self);

 If NOT FDdeClientConv.SetLink('PROGMAN', 'PROGMAN') then

  raise EProgManError.Create('Не могу установить DDE Link');

end;

Procedure TProgMan.CreateGroup(GroupName: String; ShowGroup:Boolean);

Begin

 { Удаляем группу, если она существует }ExecMacroString(Format(SDDEDeleteGroup, [GroupName]));

 If NOT ExecMacroString(Format(SDDECreateGroup, [GroupName])) then

  raise EProgManError.Create('Не могу создать группу ' + GroupName);

 If ShowGroup then

  If not ExecMacroString(Format(SDDEShowGroup, [GroupName])) then

   raise EProgManError.Create('Не могу показать группу ' + GroupName);

End;

Procedure TProgMan.DeleteGroup(GroupName: String);

Begin

 if NOT ExecMacroString(Format(SDDEDeleteGroup, [GroupName])) then

  raise EProgManError.Create('Не могу удалить группу ' + GroupName);

End;

Procedure TProgMan.DeleteItem(ItemName: String);

Begin

 if NOT ExecMacroString(Format(SDDEDeleteGroup, [ItemName])) then

  raise EProgManError.Create('Не могу удалить элемент ' + ItemName);

End;

Procedure TProgMan.AddItem(CmdLine, ItemName: String);

Var

 P: PChar;

 PSize: Word;

Begin

 PSize := StrLen(SDDEAddItem) + (Length(CmdLine) *2) + Length(ItemName) + 1;

 GetMem(P, PSize);

 try

  StrFmt(P, SDDEAddItem, [CmdLine, ItemName, CmdLine]);

  if NOT FDdeClientConv.ExecuteMacro(P, False) then

   raise EProgManError.Create('Не могу добавить элемент ' + ItemName);

 finally

  FreeMem(P, PSize);

 end;

End;

end.

GROUPFILE и ADDITEM для групп

Delphi 1

Вот код для создания файла группы и добавления в группу файла-элемента. Чтобы использовать эту процедуру, определите DDE clientconv App как ProgMan.

procedure TMainForm.CreateWinGroup(Sender: TObject);

var

 Name: string;

 Name1: string;

 Macro: string;

 Macro1: string;

 Cmd, Cmd1: array[0..255] of Char;

begin

 {destDir - dos-каталог, хранящий YourFile.Ext'}

 Name := 'GroupName';

 Name1 := destDir + 'YourFile.Ext, FileName_in_Group ';

 Macro := Format('[CreateGroup(%s)]', [Name]) + #13#10;

 Macro1 :=Format('[Additem(%s)]',[Name1]) +#13#10;

 StrPCopy(Cmd, Macro);

 StrPCopy(cmd1, Macro1);

 DDEClient.OpenLink;

 if not DDEClient.ExecuteMacro(Cmd, False) then

  MessageDlg('Невозможно создать группу '+Name, mtInformation, [mbOK], 0)

 else begin

  DDEClient.ExecuteMacro(Cmd1, False);

 end;

 DDEClient.CloseLink;

end;

Как можно работать с DDE под Delphi, используя вызовы API?

Delphi 3

Кстати, достаточно легко: следующий пример демонстрирует как можно научить общаться клиентскую программу с программой-сервером. Обе программы полностью созданы на Delphi. В итоге мы имеем 2 проекта, 3 формы и 3 модуля. Для работы с DDE-запросами данный пример использует методы DDE ML API.

Сервер должен начать свою работу перед тем, как клиент будет загружен. Данный пример демонстрирует 3 способа взаимодействия между клиентом и сервером:

1. Клиент может "пропихивать" (POKE) данные на сервер.

2. Сервер может автоматически передавать данные клиенту, после чего клиент обновляет свой вид на основе результатов, полученных от сервера.

3. Данные сервера изменяются, после чего клиент делает запрос серверу для получения новых данных и обновляет свой вид.

Как работает программа.

Ниже приведены 8 файлов, сконкатенированных в единое целое. Каждый файл имеет следующую структуру:

{ *** НАЧАЛО КОДА FILENAME.EXT *** } КОД { *** КОНЕЦ КОДА FILENAME.EXT *** },

поэтому вам остается всего-лишь взять код, расположенный между маркерами { *** }, скопировать в файл с соответствующим именем, и собрать оба проекта в среде Delphi.

{ *** НАЧАЛО КОДА DDEMLCLI.DPR *** }

program Ddemlcli;

uses Forms,Ddemlclu in 'DDEMLCLU.PAS' {Form1};

{$R *.RES}

begin

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.

{ ***  КОНЕЦ КОДА DDEMLCLI.DPR *** }

{ *** НАЧАЛО КОДА DDEMLCLU.DFM *** }

object Form1: TForm1

 Left = 197

 Top = 95

 Width = 413

 Height = 287

 HorzScrollBar.Visible = False

 VertScrollBar.Visible = False

 Caption = 'Демонстрация DDEML, Клиентское приложение'

 Font.Color = clWindowText

 Font.Height = -13

 Font.Name = 'System'

 Font.Style = []

 Menu = MainMenu1

 PixelsPerInch = 96

 OnCreate = FormCreate

 OnDestroy = FormDestroy

 OnShow = FormShow

 TextHeight = 16

 object PaintBox1: TPaintBox

  Left = 0

  Top = 0

  Width = 405

  Height = 241

  Align = alClient

  Color = clWhite

  ParentColor = False

  OnPaint = PaintBox1Paint

 end

1 ... 97 98 99 100 101 102 103 104 105 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий

Рейтинговые книги