Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2013, 21:32   #1
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию ListView редактирование второй колонки

Здравствуйте! Собственно проблема вот какая, делаю я инспектор объектов и для его свойств использую TListView, для редактирования второго столбика делаю следующее:
Код:
procedure TForm5.FormCreate(Sender: TObject);
begin
  ListEdit := TEdit.Create(List);
  ListEdit.Parent := List;
  ListEdit.Visible := false;
  ListEdit.Height := Canvas.TextHeight('Wg');
  ListEdit.OnExit := OnExit;
  EditedItem := nil;
end;

procedure TForm5.ListClick(Sender: TObject);
var
  pt:TPoint;
  rc:TRect;
begin
  GetCursorPos(pt);
  pt := List.ScreenToClient(pt);
  EditedItem := List.GetItemAt(10,pt.y);

  if (EditedItem <> nil) then begin
     if(MouseClickOnSubItem(rc,EditedItem,pt.x,pt.y)) then begin
       ListEdit.Left := rc.Left;
       ListEdit.Top := rc.Top;
       ListEdit.Width := rc.Right - rc.Left;
       ListEdit.Height := rc.Bottom - rc.Top + 4;

       ListEdit.Text := EditedItem.SubItems.Strings[0];

       if( not ListEdit.Visible) then begin
          ListEdit.Visible := true;
          ListEdit.SetFocus();
       end else
          ListEdit.Visible := false;
     end;
  end;

end;

function TForm5.MouseClickOnSubItem(rc: TRect; item: TListItem; x,y: integer): boolean;
begin
  if not assigned(item) then
     Exit(False);

  rc := Item.DisplayRect(drBounds);
  rc.Left := List.Columns.Items[0].Width + 2;
  rc.Right := rc.Left + List.Columns.Items[1].Width - 2;
  Exit((X>= rc.Left )or (X <= rc.Right) or (Y>=rc.Top ) or (Y <= rc.Bottom));
end;

procedure TForm5.OnExit(Sender: TObject);
begin
  if(EditedItem <> nil) then
    EditedItem.SubItems.Strings[0] := ListEdit.Text;
  ListEdit.Hide();
end;
Все редактируется замечательно, но не видно в поле во время редактирования что пишется, измененный текст будет виден только после того как закончишь редактировать. Подскажите пожалуйста как сделать компонент ListEdit видимым?
LomoCoder вне форума Ответить с цитированием
Старый 28.07.2013, 21:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну например ListEdit.BringToFront() попробуй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2013, 22:01   #3
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

Неа не показывает
LomoCoder вне форума Ответить с цитированием
Старый 28.07.2013, 23:30   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вместо ListView используй VirtualStringTree. Событие от OnCreateEditor позволяет на основе интерфейса IEditorLink создать любой компонент редактирования в любой колонке.
Человек_Борща вне форума Ответить с цитированием
Старый 29.07.2013, 00:42   #5
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

Ухты, крутяк, спасибо!
LomoCoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Колонки в ListView Konstantin1706 Помощь студентам 2 25.02.2013 15:50
Редактирование каждой второй строки Questru Microsoft Office Excel 11 04.07.2012 10:38
Колонки в listview Rapala Компоненты Delphi 1 16.05.2010 04:25
Передача значений колонки ListView в функцию. Человек_Борща Общие вопросы Delphi 4 02.04.2010 21:09
listview и колонки. blackstersl Общие вопросы Delphi 3 24.06.2009 15:52