Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.034 c
1-1099477729
YeasU
2004-11-03 13:28
2004.11.21
Почему StrLen(PChar(Str:string)) возвращает 0 ?


14-1099683871
Pat
2004-11-05 22:44
2004.11.21
Помогите определить на чем написана прога


1-1100064862
vlgrig1961
2004-11-10 08:34
2004.11.21
Как сделать Alignment у TEdit-a


1-1099653712
Алеся
2004-11-05 14:21
2004.11.21
Ввод из текстового файла через Pchar


3-1098418036
Denis_Ac
2004-10-22 08:07
2004.11.21
Заполнение DBCombobox/ DBListBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский