Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизРедактирование TListView Найти похожие ветки
← →
Chandr (2003-08-13 09:07) [0]Имееется TListView в состоянии vsReport с несколькими колонками, заполненнный данными. Если возможность сделать так, чтобы пользователь по двойному клику на любой SubItems мог редактировать его содержимое (также как и Caption у TListItem в первой строке).
← →
wl (2003-08-13 09:24) [1]Не знаю насчёт TListView, а вот TStringGrid точно позволяет.
А вообще я бы при двойном клике просто выдал диалоговое окошко InputQuery(...), и редактировал данные уже в нём, а потом заменял в соответсвующем SubItem.....
← →
Chandr (2003-08-13 09:41) [2]Если использовать TStringGrid, то придётся симулировать много свойств TListItem, а это делать не очень хочется. Что касается InputQuery, то тоже сомнительно - при необходимости изменить строку длинной в 6 колонок неудобно для user"а.
← →
Fiend (2003-08-13 09:46) [3]То Chandr:
ну так а вы полюбому в листвьюве не сможете одновременно редактировать строку из шести колонок - тока каждую колонку отдельно
← →
wl (2003-08-13 09:48) [4]А если создать диалоговое окно, в котором можно редактировать все поля строки? Хотя конечно это тоже обходной путь.
← →
wl (2003-08-13 09:49) [5]А если создать диалоговое окно, в котором можно редактировать все поля строки? Хотя конечно это тоже обходной путь.
← →
Chandr (2003-08-13 09:53) [6]To Fiend:
Это понятно. Поэтому и user"у придется шесть раз любоваться на InputQuery.
← →
Fiend (2003-08-13 09:54) [7]То Chandr:
ну тада сделайте как сказали чуть выше:
сделайте окно с несколькими эдитами
← →
Семен Сорокин (2003-08-13 09:54) [8]2Chandr
отлавливай клик по SubItem"у и на его Rect пихай TEdit - редактируй в TEdit, при выходе сохраняй в SubItems - и вся арифметика.
← →
wl (2003-08-13 09:59) [9]2Семен Сорокин © (13.08.03 09:54) [8]
У меня есть подозрение, что в случае с Caption первой колонки именно так и делается....
← →
wl (2003-08-13 10:05) [10]Вырезка из MSDN в подтверждение:
List-View Label Editing
A list-view control that has the LVS_EDITLABELS window style enables a user to edit item labels in place. The user begins editing by clicking the label of an item that has the focus. Alternatively, an application can begin editing automatically by using the LVM_EDITLABEL message. The list-view control notifies the parent window when editing begins and when it is canceled or completed. When editing is completed, the parent window is responsible for updating the item"s label, if appropriate.
When label editing begins, an edit control is created, positioned, and initialized. Before it is displayed, the list-view control sends its parent window an LVN_BEGINLABELEDIT notification message. If you need to modify the label editing process, you can implement a handler for this notification.
← →
MBo (2003-08-13 10:07) [11]
uses commctrl;
Item:TListItem;
Sub:Integer;
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
R:TRect;
ht:TLVHitTestInfo;
begin
Item := ListView1.GetItemAt(2, Y);
if Item=nil then Exit;
FillChar(ht,SizeOf(ht),0);
ht.pt.x:=X;
ht.pt.y:=Y;
SendMessage(ListView1.Handle, LVM_SUBITEMHITTEST, 0, Integer(@ht));
Sub:=ht.iSubItem;
Caption:=inttostr(sub);
if Sub > 0 then begin
ListView_GetSubItemRect(ListView1.Handle, Item.Index, Sub,LVIR_BOUNDS, @R);
Offsetrect(R,ListView1.Left,ListView1.Top);
Edit1.SetBounds(R.Left,R.Top,R.Right-R.Left,R.Bottom-R.Top);
Dec(Sub);
Edit1.Text:=Item.SubItems[Sub];
Edit1.Visible:=True;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then begin
Item.SubItems[Sub]:=Edit1.Text;
Edit1.Visible:=False;
end;
end;
← →
Chandr (2003-08-21 06:43) [12]To MBo:
Ам можно чуть подробней о TLVHitTestInfo, LVM_SUBITEMHITTEST и ListView_GetSubItemRect(), а то я никак доехать не могу. :(
← →
MBo (2003-08-21 07:28) [13]???
Пример рабочий, а поподробнее - в MSDN
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.018 c