Текущий архив: 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