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

Вниз

TWinControl   Найти похожие ветки 

 
P@vel   (2004-06-17 11:18) [0]

Можно создать компонент не имеющий родителя и (или) владельца?


 
evvcom ©   (2004-06-17 11:23) [1]

Само понятие "компонент" подразумевает класс-наследованик от TComponent. А без владельца - легко. TMyComponent.Create(nil);


 
evvcom ©   (2004-06-17 11:27) [2]

А... родителя... Можно без родителя, но тогда ты его не увидишь.


 
P@vel   (2004-06-17 11:44) [3]

Мне его видеть не надо. Мне нужен обьект который сможет принимать сообщения.


 
Тимохов ©   (2004-06-17 11:58) [4]


>
> P@vel   (17.06.04 11:44) [3]
> Мне его видеть не надо. Мне нужен обьект который сможет
> принимать сообщения.

чтобы принимать сообщения можно сделать невидимое окно самому с помощью
function AllocateHWnd(Method: TWndMethod): HWND;
procedure DeallocateHWnd(Wnd: HWND);

посмотри как это сделано в ttimer


 
evvcom ©   (2004-06-17 12:07) [5]

или в TThread


 
ПсихЪ   (2004-06-17 12:07) [6]

Чё-то я туплю... ):
Создаю массив элементов типа TEdit:

EditArr : array of TEdit;

Далее мне нужно на форме Form1 показать один TEdit:

SetLength( EditArr, 1 );
EditArr[0] := TEdit.Create( Form1 );
// Далее заполняю параметры ьтпа Left, Top, Width, Height и т.д.

Что делать дальше, чтобы элемент TEdit отобразился на форме?


 
Тимохов ©   (2004-06-17 12:09) [7]


> Что делать дальше, чтобы элемент TEdit отобразился на форме?

как минимум Parent выставить.


 
Rem   (2004-06-17 12:09) [8]

> Мне нужен обьект который сможет принимать сообщения.

TObject.Dispatch(Msg);


 
Тимохов ©   (2004-06-17 12:12) [9]


> TObject.Dispatch(Msg);

но для этого сначала msg надо получить, а для этого нужна очередь выборки сообщений. имхо.

либо скрытое окно делать - очередь выборки будет штатной (главного потока).

либо делать доп поток - там делать выборку сообщений. Но если сообщения будут посылвать по sendmessage (т.е. синхнронные) то в потоке нужно делать окно все равно - иначе такие собщения будут игнорироваться.


 
ПсихЪ   (2004-06-17 12:14) [10]


> Тимохов

ПРЕОГРОМНЕЙШЕЕ ТЕБЕ СПАСИБО!!! Вот ни за что не мподумал бы... ): Т.е. вроде и логично, но ведь ни за что бы не подумал, что "криэтя" TEdit по родителю, родителя придётся прописывать отдельно... (:


 
Sandman25 ©   (2004-06-17 12:15) [11]

[10] ПсихЪ   (17.06.04 12:14)

В create не родитель, а владелец.

PS. Боже, ну и день сегодня :)


 
evvcom ©   (2004-06-17 12:17) [12]

"Криэтя" по родителю (Owner), ты указываешь, кто потом будет ответственнен за его убийство. А Parent - кто ответственнен за его отображание.


 
Тимохов ©   (2004-06-17 12:18) [13]

Господа

> Sandman25 ©   (17.06.04 12:15) [11]


> evvcom ©   (17.06.04 12:17) [12]

Он же издевается :))) имхо...


 
Sandman25 ©   (2004-06-17 12:19) [14]

Удалено модератором


 
ПсихЪ   (2004-06-17 12:20) [15]

Удалено модератором


 
evvcom ©   (2004-06-17 12:20) [16]

Удалено модератором


 
Тимохов ©   (2004-06-17 12:21) [17]

Удалено модератором


 
ПсихЪ   (2004-06-17 12:31) [18]

Удалено модератором


 
Тимохов ©   (2004-06-17 12:43) [19]

Удалено модератором


 
ПсихЪ   (2004-06-17 14:39) [20]

Удалено модератором


 
Тимохов ©   (2004-06-17 14:48) [21]

Удалено модератором


 
ПсихЪ ©   (2004-06-17 14:57) [22]

Удалено модератором


 
P@vel   (2004-06-17 16:35) [23]

Всем большое спасибо. Это реально помогло. Я уж было пытался через. CreateWindowEx но это какаято нереальная запарка. Класс регестрируется без проблем, а вот при попытке создания самого окна постоянно получаю ошибку 1400.


 
ПсихЪ ©   (2004-06-18 12:34) [24]

А вот с элементом TLabel всё несколько по другому. У него нет пропертей ParentWindow, которое есть у TEdit.
TEdit:

var
 Form : TForm;
 Edit : TEdit;
begin
 Edit := TEdit.Create( Form );
 Edit.ParentWindow := Form.Handle;
end.

TLabel:

var
 Form : TForm;
 Label : TLabel;
begin
 Label := TLabel.Create( Form );
 Label.Parent := TWinControl( Form );
end.


 
jack128 ©   (2004-06-18 19:43) [25]


> > TObject.Dispatch(Msg);
>
> но для этого сначала msg надо получить, а для этого нужна
> очередь выборки сообщений. имхо.
не совсем. В дельфи есть собственное понятие "сообщение". TControl реализован так, что сообщение в терминах Windows преобразуется в сообщения Дельфи
procedure TControl.WndProc(var Message: TMessage);
var
 Form: TCustomForm;
begin
...
 Dispatch(Message);
end;
Поэтому Rem прав - даже TObject может принемать сообщения,  но только сообщения Delphi, а не Windows. Ответ в духе app(c) - абсолютно коректен ;-)



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

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

Наверх




Память: 0.5 MB
Время: 0.024 c
14-1086983536
Godlike
2004-06-11 23:52
2004.07.04
Game Muonline


14-1087041779
juiceman
2004-06-12 16:02
2004.07.04
Как установить в 98ой сетевое окружение ?


3-1086730721
Zeon
2004-06-09 01:38
2004.07.04
Как удалить строку из XML таблици?


3-1086629707
miwa
2004-06-07 21:35
2004.07.04
O collate в Interbase.


1-1087801439
Lion
2004-06-21 11:03
2004.07.04
Прерывания





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