Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.035 c
1-1099942188
Rusty
2004-11-08 22:29
2004.11.28
Вызов процедуры, принадлежащей дочернему окну...


1-1100173549
kirov_igor
2004-11-11 14:45
2004.11.28
printer


14-1100076018
Григорьев Антон
2004-11-10 11:40
2004.11.28
Так вычисляются роботы :))


1-1100177008
gonzales
2004-11-11 15:43
2004.11.28
Разложить файл на несколько частей


6-1095438585
maxistent
2004-09-17 20:29
2004.11.28
TPOP3 & TSMTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский