Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу сделать фокус на дочерний элемент 
:(
    Опции темы
Indeesa
Дата 13.2.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.2.2009

Репутация: нет
Всего: нет



Добрый день. Вопрос скорее по VCL, переписываю TStringGrid под свои нужды, делаю обработку нажатия кнопки мыши на ячейку, при нажатии должен появиться TComboBox и чтобы фокус перевёлся на него.
Код

procedure TStrGrid.CMMouseActivate(var Message: TCMMouseActivate);
var
    str : string;
    cx, cy : integer;
begin
    inherited;
    MouseToCell( Message.MouseActivateRec.MousePos.X,    
    Message.MouseActivateRec.MousePos.Y, cx, cy );
    if ( Objects[ cx, cy ] is TCellStore ) then
    case TypeCol( cx ) of
        GT_COMBOX : begin
                                   ComboBoxCellActivate( cx, cy );
                               end;
    end;

end;

procedure TStrGrid.ComboBoxCellActivate( const ACol, ARow : integer );
var
    CM : TComboBox;
    Sl : TStringList;
    R : TRect;
begin
    R := CellRect( ACol, ARow );
    FComboBox.Top := R.Top;
    FComboBox.Left := R.Left;
    FComboBox.Items := TComboBoxType( Objects[ ACol, 0 ] ).Strings;
    FComboBox.Visible := true;
    //SendCancelMode(Self);
    Windows.SetFocus( FComboBox.Handle );
//    FComboBox.SetFocus;

//    FComboBox.
//    SetActiveControl( FComboBox );
end;


FComboBox := TComboBox.Create( nil );
FComboBox.parent := TStrGrid( self );//так то просто self для наглядности тип привёл
копадлся в VCL 
при вызове сетфокуса он проверяет есть ли у него предок от TCustomForm, если есть то он передаёт ему контрол

Если в двух словах, то я хочу чтобы Combobox в режим редактирования сразу уходил
PM MAIL   Вверх
bems
Дата 13.2.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Делай комбобоксу того же родителя что и гриду, и перещитывай координаты из грида, в родительские


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Indeesa
  Дата 14.2.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.2.2009

Репутация: нет
Всего: нет



Цитата(bems @ 13.2.2009,  15:56)
Делай комбобоксу того же родителя что и гриду, и перещитывай координаты из грида, в родительские

ну так то это решение, но можно создать чистую форму кинуть StringGrid кинуть ComboBox, при создании менять parent у combobox на StringGrid и кнопку со следующим кодом Windows.SetFocus( ComboBox.Handle ) и всё будет шикарно, по моему мнению просто после моего WMMOUSEACTIVATE идёт набор команд который выкидывает фокус с ComboBox, попоробую посылать отдельное сообщение для грида на отоброжение CombobBox

А с другой стороны может кто-нить копался с устройством TInplaceEditor в TStringGrid как они ему передают фокус ?
PM MAIL   Вверх
Indeesa
Дата 14.2.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.2.2009

Репутация: нет
Всего: нет



вот что при нажатии на ячейку TStringGrid происходит

33-21 WM_MOUSEACTIVATE                          -----------Заблокировав 
45131 CM_MOUSEACTIVATE
70-46 WM_WINDOWPOSCHANGING
70-46 WM_WINDOWPOSCHANGING
528-210 WM_PARENTNOTIFY
45108 CM_INVALIDATE
70-46 WM_WINDOWPOSCHANGING
45082 CM_ENTER
45063 CM_FOCUSCHANGED 
273-111 WM_COMMAND
32-20 WM_SETCURSOR
513-201 WM_LBUTTONDOWN                            -------- Заблокировав
273-111
273-111
7-7 WM_SETFOCUS
45063 CM_FOCUSCHANGED 
45097 CM_UIACTIVATE 
512-200
514-202 WM_LBUTTONUP                                  ------- Заблокировав 
533-215


Заблокировав эти три сообщения фокус перейдёт на combobox
Дествительно утро вечера мудреннее =) Всем спасибо

P.s но всё равно есть маза что я это не корректно делаю, если есть спецы сталкивавшиеся с переписанием компонентов, не могли бы Вы посоветовать литературку 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.