Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Обмен данными между двумя моими приложениями   Найти похожие ветки 

 
Comp ©   (2004-11-07 16:57) [0]

Уважаемые мастера. Такой наболевший вопрос: Есть оконное приложение с лабел и кнопкой. Нажимаю на кнопку. Приложение должно запустить некую консоль, передать ей некое число, а консоль должна выяснить, меньше 100 это число или больше 100. Ответ должно вернуть оконному приложению. В лабел отображается "да" или "нет". Ппожалуйта решить эту задачу. Как написать такуб консоль и оконное приложение. Буду очень благодарен.


 
Defunct ©   (2004-11-07 18:42) [1]

Написал вам небольшой примерчик:

Консоль:

program console;

{$APPTYPE CONSOLE}

uses
 SysUtils, Messages, Classes, Windows, ExtCtrls;

type
 TMyMessanger = class(TComponent)
 private
   FWindowHandle: HWND;
   procedure WndProc(var Msg: TMessage);
 public
   Done  : Boolean;
   constructor Create(AOwner: TComponent);override;
   destructor  Destroy;override;
 end;

Constructor TMyMessanger.Create;
begin
 inherited Create(AOwner);
 FWindowHandle := Classes.AllocateHWnd(WndProc);
 SetWindowText( FWindowHandle, "My console");
 WriteLn("console is up");
 WriteLn("Caption = My console,  Handle = ",FWindowHandle);
 Done := False
end;

procedure TMyMessanger.WndProc;
begin
 with Msg do
   if Msg = WM_USER + 50 then
     try
       /// lalalala
       WriteLn("Message has received from WndApplication");
       WriteLn("WParam = ",WParam,"  LParam = ",LParam);
       WriteLn("Quiting");
       Result := 5555;
       Done := True;
     except
       WriteLn("exception")
     end
   else
     Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam)
end;

destructor TMyMessanger.Destroy;
begin
 Classes.DeallocateHWnd(FWindowHandle);
 inherited Destroy
end;

var Msg: TMsg;

begin
 with TMyMessanger.Create( nil ) do
 begin
   while not Done do
   if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
   begin
     TranslateMessage(Msg);
     DispatchMessage( Msg )
   end
 end;

 ReadLn;
end.


Оконное приложение:

procedure TForm1.Button1Click(Sender: TObject);
var Console : HWND;
   Result  : Integer;
begin
 Console :=  FindWindow( nil, "My console" );
 if Console > 0 then
 begin
    Result := SendMessage( Console, WM_USER+50, 6777, 7777);
    ShowMessage( "Результат от консоли = " + IntToStr(Result) )
 end
 else
    ShowMessage("Консоль не запущена")
end;


 
Defunct ©   (2004-11-07 18:49) [2]

эээ.. забыл деструктор вызвать. добавьте обязательно.

with TMyMessanger.Create( nil ) do
begin
  while not Done do
  if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
  begin
    TranslateMessage(Msg);
    DispatchMessage( Msg )
  end;
  Free
end;



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.058 c
3-1098622927
ewgenij
2004-10-24 17:02
2004.11.21
ADOConnection и пакеты


1-1099937284
Змей
2004-11-08 21:08
2004.11.21
Горячая клавиша


3-1098685295
nad
2004-10-25 10:21
2004.11.21
Работа с dbf без BDE


6-1095161126
bsa
2004-09-14 15:25
2004.11.21
как извлечь текст (убрать тэги) из html


14-1098581802
Думкин
2004-10-24 05:36
2004.11.21
С днем рождения! 24 октября