Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 15:51   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Сортировка в combobox от большего к меньшему?

В combobox список годов, необходимо отсортировать от большего к меньшему. Обычное свойство sort сортирует наоборот. Подскажите, есть ли какой другой вариант?
Dux вне форума Ответить с цитированием
Старый 29.04.2013, 16:53   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. получать для заполнения правильно отсортированный список.
1.1. получать отсортированный и вставлять в обратном порядке.
2. при заполнении программно ставить на нужное место.
3. использовать доп. список для сортировки.
3.1. ( == обычная сортировка +1.1)
3.2. ( == своя сортировка +1.)
Код:
type
  TDescYear =class(TStringList)
  protected
    function CompareStrings(const S1, S2: string): Integer; override; 
  end;

r:=TDescYear.Create;
r.text:=combobox1.Items.Text;
r.Sorted:=true;
combobox1.Items.Text:=r.Text;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.04.2013, 18:02   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Не работает.. может я что не так делаю? Зачем строка
Код:
function CompareStrings(const S1, S2: string): Integer; override;
?
Dux вне форума Ответить с цитированием
Старый 30.04.2013, 00:15   #4
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

неужели нет простенького примера?
Dux вне форума Ответить с цитированием
Старый 30.04.2013, 09:15   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Зачем строка
...
Цитата:
Description

TStrings uses CompareStrings internally to compare the values of strings that appear in the list. For example, the IndexOf and IndexOfName methods use CompareStrings to compare a specified string with the strings in the list.

S1 and S2 are the strings to compare.

CompareStrings returns a value less than 0 if S1 < S2, 0 if S1 = S2, and a value greater than 0 if S1 > S2.

As implemented in TStrings, CompareStrings uses the global AnsiCompareText function, which compares strings case insensitively. Some descendant classes override this method to change the way strings are compared (for example, to introduce case sensitivity).
Вам надо описать свой класс в котором будет своя функция сравнения строк CompareStrings ; override;

почему не использовать ?
Цитата:
1. получать для заполнения правильно отсортированный список.
1.1. получать отсортированный и вставлять в обратном порядке.
2. при заполнении программно ставить на нужное место.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.04.2013, 10:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не понимаете, что лучше обеспечить порядок записей ДО помещения их в комбобокс?

Вы по прежнему хотите примерчик?!

ну, извольте:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 ComboBox1.Items.Clear;
 ComboBox1.Items.Append('2011');
 ComboBox1.Items.Append('2008');
 ComboBox1.Items.Append('2012');
 ComboBox1.Items.Append('2013');
 ComboBox1.Items.Append('2010');
end;


procedure TForm1.ButtonSortDescClick(Sender: TObject);
function StringListCompareStrings(List: TStringList; Index1, Index2: Integer): Integer;
begin
  if List.Strings[Index1] = List.Strings[Index2] then Result := 0
  else
    if List.Strings[Index1] < List.Strings[Index2]
      then  Result :=  1
      else  Result :=  -1;
end;

var TS : TStringList;
begin
  try
    TS := TStringList.Create;
    TS.Text := ComboBox1.Items.Text;
    TS.CustomSort( @StringListCompareStrings );
    ComboBox1.Items.Text := TS.Text;
  finally
    FreeAndNil(TS);
  end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2013, 16:13   #7
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Serge_Bliznykov, огромное спасибо за наглядный пример! Теперь все сортирует правильно!
Dux вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка из Combobox ins813 БД в Delphi 2 24.05.2012 13:48
Сортировка+ComboBox Trikster БД в Delphi 6 05.06.2011 10:24
паскаль. нахождение большего. Oda33 Помощь студентам 3 25.03.2011 23:22
Вывод id из базы [от большего к меньшему] webber9989 PHP 7 22.06.2010 16:42
Сортировка в ComboBox Anton1997 Помощь студентам 5 20.01.2009 09:05