Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать дочерний контрол, зная только 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо