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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 124 125

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

ShIvADeSt



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

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


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


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    Aleksandr N

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

    Всего записей: 1665 | Зарегистр. 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

    Всего записей: 2319 | Зарегистр. 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;
     
    Может у кого появятся мысли...

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

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

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

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

    Всего записей: 1665 | Зарегистр. 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.

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

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

    Всего записей: 2319 | Зарегистр. 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*
    Они сравнивают строки с учётом того, что в них могут быть цифры.
    Может они и подойдут.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

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

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

    Всего записей: 1665 | Зарегистр. 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, в итоге получаешь отсортированный массив который сливаешь в список.

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

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

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

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



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

    Цитата:
    Aleksandr N

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

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

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

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

    Всего записей: 1665 | Зарегистр. 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

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

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

    Всего записей: 2319 | Зарегистр. 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 124 125

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


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru