Главная страница
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.52 MB
Время: 0.026 c
1-1087881907
Дарья
2004-06-22 09:25
2004.07.04
Помогите пожалуйста !


1-1087286985
Konstantin
2004-06-15 12:09
2004.07.04
Помогите пожалуйста сохранить настройки программы


14-1087179806
RealRascal
2004-06-14 06:23
2004.07.04
АСЯ:Вирусня? Или просто СПАМ?


14-1087146631
hgd
2004-06-13 21:10
2004.07.04
СРОЧНО


1-1087308510
novi
2004-06-15 18:08
2004.07.04
Несоотсетствие типов