Главная страница
    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.45 MB
Время: 0.037 c
1-1100007259
Bifor
2004-11-09 16:34
2004.11.21
TEdit disabled цвет шрифта


6-1095054706
Alexis
2004-09-13 09:51
2004.11.21
отсутствуют ф-ции WSACreateEvent, WSAEventSelect в Winsock.pas


14-1099253398
Вопрошающий1
2004-10-31 23:09
2004.11.21
Интеграция однопольз. 1С и сторонего клиент-сервер с выписки.


6-1094815553
Alexander_PK
2004-09-10 15:25
2004.11.21
Народ срочно нужен компонет для работы на Маэл слотах, помогите!!


14-1099854463
Ospa
2004-11-07 22:07
2004.11.21
Инсталятор????





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский