![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обмен данными между двумя моими приложениями [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;