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

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

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

ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Chukotka
Спасибо!!! То что нужно.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 04:33 03-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникли еще вопросы:
1. Нужен таймер, отсчитывающий время в секунадх. Надо для отсчета времени воспроизведения потокового аудио. Лучшим вариантом для меня будет SetDlgItemText с результирующим значением в процедуре, которую буду обновлять через WM_TIMER. Посмотрел некоторые реализации таймеров с секундами - там используется FormatDateTime. Хотелось бы чтобы таймер отображал минуты и секунды - ну типа так 00:00
2. В библиотеке BASS есть функция BASS_SetConfig. Так вот там есть таймаут соединения, при котором если ответ от сервера не получен, действия дальнейшие прекращаются. Это BASS_CONFIG_NET_TIMEOUT. У меня другая трабла: некоторые радио вообще не играют, но порт после этого остается открыт, если перейти к другой станции. Если поток нормально открывается и переходить к другой станции, то все нормально - текущий порт закрывается и открывается новый. Тут этого не происходит. Может тут тоже нужно повесить таймер? Смотрел справку к этой библиотеке и там вроде не было такой функции для такого таймаута, а в демо примере фигня и не все возможности задействованы.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 14:05 03-01-2008
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите алгоритм корректировки CRC32? Есть RAW файл, в котором можно изменить только 16 байт по заданному адресу. Спасибо.

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 18:03 03-01-2008
Chukotka

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

Цитата:
Возникли еще вопросы


Цитата:
Нужен таймер, отсчитывающий время в секундах...
Хотелось бы чтобы таймер отображал минуты и секунды

Вы для начала определитесь, что у вас должен делать таймер. Потом попробуйте сходить на форум на сайте производителя и позадавать вопросы там. Чтение литературы тоже очень помогает. А то создается впечатление, что при возникновении проблемы вы не пытаетесь решить ее самостоятельно, а сразу взываете о помощи.

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 18:29 03-01-2008 | Исправлено: Chukotka, 18:37 03-01-2008
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Chukotka. 16 байт.

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 18:38 03-01-2008
Chukotka

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

Цитата:
Подскажите алгоритм корректировки CRC32

А поиск использовать религия запрещает? Хотя бы вот так - гугл выдает примерно 278 страничек.

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 18:41 03-01-2008
YuRRiX

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Chukotka
Сформируй запрос.
99.9999999999999999% касаются только вычисления. или изменения pe файлов.

Всего записей: 31 | Зарегистр. 07-02-2006 | Отправлено: 18:46 03-01-2008
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuRRiX
вот здесь - FAQ по вычислению CRC - faqs_org_ru  
посмотрите там ответ Подробнее...
предвидя возможные вопросы, сразу предупреждаю, я в алгоритме восстановления не разбирался ;-)
 

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 19:41 03-01-2008
Chukotka

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

Цитата:
Подскажите алгоритм корректировки CRC32

По сути же, вам нужен алгоритм корректировки файла под конкр CRC.
SERGE_BLIZNUK
Спасибо за ссылку, сохранил для себя на будущее - вдруг пригодится.

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 20:06 03-01-2008
Maks150988



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

Цитата:
Вы для начала определитесь, что у вас должен делать таймер. Потом попробуйте сходить на форум на сайте производителя и позадавать вопросы там. Чтение литературы тоже очень помогает. А то создается впечатление, что при возникновении проблемы вы не пытаетесь решить ее самостоятельно, а сразу взываете о помощи.

Да я в поисковиках смотрел. Там ерундень типа как обновить окошко через определенный промежуток времени и т.д. Мне нужно чтобы начинал отсчет таймер и его результат отображался в виде "минуты:секунды". Ну как в часах секундомер есть, вот это и надо. Не знаю как объяснить то еще.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:16 03-01-2008
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, кто-то сталкиваля с проблемой ввода украинского языка в делфи-приложениях под Вистой :-?
(русский при этом работает, копи-паст украинского тоже - не работает только клавиатурный ввод украинского)
 
Похоже на неправильную настройку локалей или что-то такое :) под ХР всё нормально..
Заранее спасибо за помощь ;)

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 21:35 03-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну неужели здесь никто не может помочь как создать обычный секундомер? Ну не могу найти пример. И не знаю как таковое сделать...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 15:34 06-01-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xy Это проблемы Висты. Нужно поставить специальный хотфикс, который высылают по запросу на почту ( http://support.microsoft.com/kb/936060/en-us ), или подождать sp1.
 
Maks150988 Есть несколько способов сделать секундомер. Простейший вариант делается в три этапа:
1. Чтобы во время работы секундомера знать сколько уже прошло времени нужно перед его запуском сохранить текущее время в переменную.
2. TDateTime по сути является Double, тоесть простым числовым типом, который хранит количество милисекунд. А значит с ним как с числовым типом можно производить любые арифметические операции. В каждом цикле таймера будем отнимать от текущего времени сохраненное перед запуском. Полученная разница и есть количество прошедшего времени.
3. Осталось все это вывести. Например в лебел. Идеально подходит для этого функция FormatDateTime. Первый параметр у нее - строка определяющая форматирование. Узнать про нее можно в справке, в D7 статья называется "Date-Time Format Strings". Второй параметр наша разница. Впрочем полученный текст можно выводить куда угодно.
Недостаток этого способа очевиден: если во время работы нашего секундомера ктото переведет системное время, он собьется.
Если это критично, можно организовать секундомер по другому:
1. Заводим переменную TDateTime и обнуляем ее.
2. Выставляем фиксированный промежуток работы таймера. Например 100 мс.
3. При каждом срабатывании таймера увеличиваем нашу переменную на указанный промежуток (100 мс).
4. Выводим как и в предыдущем способе.
У этого способа тоже есть недостаток. Если по вине какогото ресурсоемкого приложения наша программа зависнет, то таймер не сработает, и переменная не будет увеличена.
 
P.S. Если вам не охота в следующий раз читать такой здоровенный трактат, то постарайтесь, прежде чем задавать свой вопрос, потратить чуть больше времени и усилий и всеже найти на него ответ самостоятельно.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 15:35 06-01-2008 | Исправлено: Frodo_Torbins, 18:05 06-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Да никогда я не делал такие таймеры. Максимум SetTimer для какой-то процедуры. Надо полагать FormatDateTime('mm:ss', переменная + 1)? Я затрудняюсь. Киньте хотя бы набросок.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 18:12 06-01-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А вы поэкспериментируйте

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 20:01 06-01-2008
Chukotka

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

Цитата:
 Надо полагать FormatDateTime('mm:ss', переменная + 1)?  

А почему не сделать усилие и не почитать описание функции в справочной системе Delphi? Не я один вам замечал, что одно дело, когда перед тем, как задавать вопрос, человек пытается решить вопрос самостоятельно, а другое - когда при любом затруднении бежит в форум.
А с таким отношением как у вас, скоро на все вопросы будут отвечать одним словом: rtfm (поищите в инете, что это значит).

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 20:54 06-01-2008 | Исправлено: Chukotka, 20:57 06-01-2008
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
спасибо!

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 21:04 06-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Chukotka
а че бы не помочь вам? почему на каких-то форумах помогают чуть ли не как создать мессаджбокс, а тут не хотят написать долбанный пример с этим FormatDateTime?
открою секрет. мнеу нужен этот таймер для отсчета времени вопроизведения аудио потока в bass. к ней такого примера нихрена нет. кое-как удалось найти исходники подобных плейеров, но там код типа FormatDateTime ('nn:ss', Length / (1000 * 24 * 60 * 60)), где lenght - длина аудио потока. так вот я тут двал свой исходный код. и если подкорректировать мой код под этот, то длина всегда постоянна 02:00. Вот я и подумал что нужно сделать тогда обычный секундомер, но поиском находит десяток одинаковых примеров, где делфийцы показывают как выполнить в определенное время како-то задание по таймеру. делфи я устанавливал без справок, а дистрибутива нет. с выходом в инет проблемы тоже. вот блин попросил помощи называется...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 23:49 06-01-2008
Chukotka

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

Цитата:
а че бы не помочь вам?

Только хамить не надо. Одно дело, когда просят разобраться в проблеме, а другое - когда человек упорно просит разжевать штатную функцию, полностью описанную в справке. Кроме того, вам Frodo_Torbins полностью разжевал процедуру.  

Цитата:
а тут не хотят написать долбанный пример  

Научитесь правильно задавать вопросы, тогда не надо будет "открывать секреты". Тут народ в основном доброжелательный, но при одном условии - когда видно, что человек перед тем, как задать вопрос, поработал сам. Вы же беретесь писать на чистом API и заботитесь о том, чтобы "программа не увеличилась на 30Кб" в результате использования дополнительной библиотеки. Может не обманывать себя, установить нормальный дистрибутив, почитать справку и реализовать все в vcl для начала?
 
PS. Если процедура MetaSync() является calback'ом и периодически вызывается при проигрывании, то тут вообще не нужен таймер. Отображайте время точно так же, как отображали процент скачивания:

Код:
var
  StartedAt: TDateTime;
const
  UpdatedAt: TDateTime = 0;
  OneSec = 1 / (60 * 60 * 24);
  ...
  // при старте проигрывания
  // play it!  
  BASS_ChannelPlay(chan, FALSE);  
  StartedAt := Now;
  ...
  // при обновлении
  case LoWord(wp) of  
  ...
    7:
    begin
      if (Now > UpdatedAt) then
      begin
        UpdatedAt := Now + OneSec;
        Text := FormatDateTime('Время проигрывания hh:nn:ss', Now - StartedAt);  
      end;
    end;
 

Если MetaSync() не срабатывает, то создавайте таймер и вставляйте код отображения времени в реакцию на событие таймера.

Всего записей: 428 | Зарегистр. 01-11-2006 | Отправлено: 00:53 07-01-2008 | Исправлено: Chukotka, 01:30 07-01-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ба, ну наконец-то! Большое спасибо. Как раз вынес все это в отдельную процедурку. После BASS_ChannelPlay(chan, FALSE) прописал ее. И через wm_timer активировал, предварительно прописав в процедуре settimer.
P.S. да не принимайте близко так. Я не хамил. Просто действительно, ну нет у меня возможности найти дистрибутив делфи. Какой есть сейчас без файлов документации.
А искать в поисковиках уже надоело, потому что по большему счету выдавалась информация о запуске события по таймеру.
Ну не привык я работать с таймером. Для меня смутно все.
P.P.S. Я бы не задавал таких вопросов, если бы на VCL весь интерфейс делал. Через сплошной API трудно, но очень интересно и познавательно.
Огромная благодарность.))

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 02:00 07-01-2008
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru