Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
1-38851
Натуся
2004-02-01 23:23
2004.02.13
Плюс один месяц


1-38780
staryx
2004-02-03 16:21
2004.02.13
WML 1.1


1-38852
kav
2004-02-02 12:42
2004.02.13
ComObj


7-39118
Cash
2003-11-30 00:39
2004.02.13
Поиск в папках и подпапках


7-39122
vidiv
2003-11-06 06:30
2004.02.13
генератор





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