![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать дочерний контрол, зная только HWND радителя [Delphi, Windows]
bigcrush © (2004-04-26 14:55:00)Собственно, сабж.
bigcrush (2004-04-29 15:21:00) [1]Сработало, спасибо.
SPeller (2004-04-28 15:28:00) [2]Попробуй сделать ему Show.
bigcrush (2004-04-28 15:03:00) [3]tm.fHandle:=Form.GetWindowHandle- я для примера взял форму в качестве окна HWND. Это и есть ParenWnd.
Я вот так сделал:
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var q:PControl;
begin
New( tm, Create );
tm.fHandle := Form.GetWindowHandle;
tm.fStyle := GetWindowLong( Form.GetWindowHandle, GWL_STYLE );
tm.fExStyle := GetWindowLong( Form.GetWindowHandle, GWL_EXSTYLE );
tm.fEnabled := True;
tm.fVisible := True;
tm.fIsForm := True;
tm.fIsControl := False;
q:=NewEditbox(tm, []);
q.SetPosition(0, 0);
q.SetSize(100,100);
q.Enabled:=true;
q.Visible:=true;
Но на форме не появляется новый Edit. Я вместо Form пробывал взять Panel - результат тот же.
SPeller (2004-04-27 13:02:00) [4]Зачем вот это tm.fHandle:=Form.GetWindowHandle?? В моём примере переменная ParentWnd и есть тот самый хендл окна, на котором размещается всё остальное. Просто в моём случае я на переданном окне создаю ещё одно окно (мою форму). Тебе же достаточно вместо NewForm в моём случае вставить свой NewEditbox.
bigcrush (2004-04-27 12:40:00) [5]> SPeller © (27.04.04 03:00) [3]
Может быть я не то сделал, но не получается. Так не верно?:
tm.fHandle:=Form.GetWindowHandle;
...
NewEdit(tm, []);
Суть в следующем:
Прога на C++. В ней подключается библиотека с KOL формой, которой можно передать только HWND окна где нужно расположить Edit-ы, Label-ы, и т.д.
Мне и нужно создать, скажем, Edit в окне, у которого известно только HWND
SPeller (2004-04-27 03:00:00) [6]Ну,... тогда через задницу:
Создаём тип объекта, например такой
TCControl = object( TControl )
end;
Затем в процедуре, например, так:
var
tm: TCControl;
begin
New( tm, Create );
tm.fHandle := ParentWnd;
tm.fStyle := GetWindowLong( ParentWnd, GWL_STYLE );
tm.fExStyle := GetWindowLong( ParentWnd, GWL_EXSTYLE );
tm.fEnabled := True;
tm.fVisible := True;
tm.fIsForm := True;
tm.fIsControl := False;
NewfrmMain( Frm, tm );
...
Gandalf (2004-04-26 21:15:00) [7]Толкьо там не все хорошо будет с обработкой сообщений насколько я помню. Все таки KOL любит работать с родным.
SPeller (2004-04-26 16:06:00) [8]Создать с nil-родителем, а потом SetParent.