home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / misc / wintalk / main.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  2KB  |  91 lines

  1. unit Main;
  2.  
  3. { Program copyright (c) 1995 by Charles Calvert }
  4. { Project Name: WINTALK }
  5.  
  6. { Use this program along with the DOS program called
  7.   WINTALK to find out how a Windows program can talk 
  8.   to a DOS program. }
  9.  
  10. interface
  11.  
  12. uses
  13.   WinTypes, WinProcs, SysUtils,
  14.   Classes, Graphics,
  15.   Controls,
  16.   Printers, Forms, Messages, StdCtrls;
  17.  
  18. type
  19.   TForm1 = class(TForm)
  20.     BTalkDos: TButton;
  21.     Edit1: TEdit;
  22.     BSetData: TButton;
  23.     TEnterData: TLabel;
  24.     Edit2: TEdit;
  25.     procedure BTalkDosClick(Sender: TObject);
  26.     procedure BSetDataClick(Sender: TObject);
  27.   end;
  28.  
  29. var
  30.   Form1: TForm1;
  31.  
  32. implementation
  33.  
  34. uses
  35.   StrBox, UtilBox;
  36.  
  37. {$R *.DFM}
  38.  
  39. procedure TForm1.BTalkDosClick(Sender: TObject);
  40. const
  41.   FILENAME = 'wintalk.exe';
  42. var
  43.   hText: THandle;
  44.   S: String;
  45.   i: Integer;
  46. begin
  47.   S := StripLastToken(ParamStr(0), '\');
  48.   S := S + '\' + FileName;
  49.   i := WinExecAndWait(FILENAME, SW_SHOWNORMAL);
  50.   if i < 32 then begin
  51.     Edit2.Text := IntToStr(i);
  52.     Exit;
  53.   end;
  54.   OpenClipBoard(Handle);
  55.   hText := GetClipBoardData(CF_TEXT);
  56.   S := StrPas(GlobalLock(hText));
  57.   GlobalUnlock(hText);
  58.   CloseClipBoard;
  59.   Edit2.Text := S;
  60. end;
  61.  
  62. procedure SendToClipBoard(Handle: THandle; S: String);
  63. var
  64.   HText: THandle;
  65.   P: PChar;
  66.   B: Array[0..25] of Char;
  67. begin
  68.   HText := GlobalAlloc(GHND, Length(S) + 1);
  69.   P := GlobalLock(HText);
  70.   Move(S[1], P^, Length(S));
  71.   GlobalUnLock(HText);
  72.   OpenClipboard(Handle);
  73.   EmptyClipBoard;
  74.   SetClipBoardData(CF_TEXT, HText);
  75.   CloseClipBoard;
  76. end;
  77.  
  78. procedure TForm1.BSetDataClick(Sender: TObject);
  79. var
  80.   S: String;
  81. begin
  82.   S := Edit1.Text;
  83.   if Length(S) = 0 then begin
  84.     Edit1.Text := 'Write something here!';
  85.     exit;
  86.   end;
  87.   SendToClipBoard(Handle, S);
  88. end;
  89.  
  90. end.
  91.