Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
3-1100166567
Автор333
2004-11-11 12:49
2004.12.12
Сложение столбца!


3-1100363168
zz 5
2004-11-13 19:26
2004.12.12
View в Interbase


3-1100082487
Pertovsky
2004-11-10 13:28
2004.12.12
Десятичные разряды.


8-1093890137
Ландграф Павел
2004-08-30 22:22
2004.12.12
чтение формата RealAudio


1-1101634029
AdmeraL.
2004-11-28 12:27
2004.12.12
Dialogs





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