Главная страница
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.027 c
14-1099564515
Ozone
2004-11-04 13:35
2004.11.21
Учимся писать документацию


14-1099353829
ДЫМ
2004-11-02 03:03
2004.11.21
Какой installer посоветуете?


14-1099480482
AlexR
2004-11-03 14:14
2004.11.21
Работа с dll.


14-1099238656
DeadMeat
2004-10-31 19:04
2004.11.21
Eradicator


1-1099758887
Павел
2004-11-06 19:34
2004.11.21
компонент наподобии TPageControl