Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

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

Ответ
 
Опции темы
Старый 17.05.2018, 22:07   #1
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,755
Репутация: 226

icq: 473732523
Вопрос StringGrid сортировка через StrCmpLogicalW

Есть StringGrid 3 на 10. Хочу сделать сортировку всех столбцов по второму столбцу с помощью
Код:

function StrCmpLogicalW(psz1, psz2: PWideChar): Integer; stdcall; external 'shlwapi.dll';
...
function Sort(List: TStringList; Index1, Index2: Integer): Integer;
var
  ws1, ws2: WideString;
begin
  ws1 := List[Index1];
  ws2 := List[Index2];
  Result := StrCmpLogicalW(Pointer(ws1), Pointer(ws2));
end;

Встал вопрос как в эту функцию передать параметры?
Shouldercannon вне форума   Ответить с цитированием
Старый 18.05.2018, 10:44   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,581
Репутация: 5213
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Встал вопрос как в эту функцию передать параметры?
Вы имеет в виду StrCmpLogicalW ?
так они уже передаются.
Эта функция, которая сравнивает две строки.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 18.05.2018, 11:01   #3
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,448
Репутация: 6136
По умолчанию

PWideChar

и отсортируешь только второй столбец. К этой функции то можно обращаться, а вот строки грида будь добр сам перетаскивай ))
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.05.2018 в 11:05.
Аватар на форуме   Ответить с цитированием
Старый 18.05.2018, 22:45   #4
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,755
Репутация: 226

icq: 473732523
По умолчанию

Есть такой способ сортировки
Код:

procedure TForm1.SortGrid(Column: integer);
var
  I, I2: integer;
  SL: TStringList;
begin
  try
    SL := TStringList.Create;
    try
      for I := 1 to StringGrid1.RowCount - 1 do // С 1, чтобы заголовки не трогать
      begin
        for I2 := I + 1 to StringGrid1.RowCount - 1 do
        begin
          // Cортируем по возрастанию
          if AnsiCompareStr(StringGrid1.Cells[Column, I], StringGrid1.Cells[Column, I2]) > 0 then
          begin
            SL.Assign(StringGrid1.Rows[I]);
            StringGrid1.Rows[I] := StringGrid1.Rows[I2];
            StringGrid1.Rows[I2] := SL;
          end;
        end;
      end;
    except
    end;
  finally
    FreeAndNil(SL);
  end;
end;

В него можно внедрить?
Код:

function NumberSort(List: TStringList; Index1, Index2: Integer): Integer;

И как оно будет выглядеть?
Shouldercannon вне форума   Ответить с цитированием
Старый 19.05.2018, 02:22   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,581
Репутация: 5213
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
В него можно внедрить?
Код:

function NumberSort(List: TStringList; Index1, Index2: Integer): Integer;

можно.

а что такое NumberSort() ?
и зачем его внедрять в ваш код?

p.s. кстати, исправьте ошибку:
Код:

 for I := 1 to StringGrid1.RowCount - 2 do // С 1, чтобы заголовки не трогать

Serge_Bliznykov вне форума   Ответить с цитированием
Старый 19.05.2018, 10:10   #6
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,755
Репутация: 226

icq: 473732523
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
можно.

а что такое NumberSort() ?
и зачем его внедрять в ваш код?

p.s. кстати, исправьте ошибку:
Код:

 for I := 1 to StringGrid1.RowCount - 2 do // С 1, чтобы заголовки не трогать

NumberSort() лишнее скопировал
Код:

procedure TForm1.SortGrid(ST: TStringGrid; Column: Integer);
var
  I, I2: integer;
  SL: TStringList;
begin
  try
    SL := TStringList.Create;
    try
      for I := 1 to ST.RowCount - 2 do // С 1, чтобы не трогать FixedRows
      begin
        for I2 := I + 1 to ST.RowCount - 1 do
        begin
          // Cортируем по возрастанию
          if StrCmpLogicalW(PWideChar(ST.Cells[Column, I]), PWideChar(ST.Cells[Column, I2])) > 0 then
          begin
            SL.Assign(ST.Rows[I]);
            ST.Rows[I] := ST.Rows[I2];
            ST.Rows[I2] := SL;
          end;
        end;
      end;
    except
    end;
  finally
    FreeAndNil(SL);
  end;
end;


Последний раз редактировалось Shouldercannon; 19.05.2018 в 10:22.
Shouldercannon вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как решить данную задачу не через StringGrid а через файл в котором и будут храниться данные ALEXandr20333 Помощь студентам 12 04.03.2014 12:16
сортировка StringGrid vovey Помощь студентам 4 11.04.2010 14:25
Сортировка в StringGrid Ch00kan0ff Общие вопросы C/C++ 2 24.03.2009 19:09
StringGrid и сортировка dee_lv Помощь студентам 5 02.05.2008 17:51


14:51.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru