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

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



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

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

    Мне нужно отследить срабатывание таймера и только после этого перерисовать компонент.
    salexn1

    Цитата:
    А что должен делать компонент?

    При вхождении курсора мыши в область компонента запустить таймер, после выхода из области остановить таймер

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 00:43 16-07-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Frodo_Torbins
    В новых версиях Delphi (начиная с 2006) многие процедуры и функции для работы со строками были переписаны на ассемблере. Скорость работы значительно улучшена. Почитайте Канту. Сами же советовали

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 01:37 16-07-2010
    mdid

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EugeneBoss3
    я так пологаю самый верный способ будет написать свой компонент на основе текущего...перехватить его событие OnPaint и перерисовывать когда какая то переменная= true..которая в свою очередь будет выставляться в true когда будет курсор на компоненте..так же попробуйте выставить форме DoubleBuffered:=true

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 09:15 16-07-2010
    SIgor33

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите кто-нибудь работал с cryptopro через delphi? Интересуют вопросы по ЭЦП. Если есть наработки поделитесь!

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 11:41 16-07-2010
    andrewtishkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33
    С этой темой на Delphi в сети туго... Несколько полезных ссылок (есть и архив с кой-какими делфи-примерами) и книг упоминали тут: Работа с CryptoAPI в Delphi или C++ Builder

    Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 12:21 16-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Pos все же оптимизирован на поиск подстроки в строке, а не одного символа. Если же нужно найти всего один символ, то с простым циклом мало что сравнится.
    Но у автора изначального вопроса все еще проще - строка задана изначально и отсортирована. Вполне можно обойтись парой if-ов и одним Ord-ом.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:36 16-07-2010
    EugeneBoss3



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

    Цитата:
    я так пологаю самый верный способ будет написать свой компонент на основе текущего


    Цитата:
    Мне нужно отследить срабатывание таймера

    Как раз тем и занимаюсь что пишу новый компонент на основе текущего, но не знаю как отследить срабатывание таймера т.к. OnTimer не булевый

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 11:18 17-07-2010
    Frodo_Torbins

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

    Цитата:
    но не знаю как отследить срабатывание таймера т.к. OnTimer не булевый

    Причем тут булевость о_О ? OnTimer - это событие. Подробности: Пособие по написанию компонентов на Дельфи.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 13:20 17-07-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Frodo_Torbins
    Да уж по этому только и учиться. Прямое обращение к полям в private без properties Энкапсуляция идет лесом ...

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 20:16 17-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Хотел сначала дать ссылку на Жизнь и смерть в режиме run-time, но королевство в последнее время так колбасит, что пришлось искать альтернативу.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:42 17-07-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вопрос такой - диалог TSaveTextFileDialog имеет список Encodings. Они что изначально ни привязаны ни к каким объектам (я имею в виду, конечно, кодировки TEncodings)? Просто пустышки что ли? Чтобы сохранить файл в нужной кодировке приходится вручную прописывать AssignObects как описано в документации
     
    Неужели трудно было изначально приписать каждому элементу списка Encodings соответсвующую кодировку TEncoding???? Или может я чего не так понимаю и есть более простой способ сохранения текста Memo в файл в нужной мне кодировке?

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 01:17 18-07-2010
    EugeneBoss3



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Как же отследить срабатывание таймера? Можно пример?

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 04:10 18-07-2010
    Bonivur



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

    Цитата:
    Как же отследить срабатывание таймера? Можно пример?

    Хотя вопрос и не мне был задан, но в примере, который дал Frodo_Torbins  -
    все подробно описано


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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 10:00 18-07-2010
    Frodo_Torbins

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

    Цитата:
    Вопрос такой - диалог TSaveTextFileDialog имеет список Encodings. Они что изначально ни привязаны ни к каким объектам (я имею в виду, конечно, кодировки TEncodings)? Просто пустышки что ли?

    В dfm ссылки на ассоциированные со строками объекты не сохранишь. А как имея локализованую строку текста (к примеру #32431#25991#26412) сопоставить с ней нужную кодировку?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 10:43 18-07-2010 | Исправлено: Frodo_Torbins, 10:57 18-07-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Frodo_Torbins
    Зачем в dfm? Все делается в коде компонента (и уже сделано, просто документация молчит, приходится лазить и искать самому . А насчет локализованной строки текста - мне это не надо кодировку выставляет пользователь вручную в диалоге SaveTextFileDialog. И это уже его забота выставить правильную. Кстати, вот код, который автоматически сохраняет текст в указанной в SaveTextFileDialog кодировке.
     

    Код:
     
    SaveDlg: TSaveTextFileDialog;
     
    ....
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      encoding : TEncoding;
    begin
      if SaveDlg.Execute then
      begin
        encoding := StandardEncodingFromName(SaveDlg.Encodings[SaveDlg.EncodingIndex]);
        Memo1.Lines.SaveToFile(SaveDlg.FileName,encoding);
      end;
    end;
     

     
    Все хорошо, все работает, кроме одного - кодировка UTF-7 не сохраняется ни в какую. Вместо нее сохраняется ANSI (Default). Не знаю почему...
     
    P.S. Но было бы просто отлично если можно было бы проверять есть ли в заданном тексте в Memo символы, которых нет в дефолтной кодовой странице компьютера пользователя (например, для России это обычно Win-1251, для запада 1252) и если такие символы имеются, то сохранять в Unicode, иначе - сохранять в ANSI.

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 10:53 18-07-2010 | Исправлено: Bonivur, 11:03 18-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Цитата:
    А насчет локализованной строки текста - мне это не надо кодировку выставляет пользователь вручную в диалоге SaveTextFileDialog.
    Вам это не надо, кому то надо, а VCL пишется так, чтобы удобно было всем. Для тех, кого устраивает дефолтный вариант вон даже специальную функцию придумали.

    Цитата:
    Все хорошо, все работает, кроме одного - кодировка UTF-7 не сохраняется ни в какую.
    Я надеюсь вы не простой 'Hello world!' сохраняете?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:10 18-07-2010
    Bonivur



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

    Цитата:
    А как имея локализованую строку текста (к примеру #32431#25991#26412) сопоставить с ней нужную кодировку?

    Определить кодировку текста в Memo можно без всяких процедур и функций. Это UTF16-LE. Или я не так понял Ваш вопрос?
     
    А сохраняю я конечно, не "Hello, world!" . Простой текст на русском языке.  


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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 11:32 18-07-2010 | Исправлено: Bonivur, 11:33 18-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Цитата:
    Но было бы просто отлично если можно было бы проверять есть ли в заданном тексте в Memo символы, которых нет в дефолтной кодовой странице компьютера пользователя (например, для России это обычно Win-1251, для запада 1252) и если такие символы имеются, то сохранять в Unicode, иначе - сохранять в ANSI.
    Юзайте WideCharToMultiByte напрямую, последний параметр вам в помощь. Но имхо если не планируется сохранять логи >100Мб то это лишние заморочки.

    Цитата:
    Определить кодировку текста в Memo можно без всяких процедур и функций. Это UTF16-LE. Или я не так понял Ваш вопрос?  
    Я о том, что SaveTextFileDialog1.Encodings[1] в Китае может быть совсем не 'ANSII', а какие нибудь иероглифы, которые означают тоже самое. И вот, как бедная VCL без помощи программиста должна определить, что требуется TEncoding.ASCII?
    Тем более что дефлотный вариант не приемлем даже в Америке с точки зрения дружественности интерфейса. И по хорошему вместо 'ANSII' должно быть что то вроде 'Plain text', а вместо 'UTF8' - 'Unicode'.

    Цитата:
    А сохраняю я конечно, не "Hello, world!" . Простой текст на русском языке.
    А чем тогда смотрите?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:56 18-07-2010 | Исправлено: Frodo_Torbins, 11:59 18-07-2010
    Bonivur



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

    Цитата:
    Юзайте WideCharToMultiByte напрямую, последний параметр вам в помощь. Но имхо если не планируется сохранять логи >100Мб то это лишние заморочки.

    Почему лишние? Сохранять все в Unicode? А если система до WinXP?
     

    Цитата:
    Я о том, что SaveTextFileDialog1.Encodings[1] в Китае может быть совсем не 'ANSII', а какие нибудь иероглифы, которые означают тоже самое. И вот, как бедная VCL без помощи программиста должна определить, что требуется TEncoding.ASCII?  
    Тем более что дефлотный вариант не приемлем даже в Америке с точки зрения дружественности интерфейса. И по хорошему вместо 'ANSII' должно быть что то вроде 'Plain text', а вместо 'UTF8' - 'Unicode'.

    Так речь и не шла об автоматическом определении кодировки, а о том, что пользователь открыв диалог SaveTextFileDialog выбирает в нижнем поле желаемую кодировку и файл в ней и сохраняется. Я ожидал такого поведения от этого компонента. Но это оказалось не так и надо было использовать функцию из модуля ExtDlgs.pas , чтобы добиться этого. В документации про это ни слова.  

    Цитата:
    А чем тогда смотрите?

    AkelPad и WordPad.

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

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 12:17 18-07-2010 | Исправлено: Bonivur, 12:19 18-07-2010
    EugeneBoss3



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Все что в примере подробно описано мною сделано
    // Вот моя процедура  
    procedure TMyLabel.TimerEvent(Sender: TObject);  
    begin  
      Sleep(FInterval);   ???  
      // Генерируем событие OnTime компонента  
      if Assigned(FOnTimer) then FOnTimer(Self);  
    end;
    В свое примере я попытался сделать задержку, но задержка получилась ПОСЛЕ отрисовки. Вот я и прошу помочь разобраться где я делаю не так?

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 13:00 18-07-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