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

Вниз

Control UpDown has no parent window   Найти похожие ветки 

 
Grinder ©   (2004-01-29 16:47) [0]

Когда передаю UpDown.SetFocus идет ошибка
Control "UpDown" has no parent window
Почему? У меня форма находится на THintWindow (т.е. form.parent:=hintwindow).


 
Ega23 ©   (2004-01-29 16:49) [1]

А что такое UpDown?


 
Юрий Зотов ©   (2004-01-29 16:49) [2]

А чему равно UpDown.Parent?


 
Grinder ©   (2004-01-29 17:36) [3]

2 Юрий Зотов
Показывает form как ни странно.

2 Ega23
Это компонент такой есть.


 
Ega23 ©   (2004-01-29 17:53) [4]

А CanFocus у него свойство чему равно?


 
Юрий Зотов ©   (2004-01-29 18:03) [5]

> Grinder

Возможно, вы просто слишком рано вызываете SetFocus, когда окно UpDown еще не создано. Для некоторых контролов (в том числе, из серии ComCtrl, к которой и относится UpDown) такое поведение характерно (потому что для них, в отличие от других, обращение к Handle не приводит к автосозданию окна).


 
Grinder ©   (2004-01-29 22:23) [6]

2 Юрий Зотов

Вообще-то когда я не присваивал форме parent к хинту всё работало нормально. А когда присвоил - такая вот ерунда.


 
Grinder ©   (2004-01-29 22:56) [7]

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


 
Grinder ©   (2004-01-29 23:06) [8]

2 Юрий Зотов

Пробовал компоненты из StdCtrls (TEdit). Тоже не фокусится.


 
Юрий Зотов ©   (2004-01-30 12:06) [9]

> Grinder © (29.01.04 23:06) [8]

Похоже на несовместимость стилей окон. А зачем вообще такое суперхитроумное решение - форму в хинт засовывать? Если это не принципиально важно, то не лучше ли отказаться от такого необычного сочетания? Там может быть не один подводный камень (и, похоже, с первым Вы уже столкнулись).

Иначе, видимо, придется аккуратно разбираться со стилями своей формы и хинта (см. CreateParams).


 
yo   (2004-01-30 14:05) [10]

А сам хинт имеет парента?
Если да, то его парент имеет ли своего и тд?


 
yo   (2004-01-30 14:12) [11]

кстати, у хинта

procedure THintWindow.WMNCHitTest(var Message: TWMNCHitTest);
begin
Message.Result := HTTRANSPARENT;
end;

поэтому сообщения мыши он своим деткам передавать не будет.


 
Petr V. Abramov ©   (2004-01-30 15:07) [12]

Похоже, дело в следующем: (D6)
смотрим

procedure TWinControl.SetFocus;
var
Parent: TCustomForm;
begin
Parent := GetParentForm(Self);
if Parent <> nil then
Parent.FocusControl(Self)
else if ParentWindow <> 0 then
Windows.SetFocus(Handle)
else
ValidParentForm(Self);
end;

смотрим
function GetParentForm(Control: TControl): TCustomForm;
begin
while Control.Parent <> nil do Control := Control.Parent;
if Control is TCustomForm then
Result := TCustomForm(Control) else
Result := nil;
end;
по-русски - пробегаем по цепочке Parent`ов, пока Parent <> nil
Если самый Parent :) - TCustomForm, это и есть результат. Но у нас самый Parent :) - THintWindow, который не "is TCustomForm".
т.е ParentForm`ы у нашего UpDown якобы нету.
Если еще нету и ParentWindow ( которое при присваивании Parent не меняется), получаем subj
Это к вопросу "кто виноват"

Что делать - скорее всего, поможет UpDown.ParentWindow := form.Handle


 
Grinder ©   (2004-01-30 18:54) [13]

2 Petr V. Abramov
В том-то и дело. Пробовал - не помогает.

2 Юрий Зотов
Просто мне надо, чтобы для одного контрола выводился хинт с календарем и прочими фичами. Ну проблема решилась только присвоением форме как родителя хинта. Если есть альтернативные решения - я буду рад.


 
GrayFace ©   (2004-02-04 14:44) [14]

Делай вручную. Если у компонента есть OnMoseLeave, то это легко. Если нет, то GetWindowLong и SetWindowLong подменяешь WinProc и обрабатываешь CM_MOUSEENTER и CM_MOUSELEAVE.


 
Silver_ ©   (2004-02-04 15:38) [15]

Форма не Видна/Активна я это лечил так

if UpDown.CanFocus then
UpDown.SetFocus;



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

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

Наверх




Память: 0.5 MB
Время: 0.034 c
3-38723
Жук
2004-01-20 14:39
2004.02.13
Проход по BookmarkList


1-38830
Yr2
2004-02-02 14:34
2004.02.13
Low-pass filter


1-38825
Крутыш
2004-02-02 22:06
2004.02.13
пользователем FlexCell


1-38939
СержК
2004-02-04 09:50
2004.02.13
Выделение строки в RxDBGrid другим цветом


1-38841
alless
2004-02-02 17:45
2004.02.13
RichEdit