Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c