Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
14-1101124657
menart
2004-11-22 14:57
2004.12.12
У кого есть delphi7


1-1101844510
Fido24
2004-11-30 22:55
2004.12.12
Приложения на базе ISAPI/NSAPI???


6-1096729488
Луарвик
2004-10-02 19:04
2004.12.12
Правильный запрос (а не вопрос :))


1-1101710156
maxistent
2004-11-29 09:35
2004.12.12
кард-ридеры


3-1100521367
VadimK
2004-11-15 15:22
2004.12.12
Создание Cursor в ХП, через компоненты DBExpress