Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Как создать дочерний контрол, зная только HWND радителя   Найти похожие ветки 

 
bigcrush   (2004-04-26 14:55) [0]

Собственно, сабж.


 
SPeller ©   (2004-04-26 16:06) [1]

Создать с nil-родителем, а потом SetParent.


 
Gandalf ©   (2004-04-26 21:15) [2]

Толкьо там не все хорошо будет с обработкой сообщений насколько я помню. Все таки KOL любит работать с родным.


 
SPeller ©   (2004-04-27 03:00) [3]

Ну,... тогда через задницу:
Создаём тип объекта, например такой

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 );
  ...


 
bigcrush   (2004-04-27 12:40) [4]

> SPeller ©   (27.04.04 03:00) [3]
Может быть я не то сделал, но не получается. Так не верно?:
tm.fHandle:=Form.GetWindowHandle;
...
NewEdit(tm, []);

Суть в следующем:

Прога на C++. В ней подключается библиотека с KOL формой, которой можно передать только HWND окна где нужно расположить Edit-ы, Label-ы, и т.д.
Мне и нужно создать, скажем, Edit в окне, у которого известно только HWND


 
SPeller ©   (2004-04-27 13:02) [5]

Зачем вот это tm.fHandle:=Form.GetWindowHandle?? В моём примере переменная ParentWnd и есть тот самый хендл окна, на котором размещается всё остальное. Просто в моём случае я на переданном окне создаю ещё одно окно (мою форму). Тебе же достаточно вместо NewForm в моём случае вставить свой NewEditbox.


 
bigcrush   (2004-04-28 15:03) [6]

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-28 15:28) [7]

Попробуй сделать ему Show.


 
bigcrush   (2004-04-29 15:21) [8]

Сработало, спасибо.



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
14-1100179330
peypivo
2004-11-11 16:22
2004.11.28
Джава и ЖПРС


1-1100192842
novice_man
2004-11-11 20:07
2004.11.28
Access violation at adress ...


14-1100246641
Gorlum
2004-11-12 11:04
2004.11.28
Что это за фигня с установщиком?


14-1100455385
ИМХО
2004-11-14 21:03
2004.11.28
Татьяна Пельтцер


14-1100279610
vertal
2004-11-12 20:13
2004.11.28
Блокировка удаления exe во время его исполнения в Win NT(2000)