Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Borland C++ Builder/Turbo C++ Explorer > Запуск приложения в окне формы.


Автор: sat_art 22.09.21, 13:41
Добрый день.
Прошу помощи.
Смысл в чем - пишу аналог Putty Connection Manager.

Putty - это терминал для подключения по телнету и ssh.

Putty Connection Manager - приложение которое запускает несколько экземпляров терминала Putty у себя в окне. Сам он не нравится по нескольким причинам.

Вопрос в чем - как правильно запустить стороннее приложение, что бы оно отобразилось например в TTabSheet моей формы и убрать бордюр.
Запускаю, устанавливаю парентом TTabSheet. Все хорошо - но, никак не получается убрать WS_BORDER и WS_CAPTION. Если делаю WS_POPUP - получается окно без бордюра, но проблема со скролом.
Перепробовал кучу всего - понимаю, что что то делаю не так.

Еще когда парентом делаю свой TTabSheet, окно нормально отображается в пределах TTabSheet, но когда оно активно, основная форма почему то неактивна становится. Чую тут где то собака порылась.
Получается нормально отобразить, только если нажать в самом putty fullscreen. Тогда он разворачивается как надо.

Вот как это выглядит в Putty Connection Manager
pcm.png (, : 87)
Вот что получается у меня.
pcm1.png (, : 85)

Может кто подскажет умную мысль.

Автор: ЫукпШ 23.09.21, 21:36
Цитата sat_art @
Putty Connection Manager - приложение которое запускает несколько экземпляров терминала Putty у себя в окне.

sat_art, а этот Мanager точно запускает именно putty ?
---
Есть ещё такой вариант - используем не сам putty, а plink из putty-набора.
Это клиент командной стороки.
Plink можно запускать с перехватом ввода/вывода без показа
консольного окна.
И тогда рисуй что и как хочешь в своих окошках.
Типовые (для тебя) операции с сервером можно будет вообще выполнять
одним щелчком мыши, поскольку можно будет автоматизировать
выдачу серии запросов (с контролем ответов).

Автор: sat_art 24.09.21, 05:26
ЫукпШ точно PuTTY.
Я думал над вариантом plink - но городить свое окно терминала с разбором входящих символов намного сложнее. Да - это уже и приложение немного другого уровня получается, которое наворачивай и наворачивай. Но так там и до организации ssh недалеко, и нафиг тогда вообще тот PuTTY.

Автор: ЫукпШ 24.09.21, 14:01
Цитата sat_art @
Вопрос в чем - как правильно запустить стороннее приложение, что бы оно отобразилось например в TTabSheet моей формы и убрать бордюр.

sat_art, можно посмотреть исходники Putty Connection Manager.
Вот ещё ссылка 1, 2 -
там по исходнику комментарий:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ...
    // убрать рамку окна
     SetWindowLong(appHandle, GWL_STYLE, WS_VISIBLE);
    ...

Автор: sat_art 24.09.21, 14:12
ЫукпШСпасибо.
Исходников я не нашел.
А по ссылке - все это давно перепробовал, все получается кроме убрать рамку.
Уже смотрю в сторону CreatePseudoConsole. :D

Добавлено
После SetWindowLongPtr(hwnd, GWL_STYLE,WS_VISIBLE)
GetWindowLongPtr(hwnd, GWL_STYLE) дает 0x10E40000 - WS_VISIBLE|WS_BORDER|WS_DLGFRAME|WS_VSCROLL|WS_SIZEBOX
Если по одному пытаться выключить - не выключается WS_BORDER и WS_DLGFRAME.

Добавлено
Тонкая рамка вокруг окна пропадает. А вот заголовок окна нет.

Автор: ЫукпШ 24.09.21, 22:02
Исходники Putty Connection Manager
Это можно обнаружить отсюда
-----
Вот, посмотри - у этого автора всё получилось:
user posted image

Попробуй не Tab - контрол, а просто "панель". Как на этой картинке.

Автор: sat_art 25.09.21, 15:54
Цитата ЫукпШ @
Попробуй не Tab - контрол, а просто "панель". Как на этой картинке

Пробовал даже просто в форму - нет.

Автор: sat_art 25.09.21, 15:58
Вот получилось
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
            SetWindowPos(hwnd, HWND_TOP, 0, 0, Width, Height, SWP_FRAMECHANGED);
            SetWindowLongPtr(hwnd, GWL_STYLE,WS_VISIBLE|WS_MAXIMIZE|WS_VSCROLL);


Вроде и до этого так же пробовал.
Х.З. короче.

Теперь у меня свой Putty Connection Manager - назовем его Putty Multiple Connection.

ЫукпШ спасибо за помощь.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)