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

Вниз

FileListBox1 - отсутствует сортировка   Найти похожие ветки 

 
kyn66 ©   (2009-01-30 12:39) [0]

Предположим в каталоге на диске лежат некоторые файлы, имеющие в составе имени упорядоченный список цифр, типа http://yurec66.narod.ru/Hlam/vop01.jpg (обратите внимание на сортировку в Total Commsnder). В программе считываю этот список для дальнейшей обработки в FileListBox http://yurec66.narod.ru/Hlam/vop1.jpg (обратите внимание на сортировку). В данном случае FileListBox отсортировал полученные данные на свое усмотрение. Однако, такая сортировка меня не устраивает. Мне нужно, чтобы 10 шло после 9-ти, а не после 1. В настройках FLB нет упоминания о сортировке. Как можно решить эту проблему, подскажите, уважаемые мастера.


 
Медвежонок Пятачок ©   (2009-01-30 12:45) [1]

В программе считываю этот список для дальнейшей обработки в FileListBox

Считывай в листбокс и сортируй как надо


 
Сергей М. ©   (2009-01-30 12:46) [2]

TFileListBox имеет св-во Items: TStrings, которое м.б. приведено к TStringList для последующего вызова метода CustomSort


 
kyn66 ©   (2009-01-30 12:55) [3]


> Считывай в листбокс и сортируй как надо

Интересный вариант. Но как надо это как? ТАм есть только Sorted (True, False) и все. Но это не помогает, сортировка не меняется.


 
Медвежонок Пятачок ©   (2009-01-30 13:02) [4]

Тот же самый кастом сорт с приведенным к стринглисту айтемсом.
только без устаревшего вин3.1 контрла флб


 
kyn66 ©   (2009-01-30 13:10) [5]


> Тот же самый кастом сорт с приведенным к стринглисту айтемсом.
> только без устаревшего вин3.1 контрла флб

Очень обтекаемо и не совсем понятно


 
icWasya ©   (2009-01-30 13:11) [6]

а функция сравнения, например такая
const Digits=["0".."9"];

function GoodStrComp(ps1,ps2:pchar):integer;
//0 если равны, <0 если s1<s2
var DigCnt:integer;
begin
 //У первого символа нет предыдущего, так что обработаем отдельно.
 result:=integer(ps1^)-byte(ps2^);

 if (ps1^=#0) then exit;
 if result<>0 then exit;

 Inc(ps1);Inc(ps2);
 while (ps1^=ps2^) and (ps1^<>#0) do
   begin Inc(ps1);Inc(ps2) end;

 //Нашли различие. Теперь ставим диагноз.
 result:=integer(ps1^)-byte(ps2^);
 if (ps1^=#0)or(ps2^=#0) then exit;

 if ps1^ in Digits
   then
     if ps2^ in Digits
       then //оба символа - цифры
         begin //Считаем, у кого больше цифр осталось справа
           DigCnt:=0;
           while (ps1^ in Digits) do begin inc(DigCnt); inc(ps1) end;
           while (ps2^ in Digits) do begin dec(DigCnt); inc(ps2) end;
           if DigCnt<>0 then result:=DigCnt
         end
       else //ps1^=цифра, ps2^=буква (так что сейчас result<0)
         if (ps1-1)^ in Digits then result:=1 else
   else //ps1^=буква
     if ps2^ in Digits
       then //ps2^=цифра, так что пока result>0
         if (ps1-1)^ in Digits then result:=-1 else;
end;
function GoodCompareStr(const s1,s2:String):integer;
begin
 Result:=GoodStrComp(PChar(s1),PChar(s2));
end;


 
clickmaker ©   (2009-01-30 13:19) [7]

StrCmpLogicalW(), как вариант


 
kyn66 ©   (2009-01-30 15:00) [8]

Да, действительно, без дополнительного рукоприкладства не обошлось. Вопрос закрыт, всем спасибо!



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

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

Наверх





Память: 0.47 MB
Время: 0.004 c
15-1258032175
TUser
2009-11-12 16:22
2010.01.17
Президент послал про сверхпроводимость ...


15-1258119591
Piter
2009-11-13 16:39
2010.01.17
Кризис и преступность


15-1258634939
И. Павел
2009-11-19 15:48
2010.01.17
Брак или клавиатура с ИИ?


3-1233312359
Димон
2009-01-30 13:45
2010.01.17
ПОМОГИТЕ С ЦИКЛОМ


2-1259002119
kyran29
2009-11-23 21:48
2010.01.17
отразить процесс закачки файла





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