Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TListView. Setfocus внутри OnSelectItem [D7]


neversleep ©   (2011-02-10 16:12:00) 

Пытаюсь сделать из TListView'а редактор свойств объектов, наподобие "Object TreeView" в Delphi7; т.е беру обычный TListView и создаю 2 колонки (ViewStyle=vsReport) Свойство | Значение, далее обрабатываю событие SelectItem, по которому создаю свой EDIT (в который будет введено значение) и устанавливаю на него фокус:

Windows.SetFocus(FObjPropEdit);

Проблема заключается в том, что после выхода из события(SelectItem), мой EDIT теряет фокус, как сделать чтобы фокус оставался у него ?
Код:

procedure TForm1.lvPropsSelectItem(Sender: TObject; Item: TListItem;
 Selected: Boolean);
var
 R: TRect;
begin
 if Item = nil then
   Exit;

 //lvProps.Items.BeginUpdate;
 SendMessage(lvProps.Handle, LVM_GETITEMRECT, Item.Index, Integer(@R));

 FObjPropEdit := CreateWindowEx(WS_EX_CLIENTEDGE or WS_EX_CONTROLPARENT, 'EDIT',
   PChar(Item.SubItems[0]),
   WS_CHILD or WS_VISIBLE or WS_CLIPSIBLINGS or ES_AUTOHSCROLL or ES_LEFT,
   lvProps.Column[0].Width + 1,
   R.Top,
   R.Right - R.Left - lvProps.Column[0].Width,
   R.Bottom - R.Top,
   lvProps.Handle,
   0,
   hInstance,
   nil);

 SendMessage(FObjPropEdit, WM_SETFONT, Self.Font.Handle, 1);
 SetWindowLong(FObjPropEdit, GWL_USERDATA, Integer(Item));

 //lvProps.Selected := nil;
 //lvProps.Items.EndUpdate;
 Windows.SetFocus(FObjPropEdit);
end;

Delphi7, Win7;


neversleep   (2011-02-12 10:47:00) [1]

Если кому интересно: ListBox для этих целей больше подошёл (+ конечно ручная отрисовка строк и тп). Но оговорюсь, - реализация задуманного ещё не закончена, но пока полёт нормальный :)


neversleep   (2011-02-10 18:33:00) [2]


> я бы не смешивал TListView из VCL с апишным Edit
> попробуй TEdit

С Tedit'ом я первым делом пробовал, ситуация такая же, только ещё Access violation вылетает при непонятных условиях (после вызова TEdit.SetFocus()).

> да, и чем TValueListEditor не подошел?

Да собственно хочется использовать стандартные апишные окна/подходы, т.к всё это дело планирую писать на C++(mingw), Дельфи использую потому что отлаживать/экспериментировать удобнее.


clickmaker   (2011-02-10 17:41:00) [3]

да, и чем TValueListEditor не подошел?


clickmaker   (2011-02-10 17:40:00) [4]

я бы не смешивал TListView из VCL с апишным Edit
попробуй TEdit


Наверх

Титульная страница Поиск, карта сайта Написать письмо