Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка в ComboBox 
V
    Опции темы
ziga
Дата 17.2.2011, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: 1
Всего: 1



Ситуация следующая: есть dbf'ка в которой записаны номера домов к примеру (1, 5, 2, 1А, 2А, 10, 10А) 
эту dbf'ку заполняю в мемдату, а у же из мемдаты в цикле заполняю comboBox обычным 

Код

ComboBox1.Items.Add(memdata.FieldByName('nm_house').aSstring);


если я использу метод 

Код

ComboBox1.Sorted;


то сортировка будет выглядить таким образом:
Код


1

10
10А
2

5


вопрос! Как сделать сортировку по цифравым значениям ? 
PM MAIL   Вверх
ziga
Дата 17.2.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 25.4.2007

Репутация: 1
Всего: 1



Всем спасибо решение найдено smile 

Код

SetLength(a, 2, StringList.Count);
  for i:=0 to StringList.Count-1 do
  Begin
    strRes:='';
    str:=StringList.Strings[i];
    for k:=1 to length(str) do if str[k] in ['0'..'9'] then strRes:=strRes+str[k];
    a[0,i]:=StrToInt(strRes);
    a[1,i]:=i;
  End;
  for i:=0 to StringList.Count-2 do
    for j:=i to StringList.Count-1 do
      if a[0,i]>a[0,j] then begin
        k:=a[0,i];
        k1:=a[1,i];
        a[0,i]:=a[0,j];
        a[1,i]:=a[1,j];
        a[0,j]:=k;
        a[1,j]:=k1;
      end;
  for i:=0 to StringList.Count-1 do
    cbHouse.Items.Add(StringList.Strings[a[1,i]]);


если есть решение лучше, выкладывайте

Добавлено через 32 секунды
Close
PM MAIL   Вверх
chip_and_dayl
Дата 17.2.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 9



Ну как вариант можно отсортировать на уровне базы данных, то беж  сформировав запрос с сортировкой (но типо order by Имя_Поля не поможет)


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Gwire
Дата 20.2.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



Стандартная сортировка реализована примерно так:
Код

function Compare(List: TStringList; Index1, Index2: Integer): Integer;
var S1, S2: String;
begin
    S1:= List[ Index1 ];
    S2:= List[ Index2 ];

    if S1 = S2
      then Result:= 0
      else if S1 < S2
            then Result:= -1
            else Result:= +1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var S: TStringList;
begin
    S:= TStringList.Create;
    try
        S.Text:= ComboBox1.Items.Text;
        S.CustomSort( Compare );
        ComboBox1.Items.Text:= S.Text;
    finally
        S.Free;
    end;
end;

Измени методику проверки в ф-ции Compare и будет тебе счастье.
Главное значения результатов (-1 и +1) не перепутай, а то будет обратный порядок. =)

Можно например сперва по длине проверять. То что длинее значит больше.
Можно отделить номер от индекса и проверять их отдельно.


Это сообщение отредактировал(а) Gwire - 20.2.2011, 17:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.