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

Вниз

Странно... (создание контролов в run-time)   Найти похожие ветки 

 
BlackTiger   (2002-12-28 14:07) [0]

Где-то что-то я пропускаю... Подскажите plz!

Есть форма. В ней есть контрол TRxCheckListBox (он служит шаблоном), у него (ну или просто на форме) есть TPopupMenu (Menu1). Далее, уже в процессе работы, мне нужно создать n-ное количество подобных CheckListBox", содержащих разные данные, зависящие от конкретных условий. И каждому новому контролу я цепляю

Сами компоненты создаются, заполняются и работают - не в этом дело.
Проблема вот какая: почему-то эти "новые" контролы НИКОГДА на фигурируют в Self.ActiveControl! Т.е я вызываю popup-менюшку и пытаюсь получить имя контрола,- из которого ее вызвали (через Self.ActiveControl.Name). Так эта рперация сообщает, что ActiveControl в данный момент - это некий ControlX. На форме есть еще несколько листбоксов, не имеющих к проблеме отношения, но созданных в дизайне - так вот это один из них.
Т.е. фокус-то на эти контролы наводится, но они почему-то как-то странно "прописываются" в форме. Функции вроде "Self.Components.Refresh" я не нашел.

Решение-то нашел, но очень уж извращенческое. Хочется узнать, почему не срабатывает мой подход?

Может есть другой медот определения "хозяина" менюшки

ЗЫ: Parent"ы всякие пробовал, тоже галиматья какая-то. При приведении типа объекта к TRxCheckListBox вываливается нафиг без сообщения конкретной ошибки.

ЗЗЫ: Делал тест, создавая такие же контролы в дизайне и использовал их в том же назначении (но менюшку привязывал тоже в run-time) - все работает. В ActiveControl фигурировало то, что и должно фигурировать.

ЗЗЗЫ: Ну и где грабли порылись? Ж-)


 
gsu   (2002-12-28 14:14) [1]

>> Может есть другой медот определения "хозяина" менюшки
Owner разве не хозяин ?


 
BlackTiger   (2002-12-28 14:52) [2]

Хе-хе... забыл сказать про Owner. В качестве Owner"a выступает ФОРМА, а не контрол, которому принадлежит менюшка, что есть правильно, ибо ОДНА менюшка может быть вызвана из НЕСКОЛЬКИХ мест.

Да, еще, если надо - все "новые" контролы запихиваются в TStringList.


 
han_malign   (2002-12-28 15:00) [3]

TPopupMenu.PopupComponent


 
BlackTiger   (2002-12-28 15:07) [4]

Опаньки!

Нашел, моё косяк!

Нужно делать Self.InsertControl().

Пардон, господа, вопрос снимается...


 
han_malign   (2002-12-28 15:13) [5]

насколько я помню грабли в том что смена фокуса происходит после WM_CONTEXTPOPUP - в котором сразу вызывется onPopup
PopupComponent - 100%

procedure TControl.WMContextMenu(var Message: TWMContextMenu);
var
Pt, Temp: TPoint;
Handled: Boolean;
PopupMenu: TPopupMenu;
begin
if Message.Result <> 0 then Exit;
if csDesigning in ComponentState then Exit;

Pt := SmallPointToPoint(Message.Pos);
if Pt.X < 0 then
Temp := Pt
else
begin
Temp := ScreenToClient(Pt);
if not PtInRect(ClientRect, Temp) then
begin
inherited;
Exit;
end;
end;

Handled := False;
DoContextPopup(Temp, Handled);
Message.Result := Ord(Handled);
if Handled then Exit;

PopupMenu := GetPopupMenu;
if (PopupMenu <> nil) and PopupMenu.AutoPopup then
begin
SendCancelMode(nil);
PopupMenu.PopupComponent := Self;
if Pt.X < 0 then
Pt := ClientToScreen(Point(0,0));
PopupMenu.Popup(Pt.X, Pt.Y);
Message.Result := 1;
end;

if Message.Result = 0 then
inherited;
end;

- inherited - после...
- а непосредственно WM_SETFOCUS - генрится только по левой кнопке.



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

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

Наверх




Память: 0.45 MB
Время: 0.009 c
8-37227
Dick
2002-09-24 19:46
2003.01.13
Алгоритм


3-36946
Matvey
2002-12-18 11:54
2003.01.13
Запрос к БД выборка от начала месяца


1-37168
xyz
2002-12-27 00:48
2003.01.13
Динамический массив для структуры файла...


14-37306
smok_er
2002-12-23 02:00
2003.01.13
MultiLanguage Interface


14-37362
Aristarh
2002-12-24 21:20
2003.01.13
Help, please! Как повторно вызвать окно авторизации





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