home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / CLNTFORM.PAS < prev    next >
Pascal/Delphi Source File  |  1996-05-08  |  4KB  |  134 lines

  1. unit ClntForm;
  2.  
  3. { This program works in conjunction with the Monitor.dpr project to demonstrate
  4.   advanced Win32 programming topics.  See Monform.pas for more information }
  5.  
  6. interface
  7.  
  8. uses
  9.   Forms, Windows, Messages, SysUtils, StdCtrls, Classes, Controls,
  10.   IPCThrd, Dialogs, ComCtrls;
  11.  
  12. const
  13.   WM_UPDATESTATUS = WM_USER + 2;
  14.  
  15. type
  16.   TClientForm = class(TForm)
  17.     StatusBar: TStatusBar;
  18.     procedure FormCreate(Sender: TObject);
  19.     procedure FormDestroy(Sender: TObject);
  20.     procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  21.       Y: Integer);
  22.     procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  23.       Shift: TShiftState; X, Y: Integer);
  24.     procedure FormResize(Sender: TObject);
  25.     procedure FormClick(Sender: TObject);
  26.   private
  27.     Flags: TClientFlags;
  28.     IPCClient: TIPCClient;
  29.     FStatusText: string;
  30.     procedure OnConnect(Sender: TIPCThread; Connecting: Boolean);
  31.     procedure OnSignal(Sender: TIPCThread; Data: TEventData);
  32.     procedure UpdateStatusBar(var Msg: TMessage); message WM_UPDATESTATUS;
  33.   end;
  34.  
  35. var
  36.   ClientForm: TClientForm;
  37.  
  38. implementation
  39.  
  40. {$R *.DFM}
  41.  
  42. procedure TClientForm.FormCreate(Sender: TObject);
  43. var
  44.   CNo, VCnt: Integer;
  45.   C, T: Integer;
  46. begin
  47.   Caption := Format('%s (%X)', [Application.Title, GetCurrentProcessID]);
  48.   try
  49.     IPCClient := TIPCClient.Create(GetCurrentProcessID, Caption);
  50.     IPCClient.OnConnect := OnConnect;
  51.     IPCClient.OnSignal := OnSignal;
  52.     IPCClient.Activate;
  53.     if not (IPCClient.State = stConnected) then OnConnect(nil, False);
  54.     VCnt := Screen.Height div (Height + 10);
  55.     CNo := IPCClient.ClientCount - 1;
  56.     Top := (CNo mod VCnt) * (Height + 10) + 10;
  57.     Left := (Screen.Width div 2) + (CNo div VCnt) * (Width + 10);
  58.   except
  59.     Application.HandleException(ExceptObject);
  60.     Application.Terminate;
  61.   end;
  62. end;
  63.  
  64. procedure TClientForm.FormDestroy(Sender: TObject);
  65. begin
  66.   IPCClient.Free;
  67. end;
  68.  
  69. procedure TClientForm.OnConnect(Sender: TIPCThread; Connecting: Boolean);
  70. begin
  71.   PostMessage(Handle, WM_UPDATESTATUS, WPARAM(Connecting), 0);
  72. end;
  73.  
  74. procedure TClientForm.OnSignal(Sender: TIPCThread; Data: TEventData);
  75. begin
  76.   Flags := Data.Flags;
  77. end;
  78.  
  79. procedure TClientForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  80.   Y: Integer);
  81. var
  82.   EventData: TEventData;
  83. begin
  84.   if cfMouseMove in Flags then
  85.   begin
  86.     EventData.X := X;
  87.     EventData.Y := Y;
  88.     EventData.Flag := cfMouseMove;
  89.     IPCClient.SignalMonitor(EventData);
  90.   end;
  91. end;
  92.  
  93. procedure TClientForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
  94.   Shift: TShiftState; X, Y: Integer);
  95. var
  96.   EventData: TEventData;
  97. begin
  98.   if cfMouseDown in Flags then
  99.   begin
  100.     EventData.X := X;
  101.     EventData.Y := Y;
  102.     EventData.Flag := cfMouseDown;
  103.     IPCClient.SignalMonitor(EventData);
  104.   end;
  105. end;
  106.  
  107. procedure TClientForm.FormResize(Sender: TObject);
  108. var
  109.   EventData: TEventData;
  110. begin
  111.   if cfResize in Flags then
  112.   begin
  113.     EventData.X := Width;
  114.     EventData.Y := Height;
  115.     EventData.Flag := cfResize;
  116.     IPCClient.SignalMonitor(EventData);
  117.   end;
  118. end;
  119.  
  120. procedure TClientForm.FormClick(Sender: TObject);
  121. begin
  122.   if IPCClient.State <> stConnected then
  123.     IPCClient.MakeCurrent;
  124. end;
  125.  
  126. procedure TClientForm.UpdateStatusBar(var Msg: TMessage);
  127. const
  128.   ConnectStr: Array[Boolean] of PChar = ('Not Connected', 'Connected');
  129. begin
  130.   StatusBar.SimpleText := ConnectStr[Boolean(Msg.WParam)];
  131. end;
  132.  
  133. end.
  134.