Форум: "KOL";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
ВнизКак создать дочерний контрол, зная только 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 вся ветка
Форум: "KOL";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c