Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-10883
andruxa
2003-08-14 11:34
2003.09.04
Как надо присваивать версии программам????


14-10958
Soft
2003-08-15 15:58
2003.09.04
SCO: крысы бегут


3-10577
Cranium
2003-08-14 16:01
2003.09.04
Запрет перетаскивания столбца в гриде?


4-11013
Nick Denry
2003-07-05 20:49
2003.09.04
9x и wm_devicechange. в SDK написано -нет такой мессаги в 9x


8-10846
_Split_
2003-03-28 20:14
2003.09.04
Эффекты при открытии формы.





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