Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

     
    И старайтесь, чтобы ваш код не попал сюда

  • Всего записей: 3931 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: data man, 02:45 31-12-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid
    Посмотрю повнимательней.
    Да, подходит. Но имена файлов могут оказаться и в виде слов. Тогда этом метод не подойдет. Как в этом случае?

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 17:38 24-06-2010 | Исправлено: Aleksandr N, 19:02 24-06-2010
    G36

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
     
    Delphi 7 + CnWizards
    У класса TThread (например) есть событие OnTerminate. Я создаю наследника этого класса и хочу использовать именно это событие, но ни мой класс, ни TThread не являются компонентами, а значит привычно кликнуть по вкладке Events Инспектора объектов нельзя. Как в таком случае использовать события?
     
    Update:
     
    Frodo_Torbins
    Благодарю. Кажется, работает.

    Всего записей: 37 | Зарегистр. 15-08-2008 | Отправлено: 19:35 24-06-2010 | Исправлено: G36, 21:12 24-06-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    G36
    Создайте в своем классе метод вида "procedure Nnn(Sender: TObject)". Ну а дальше простым присваиванием вешаете его на OnTerminate. И вот еще думаю пригодится: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342

    Всего записей: 2189 | Зарегистр. 24-05-2007 | Отправлено: 20:14 24-06-2010
    lezval

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    Тогда в первую очередь надо ориентироваться на длину элемента списка, какое длиннее, то и больше. Если длина одинаковая, то сравниваем как обычные строки. Хотя и здесь есть проблема. Как сравнивать, например, "2" и "1а", кто из них больше? В общем надо четко сформулировать критерий, а дальше  корректировать под него любой метод сортировки.

    Всего записей: 67 | Зарегистр. 15-02-2006 | Отправлено: 20:31 24-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lezval
    Я пытаюсь переделать имеющуюся функцию под имеющуюся проблему:
     
    procedure TIntList.QuickSort(L, R: Integer; SCompare: TIntListSortCompare);
    var
      I, J, P: Integer;
    begin
      repeat
        I := L;
        J := R;
        P := (L + R) shr 1;
        repeat
          while SCompare(Self, I, P) < 0 do Inc(I);
          while SCompare(Self, J, P) > 0 do Dec(J);
          if I <= J then begin
            ExchangeItems(I, J);
            if P = I then P := J
            else if P = J then P := I;
            Inc(I);
            Dec(J);
          end;
        until I > J;
        if L < J then QuickSort(L, J, SCompare);
        L := I;
      until I >= R;
    end;
     
    Может у кого появятся мысли...

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 20:48 24-06-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    Можно добавить в начало строк нолики чтобы все числа имели одинаковый формат. Например для трехзначных чисел получим: "001 ...", "007 ...", "049 ...", "200 ...".

    Всего записей: 2189 | Зарегистр. 24-05-2007 | Отправлено: 21:08 24-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Логично, но не подойдёт.
     
    В Тотале это-же как-то делается, без видимых усилий.

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 21:29 24-06-2010 | Исправлено: Aleksandr N, 21:44 24-06-2010
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    В тотале сортируется по строкам, а вам нужно сравнивать по своему алгоритму. Напишите метод SCompare сравнения двух элементов списка и будет вам счастье.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 21:56 24-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser
    Я весь мозг вывихнул, не получается. Функция выше - это переделанная автором функция из Classes.

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 22:01 24-06-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    В любом случае строки нужно будет парсить. А дальше уже либо сравнивать сначала цифровую часть, потом строковую, либо приводить строки к общему формату а потом уже сравнивать.

    Всего записей: 2189 | Зарегистр. 24-05-2007 | Отправлено: 22:09 24-06-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Aleksandr N

    Цитата:
    Да, подходит. Но имена файлов могут оказаться и в виде слов. Тогда этом метод не подойдет. Как в этом случае?

    Если имена файлов будут в виде слов, то сортируй их отдельно, а потом вставь снизу списка остальных файлов.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 22:15 24-06-2010
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    В Jedi Code Library, в модуле JclStrings.pas есть функции CompareNatural*
    Они сравнивают строки с учётом того, что в них могут быть цифры.
    Может они и подойдут.

    ----------
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1442 | Зарегистр. 13-10-2005 | Отправлено: 22:52 24-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Bonivur
    На худой конец буду так делать.
    data man
    Посмотрю.
     
    P.S. Умные мысли приветствуются.

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 23:20 24-06-2010
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    ИМХО сам создаешь себе лишнюю головную боль. Создай два списка - где имена начинаются с цифры и где с не цифрыю Отсортируй каждый отдельно и потом слей в один. Это уменьшит число проверок на начало с цифры и ускорит сортировку. Строки с цифрами я бы сортировал примерно так

    Код:
     
    procedure MinMax(var Min, Max:string);
    var
        i,j, Code:integer;
         
    begin
        val(Min,i,Code);
        val(Max,j,Code);
        if i>j then Swap(Min,Max);
    end;
     

    то есть идея такая - при помощи Val получаем числовую часть строки и сравниваем значения числовых частей. Если минимальная строка на самом деле больше максимальной - то меняем местами значения.
    ADD
    либо создаем такой тип данных

    Код:
     
    type
        TListRec = record
             IntPart:integer;
             StrPart:string;
         end;
         
    var
         a:array of TListRec;
     

    в итоге заполняешь массив след образом - в IntPart помещаешь числовую часть строки, в StrPart помещаешь саму строку. Потом сортируешь массив любым способом по IntPart, в итоге получаешь отсортированный массив который сливаешь в список.

    ----------
    И создал Бог женщину... Существо получилось злобное, но забавное...

    Всего записей: 3931 | Зарегистр. 29-07-2003 | Отправлено: 03:03 25-06-2010 | Исправлено: ShIvADeSt, 04:31 25-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Наверное так и придётся. Спасибо.

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 12:14 25-06-2010
    YuriyRR



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Aleksandr N

    Цитата:
    Каким образом можно привести список к виду:

     
    Создавать файлы  
    01
    02
    ...
    09
    10
    11
    и т.д.

    Всего записей: 500 | Зарегистр. 07-06-2007 | Отправлено: 15:20 25-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuriyRR
    Оригинально, а главное свежо.

    Всего записей: 1453 | Зарегистр. 25-02-2008 | Отправлено: 17:27 25-06-2010
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    AFAIR AnsiCompareStr как раз именно так и сравнивает.
    и TStringList использует для сортировки как раз его

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 13:04 26-06-2010 | Исправлено: A_V, 13:09 26-06-2010
    EugeneBoss3



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Знатоки, подскажите, плиз, как по таймеру задержать отрисовку компонента? Например, если курсор мыши на компоненте -> изменить цвет Caption через 500 ms

    Всего записей: 234 | Зарегистр. 15-09-2009 | Отправлено: 03:24 27-06-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EugeneBoss3
    Когда курсор окажется над компонентом запустить таймер. В таймере поменять цвет надписи и отключится.

    Всего записей: 2189 | Зарегистр. 24-05-2007 | Отправлено: 14:48 27-06-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

    Имя:
    Пароль:
    Сообщение

    Для вставки имени, кликните на нем.

    Опции сообщенияДобавить свою подпись
    Подписаться на получение ответов по e-mail
    Добавить тему в личные закладки
    Разрешить смайлики?
    Запретить коды


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2018

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru