Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

Странно... (создание контролов в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.019 c
14-37292
DOC97
2002-12-25 21:13
2003.01.13
Плачу 10 WMZ


4-37460
Алёшка1900
2002-11-25 22:01
2003.01.13
GetAsyncKeyState(VK_LBUTTON)


1-37210
delfer.ru
2002-12-31 05:20
2003.01.13
У меня вопрос?????????????????


1-37092
NorthMan
2003-01-03 12:58
2003.01.13
Народ, подскажите. Чтобы на кнопочках диалогов


1-37195
Programist21
2002-12-20 13:57
2003.01.13
Как в ListView добавить...





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