Главная страница
    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.034 c
1-1100257938
Mishenka
2004-11-12 14:12
2004.11.28
Как имея доступ к компоненту получить на него указатель?


1-1100200566
xkiller
2004-11-11 22:16
2004.11.28
В exe-файле несколько разных иконок


1-1100589418
П7
2004-11-16 10:16
2004.11.28
Работа с Tab ами в TPageControl


1-1100165505
PURGEN
2004-11-11 12:31
2004.11.28
LoadFromStream


1-1100542950
тт
2004-11-15 21:22
2004.11.28
record?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский