![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MDI Child в роли досовой консоли
ssk © (2004-11-24 14:20:00)Всем привет! Кто-нибудь знает, как реализовать сабж или в принципе невозможно?
З.Ы. разного рода советы "кинь Memo & Edit" просьба не предлагать.
GuAV (2004-11-29 18:39:00) [1]Для MDI идея такая - на каждую ком. строку создавать MDI Child окно, у самой командной строки убирать заголовок и границу и вставлять его в это MDI Child окно, сообщения для Child типа WM_GETMINMAXINFO, SIZE пересылать окну ком. строки. Короче делается.
Различия 9х и ХР: WaitForInputIdle - в 9х вернёт когда все окна созданы, в ХР почему-то раньше. В ХР одно окно 'ConsoleWindowClass', а в 9х несколько окон.
GuAV (2004-11-29 18:21:00) [2]Кое что получилось. А именно - запуздырить коммандную строку в обычное SDI окно.
IMHO, ещё немного поэкспериментировать и будет сабж.
function EnumThreadWndProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
begin
SetParent(hWnd, lParam);
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: HWND;
SI: TStartupInfo;
PI: TProcessInformation;
begin
case SysUtils.Win32Platform of
VER_PLATFORM_WIN32_WINDOWS: // проверено в Win98
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Win32Check(CreateProcess(nil, 'COMMAND.COM',
nil, nil, False, 0, nil, nil, SI, PI));
try
WaitForInputIdle(PI.hProcess, INFINITE);
EnumThreadWindows(PI.dwThreadId,
@EnumThreadWndProc, Handle);
finally
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
end;
VER_PLATFORM_WIN32_NT: // проверено в WinXP
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Win32Check(CreateProcess(nil, 'COMMAND.COM',
nil, nil, False, 0, nil, nil, SI, PI));
try
WaitForInputIdle(PI.hProcess, INFINITE);
repeat
Wnd := FindWindow('ConsoleWindowClass', nil);
Sleep(50);
until Wnd <> 0;
Windows.SetParent(Wnd, Handle);
finally
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
end;
end;
end;
ssk (2004-11-24 15:06:00) [3]Спасибо за ответы. Буду разбираться дальше.
TUser (2004-11-24 14:57:00) [4]
> это не я придумал такую прихоть.
Сделай [3] (или через пайпы) - пусть заказчик/начальник/препод думает, что это ДОС-консоль.
ssk (2004-11-24 14:56:00) [5]>дурней не придумаешь - пытаться засандалить досову консоль в кач-ве доч.окна
согласен на все 100%, но надо сделать именно так. это не я придумал такую прихоть. так что если есть идеи - предлагайте.
>Вы уточните, что вам нужно:
есть MDIChild. в нем нужно реализовать полную работу командной строки, как в NT
Digitman (2004-11-24 14:47:00) [6]дурней не придумаешь - пытаться засандалить досову консоль в кач-ве доч.окна
никто не ограничивал пока еще назначение StdIn- и StdOut-дивайсов для ассоциированного с досовой консолью ввода/вывода
Rem (2004-11-24 14:43:00) [7]О какой "досовой" консоли идет речь?
Вы уточните, что вам нужно: консольное приложение, которое, на самом деле, к DOS не имеет никакого отношения, или командная строка*, которая к DOS тоже никакого отношения не имеет?
* Платформа NT
TUser (2004-11-24 14:41:00) [8]
> З.Ы. разного рода советы "кинь Memo & Edit" просьба не предлагать.
А чего так?