Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизMDI Child в роли досовой консоли Найти похожие ветки
← →
ssk © (2004-11-24 14:20) [0]Всем привет! Кто-нибудь знает, как реализовать сабж или в принципе невозможно?
З.Ы. разного рода советы "кинь Memo & Edit" просьба не предлагать.
← →
TUser © (2004-11-24 14:41) [1]
> З.Ы. разного рода советы "кинь Memo & Edit" просьба не предлагать.
А чего так?
← →
Rem © (2004-11-24 14:43) [2]О какой "досовой" консоли идет речь?
Вы уточните, что вам нужно: консольное приложение, которое, на самом деле, к DOS не имеет никакого отношения, или командная строка*, которая к DOS тоже никакого отношения не имеет?
* Платформа NT
← →
Digitman © (2004-11-24 14:47) [3]дурней не придумаешь - пытаться засандалить досову консоль в кач-ве доч.окна
никто не ограничивал пока еще назначение StdIn- и StdOut-дивайсов для ассоциированного с досовой консолью ввода/вывода
← →
ssk © (2004-11-24 14:56) [4]>дурней не придумаешь - пытаться засандалить досову консоль в кач-ве доч.окна
согласен на все 100%, но надо сделать именно так. это не я придумал такую прихоть. так что если есть идеи - предлагайте.
>Вы уточните, что вам нужно:
есть MDIChild. в нем нужно реализовать полную работу командной строки, как в NT
← →
TUser © (2004-11-24 14:57) [5]
> это не я придумал такую прихоть.
Сделай [3] (или через пайпы) - пусть заказчик/начальник/препод думает, что это ДОС-консоль.
← →
ssk © (2004-11-24 15:06) [6]Спасибо за ответы. Буду разбираться дальше.
← →
GuAV © (2004-11-29 18:21) [7]Кое что получилось. А именно - запуздырить коммандную строку в обычное 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;
← →
GuAV © (2004-11-29 18:39) [8]Для MDI идея такая - на каждую ком. строку создавать MDI Child окно, у самой командной строки убирать заголовок и границу и вставлять его в это MDI Child окно, сообщения для Child типа WM_GETMINMAXINFO, SIZE пересылать окну ком. строки. Короче делается.
Различия 9х и ХР: WaitForInputIdle - в 9х вернёт когда все окна созданы, в ХР почему-то раньше. В ХР одно окно "ConsoleWindowClass", а в 9х несколько окон.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c