Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

Сортировка TListView в виртуальном режиме.   Найти похожие ветки 

 
Fr   (2009-06-18 14:00) [0]

Как его отсортировать по клику на заголовке колонки?


 
Сергей М. ©   (2009-06-18 14:02) [1]

А в обычном режиме умеешь ?


 
Fr   (2009-06-18 14:20) [2]


> Сергей М. ©   (18.06.09 14:02) [1]

да :)


 
Сергей М. ©   (2009-06-18 14:28) [3]

Тогда зачем приплел "по клику на заголовке колонки" ?
И колонки и клики на них одинаковы, что в обычном что в вирт.режиме..

А сортировка в вирт.режиме сводится к сортировке (любым требуемым удобным способом) массива (или списка), к которому обращаются обработчики OnData, OnDataFind, OnDataHint и OnDataStateChange .


 
Fr   (2009-06-18 15:05) [4]


> А сортировка в вирт.режиме сводится к сортировке (любым
> требуемым удобным способом) массива (или списка), к которому
> обращаются обработчики OnData,

Список из которого я подгружаю данные отсортировал. Но возникла другая проблема:

Procedure ...
begin
// ...
   tmpSL:=TStringList.Create;
       frmViewList:=TfrmViewList.Create(Application);
       try
         frmViewList.lvViewList.OwnerData:=true;
         // ... здесь заполняю tmpSL значениями
         frmViewList.lvViewList.Items.Count:=tmpSL.Count;
         frmViewList.ShowModal;
       finally
         frmViewList.Free;
         tmpSL.Free;
       end;
// ...
end;

procedure TfrmViewList.lvViewListColumnClick(Sender: TObject;
 Column: TListColumn);
begin
 if Column=lvViewList.Column[0] then begin
   tmpSL.Sorted:=false;
   lvViewList.OwnerData:=false;
   // ... здесь делаю нужную сортировку списка
   tmpSL.Sort;
   lvViewList.OwnerData:=true;
   lvViewList.Items.Count:=tmpSL.Count;
 end;
end;


при выходе из процедуры ColumnClick получаю "Access violation..." на строчке frmViewList.ShowModal;

Что я делаю не так?


 
Сергей М. ©   (2009-06-18 15:15) [5]


> Список из которого я подгружаю данные отсортировал


Как же ты умудрился его отсортировать, если ты даже на колонке листвью не успел кликнуть, потому что форма, на которой твой листвью размещен, еще невидима, а первая же попытка сделать ее видимой приводит к исключению ?)


 
Fr   (2009-06-18 15:23) [6]

Почему не успел кликнуть на колонке?
Форма с заполненным ListView нормально показывается по ShowModal до моего клика по заголовку колонки.
После этого данные сортируются и при выходе из процедуры lvViewListColumnClick вылетает ошибка ...

Если убрать строчки lvViewList.OwnerData:=false; и lvViewList.OwnerData:=true;, то сортировка списка нормально происходит, но не отображаются никакие изменения, пока я, например, не сверну/разверну форму frmViewList


 
Dennis I. Komarov ©   (2009-06-18 15:29) [7]

ListView.CustomSort


 
Сергей М. ©   (2009-06-18 15:32) [8]

Тогда я не понял, как вяжется


> Форма .. нормально показывается по ShowModal


с


> Access violation..." на строчке frmViewList.ShowModal;


procedure TfrmViewList.lvViewListColumnClick(Sender: TObject;
Column: TListColumn);
begin
..
  lvViewList.BeginUpdate;
  // ... здесь делаешь сортировку списка
  lvViewList.EndUpdate;
..
end;


 
Сергей М. ©   (2009-06-18 15:33) [9]


> Dennis I. Komarov ©   (18.06.09 15:29) [7]


CustomSort не работает в вирт.режиме


 
Dennis I. Komarov ©   (2009-06-18 15:49) [10]


> вирт.режиме

упс...


 
Fr   (2009-06-18 15:56) [11]


> Тогда я не понял, как вяжется...

Сначала работает первая процедура главной формы. По ShowModal она нормально отображает форму с виртуальным списком. Когда я кликаю по заголовку колонки TListView в этой модальной форме, то операторы во второй процедуре отрабатывают все, но после выхода из этой процедуры происходит "Access violation" и Делфи останавливается на строчке с ShowModal (запускаю из среды).


> lvViewList.BeginUpdate;
> lvViewList.EndUpdate;

не срабатывает, т.к. "Undeclared identifier: "BeginUpdate""


 
Сергей М. ©   (2009-06-18 15:57) [12]

lvViewList.Items.BeginUpdate;
lvViewList.Items.EndUpdate;


 
clickmaker ©   (2009-06-18 16:13) [13]

> происходит "Access violation" и Делфи останавливается на
> строчке с ShowModal (запускаю из среды).

а как выглядит обработчик OnData?


 
Fr   (2009-06-18 16:37) [14]


> а как выглядит обработчик OnData?


procedure TfrmViewList.lvViewListData(Sender: TObject;
 Item: TListItem);
var
 s,s1 : string;
 x,y: integer;
begin
 s:=tmpSL[item.Index];
 y:=Length(s);
 x:=Pos("..."",s);
 if x>0 then begin
   s1:=Copy(s,x+7,y);
   item.Caption:=Copy(s1,1,Pos(""",s1)-1);
 end
 else item.Caption:="";

 x:=item.Index;
 item.Caption:=IntToStr(x+1)+". "+item.Caption;

 x:=Pos("..."",s);
 if x>0 then begin
   s1:=Copy(s,x+8,y);
   item.SubItems.Add(Copy(s1,1,Pos(""",s1)-1));
 end
 else item.SubItems.Add("");
end;


 
clickmaker ©   (2009-06-18 16:47) [15]

> s1:=Copy(s,x+7,y);
> s1:=Copy(s,x+8,y);

нету проверки на выход за строку


 
Fr   (2009-06-18 16:50) [16]


> Сергей М. ©   (18.06.09 15:57) [12]

Спасибо, вроде, помогло. Вставил это и убрал
lvViewList.OwnerData:=false;
lvViewList.OwnerData:=true;
lvViewList.Items.Count:=tmpSL.Count;


Но осталась непонятка все-таки с "Access violation" ...


 
Fr   (2009-06-18 16:55) [17]


> нету проверки на выход за строку

здесь это несущественно, т.к. длина s, начиная с х гораздо больше 8


 
Сергей М. ©   (2009-06-18 16:55) [18]


> помогло


> Но осталась непонятка все-таки с "Access violation"


Тогда что же и в чем тебе "помогло", если AV как было так и осталось ?


 
Fr   (2009-06-18 17:17) [19]


> Сергей М. ©   (18.06.09 16:55) [18]

После этих изменений "Access violation" перестало выскакивать.
Хочется понять - почему оно появлялось до этого.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.016 c
2-1244520609
Чипырик
2009-06-09 08:10
2009.08.16
Слетает база и портится индекс


11-1205331153
DJ_UZer
2008-03-12 17:12
2009.08.16
По ссылке


15-1245179158
Cyrax
2009-06-16 23:05
2009.08.16
Как называется крутилка с цыфырками на командирских часах ?


2-1245257837
Bred
2009-06-17 20:57
2009.08.16
Unable to invoke Code Completion due to errors in source code


1-1211881817
МистерТ
2008-05-27 13:50
2009.08.16
Расчет контрольной суммы





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