![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поместить чужое окно(приложение) в свое окно(window, panel, etc.) [D6, WinXP]
Teenager © (2006-09-01 18:58:00)Здравствуйте, добрые люди :) вы случаем не знаете, как поместить чужое окно (калькулятор, проигрыватель) в свое окно - или дочерний компонент своего окна?
1) мысль: по идее можно, ведь можно же делать свой Desktop как-то... просто при вызове чужого приложения надо бы как-то сделать своё - родителем чужого окна
2) желательно - отсутствие использования VCL. потому и пишу в тему WinAPI.
3) буду очень благодарен, если поможете :) на всякий случай мой ящик shmromacs@yandex.ru
4) желательно без COM и всяких там интерфейсов.
5) вероятнее всего, в конечном итоге будет использоваться либо Дельфи, либо С#... надеюсь, предложенные варианты возможно будет реализовать в любой среде разработки.
Заранее спасибо :)
Teenager (2006-09-01 23:55:00) [1]ааааааааааа :) все работает ^_^
оч просто и понятно :))
даже сложные приложения или даже части их - все прекрасно залазит в мои окна!
приятно, что есть люди, которые никогда не против помочь )) за что им большое спасибо и моя счастливая улыбка :)
PSPF2003 (2006-09-01 19:50:00) [2]М.Фленов
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
THaosForm = class(TForm)
bStart: TButton;
Bevel1: TBevel;
bDelMenu: TButton;
MainMenu1: TMainMenu;
Windows1: TMenuItem;
linux1: TMenuItem;
Windows2: TMenuItem;
Linux2: TMenuItem;
Linux3: TMenuItem;
Linux4: TMenuItem;
bDelCaption: TButton;
procedure bStartClick(Sender: TObject);
procedure bDelMenuClick(Sender: TObject);
procedure bDelCaptionClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
HaosForm: THaosForm;
implementation
{$R *.dfm}
function EnumWindowsProc(h: hwnd; lparam:Integer): BOOL; stdcall;
begin
if IsWindowVisible(h) then
SetParent(h, HaosForm.Handle);
Result:=true;
end;
function EnumWindowsProc1(h: hwnd; lparam:Integer): BOOL; stdcall;
begin
if IsWindowVisible(h) then
SetMenu(h, HaosForm.MainMenu1.Handle);
Result:=true;
end;
function EnumWindowsProc2(h: hwnd; lparam:Integer): BOOL; stdcall;
begin
if IsWindowVisible(h) then
SetWindowLong(h, GWL_STYLE, GetWindowLong(h, GWL_STYLE) - WS_CAPTION);
Result:=true;
end;
procedure THaosForm.bStartClick(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc, 0);
end;
procedure THaosForm.bDelMenuClick(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc1, 0);
end;
procedure THaosForm.bDelCaptionClick(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc2, 0);
end;
end.
Teenager (2006-09-01 19:45:00) [3]ааам... дякую :) как я понял - если найти хэндл чужого окна, и вызвать апишную функцию SetParent, передав туда хэндл моей формы и хэндл чужого окна, то чужое окно налегке согласится рисоваться и работать в моем маленьком оконце?
Если да, то все намного легче, чем я думал.
Спасибо. Проверю. Отвечу.
PSPF2003 (2006-09-01 19:34:00) [4]Может лучше старый оставить?
PSPF2003 (2006-09-01 19:32:00) [5]FindWindow тебе поможет.
PSPF2003 (2006-09-01 19:31:00) [6]Windows.SetParent(Окно.Handle, GetDesktopWindow);