Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обмен данными между двумя моими приложениями [D6, D7, WinXP]


Comp ©   (2004-11-07 16:57:00) 

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


Defunct   (2004-11-07 18:49:00) [1]

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

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;


Defunct   (2004-11-07 18:42:00) [2]

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

Консоль:

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо