Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 896
от 15.08.2007, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 471, Экспертов: 81
В номере:Вопросов: 4, Ответов: 9


Вопрос № 97894: Здравствуйте господа эксперты! Проблемам вот в чем: есть сторонняя программа в ней таблица (предположительно DBGrid) строчки в ней удаляются по нажатию клавиш Ctrl+Delete и Enter, необходимо создать программу типа имитации нажатия клавиш, по нажатию ...
Вопрос № 97897: Здравствуйте! Есть необходимость зациклить видеоролик в компоненте MediaPlayer (!). Как это сделать? Ответы, типа, Play() в OnNotify() не предлагать - слишком большая пауза получается между повторами....
Вопрос № 97913: Здраствуйте эксперты. Хотел бы задать вопрос. Имееются две таблици формата Paradox 7 связанные Master-Detail. При удалении данных из главной таблици возникает ошибка : "Master has detail records. Cannot delete or modify". ...
Вопрос № 97928: Как добитьтся того, что в прграмме, написанной на Delphi, при ее переносе на другой колмпьютер или смене Windows были видны русские шрифты (стоит ???). В Таблицах все нормально Новиков...

Вопрос № 97.894
Здравствуйте господа эксперты! Проблемам вот в чем: есть сторонняя программа в ней таблица (предположительно DBGrid) строчки в ней удаляются по нажатию клавиш Ctrl+Delete и Enter, необходимо создать программу типа имитации нажатия клавиш, по нажатию которых строчки бы удалялись автоматически пока удерживаются эти клавиши.
Как это можно реализовать? Заранее всем спасибо.
Отправлен: 10.08.2007, 00:04
Вопрос задал: Пирогов Сергей Иванович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sandy
Здравствуйте, Пирогов Сергей Иванович!
Я вижу примерно так. Создаете переменную -флаг на удаление. В обработчике onIdle приложения делаете программное удаление строк если флаг установлен.
Анализируете событие onKeyDown и если нажата искомая комбинация клавиш устанавливаете флаг. Анализируете onKeyUp и при отпускании клавиш флаг сбрасываете.
Вам понадобится, вероятно, установить св-во KeyPreview формы чтобы отслеживать клавиши вручную.
Только в целом идея такого механизма удаления представляется весьма опасной - а если лишние пару сек задержитесь и удалите, скажем, месячный баланс? Надо предусмотреть возможность восстановления строк - удаление из основной таблицы и создание аналогов в архивной; не физическое удаление а пометка строк в специальном поле и отсеивание их по этому полю в запросах. Но это уже другая история.
Ответ отправил: Sandy (статус: 9-ый класс)
Ответ отправлен: 10.08.2007, 09:44
Оценка за ответ: 3
Комментарий оценки:
Пожалуйста, меньше теории!


Вопрос № 97.897
Здравствуйте!
Есть необходимость зациклить видеоролик в компоненте MediaPlayer (!). Как это сделать?
Ответы, типа, Play() в OnNotify() не предлагать - слишком большая пауза получается между повторами.
Отправлен: 10.08.2007, 00:26
Вопрос задал: Spok (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Mishell
Здравствуйте, Spok!
да действительно по OnNotify плейер срабатывает как-то странно (бывает даже и не срабатывает)
я зацикливал MediaPlayer с помощью таймера - конечно тоже не идеальный вариант, но работает без проблем
в OnTimer я делал так:
if (MediaPlayer1.Mode=mpStopped) or (MediaPlayer1.Mode=mpOpen)
then MediaPlayer1.Play;
Ответ отправил: Mishell (статус: 5-ый класс)
Ответ отправлен: 10.08.2007, 10:18
Оценка за ответ: 3
Комментарий оценки:
Хорошо. Правильный ответ для моего и, главное, ВАШЕГО, случая, код в обработчике OnNotity():
if MediaPlayer1.Mode=mpStopped then MediaPlayer1.Play;
Вот этот код - самый быстрый известный мне вариант - и даёт офигительную паузу.

Отвечает: DimonSoft
Здравствуйте, Spok!

Как ни странно, но именно OnNotify и ничего другого. В идеале, конечно. Никто не гарантирует, что воспроизводимый Вашей программой звук не содержит тишину в конце, которую Вы воспринимаете как запаздывание события OnNotify. Причём даже если в других плеерах тишины в конце нет, это вовсе не означает, что Ваша программа будет использовать те же кодеки, что и эти плееры, а, следовательно, что и в Вашей программе не обнаружится тишина в конце звукового файла. Всё это справедливо и для начала композиции.

Год назад я занимался написанием обучающего программного комплекса. В нём использовал TMediaPlayer и смена музыки осуществлялась именно по OnNotify. Как принято сейчас говорить, "Вы не любите OnNotify? Возможно, Вы просто не умеете его готовить". :) Проверьте код на это событие и продумайте, почему может возникать запаздывание. Может быть, у Вас там слишком много действий.

Теперь об альтернативных вариантах. Вариант первых, на тот случай, если эта программа Вам нужна не для того, чтобы сдавать кому-то в пользование, и Вы чувствуете в себе непреодолимую тягу к мазохизму... В интернете есть огромное количество описаний форматов различных звуковых файлов и приёмов работы с ними. Попробуйте написать свой компонент-ззамену TMediaPlayer'у.

Вариант второй. Как уже было сказано, воспользуйтесь таймером. Способ будет ужасно глючным. Придётся ставить очень небольшой интервал (десятки миллисекунд), но всё равно будет заметна разница между двумя перезапусками звука, т.к. стандартный таймер использует слишком простые приёмы для работы. Можно поискать специальные таймеры в интернете или почитать о том, как сделать мультимедийный таймер средствами WinAPI, но это будет ужасно сложно.

Вариант третий. Самый лучший. Воспользуйтесь TApplicationEvents. Создайте процедуру для события OnIdle. В этой процедуре напишите

Done:=False;

Всё готово. Теперь любой код, который Вы напишете здесь, будет исполняться постоянно, намного чаще и равномернее, чем по таймеру. Важно только, чтобы Done:=False; исполнялось при каждом (!) вызове этой процедуры. Вообще же код должен из себя представлять установку этого самого Done в False и проверку на то, не закончилось ли воспроизведение. И только если воспроизедение закончилось, выполняюся необходимые действия.

Удачи в работе. С уважением, DimonSoft.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 10.08.2007, 11:01
Оценка за ответ: 3
Комментарий оценки:
Ваши пространные измышления насчёт звуков к конце и начале ВИДЕОролика (кстати, без звуковой дорожки) просто восхитительны!


Вопрос № 97.913
Здраствуйте эксперты. Хотел бы задать вопрос.
Имееются две таблици формата Paradox 7 связанные Master-Detail.
При удалении данных из главной таблици возникает ошибка :
"Master has detail records. Cannot delete or modify".
В том случае если записей в подчиненной таблице нет запись в главной удаляется нормально.

Вопрос: как сделать так чтобы записи в подчиненной таблице удалялись вместе с главной автоматически .

Спасибо.
Отправлен: 10.08.2007, 08:48
Вопрос задал: AlexUzl (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Shveps
Здравствуйте, AlexUzl!
В Database Desktop из инструментария к Delphi. Нужно реструктуризировать таблицу Table->Restructure. В следующем диалоговом окне где Table Properties выбрать Referential Integrity. Нажать Define. Соединить две таблицы по Master - > Detail и в Update Rule выбрать Cascade. В этом случае должно работать каскадное удаление.
---------
Пиво ф топку !!! Водку Тоже !!!
Ответ отправил: Shveps (статус: 8-ой класс)
Ответ отправлен: 10.08.2007, 09:04

Отвечает: Stari
Здравствуйте, AlexUzl!
попробуйте переоткрыть DataSet.
А неужели вам так необходимо использовать Master-Detail ?
можно сделать всё программным путём, мороки немного больше зато как мне кажется можно лучше следить за всеми изменениями в бд
Ответ отправил: Stari (статус: 1-ый класс)
Ответ отправлен: 10.08.2007, 09:42

Отвечает: Delph
Здравствуйте, AlexUzl!

Я бы на Вашем месте использовал событие BeforeDelete (находится а вкладке Events любого DataSet'а). Там можно написать строки вроде тех, что приведены в приложении (с поправкой на имена таблиц и полей в Вашей базе данных). В таком случае при любом удалении из главной таблицы будет вначале вычищаться подчинённая, после чего нормально пройдёт удаление из главной. В этом коде используется компонент TempQuery: TQuery. Рекомендую почаще использовать Query-компоненты для всех изменений в базе данных, поскольку в этом случае Вы можете полностью контролировать эти изменения.

Создать обработчик нужного события можно двойным щелчком по нему в инспекторе объектов. Далее пропишите в нём нужную реакцию, и можно проверять, как работает программа.

Приложение:

Ответ отправил: Delph (статус: 6-ой класс)
Ответ отправлен: 10.08.2007, 10:08


Вопрос № 97.928
Как добитьтся того, что в прграмме, написанной на Delphi, при ее переносе на другой колмпьютер или смене Windows были видны русские шрифты (стоит ???). В Таблицах все нормально
Новиков
Отправлен: 10.08.2007, 11:33
Вопрос задал: Новиков Сергей Михалович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: CjJoker
Здравствуйте, Новиков Сергей Михалович!

Если это какие-либо отчеты или связано с базой данных, то вероятно поможет:

создайте файл такого вида, 1251.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMControlSet001ControlNlsCodePage]
"1252"="c_1251.nls"
Ответ отправил: CjJoker (статус: 3-ий класс)
Ответ отправлен: 10.08.2007, 11:45

Отвечает: Shveps
Здравствуйте, Новиков Сергей Михалович!
Скорее всего, в программе вы применяли нестандартные шрифты, которых нету на другом компе. Нужно установить в репозитарий шрифтов Windows такие-же шрифты, которые вы применяли приразработке программы. Ещё один вариан, что на том компе неправильные настройки для драйвера базы данных или SQL сервера.
---------
Пиво ф топку !!! Водку Тоже !!!
Ответ отправил: Shveps (статус: 8-ой класс)
Ответ отправлен: 10.08.2007, 11:49
Оценка за ответ: 4

Отвечает: Витомский Вадим Викторович
Здравствуйте, Новиков Сергей Михалович!
Судя по всему, на другом компьютере в Виндовсе стоят неверные региональные настройки, я уже с таким встречался раньше (все надписи в меню и на форме были квадратиками). Зайдите в панель управления и исправьте региональные настройки, должно помочь.
---------
Не так страшен черт, как его чертовка!
Ответ отправил: Витомский Вадим Викторович (статус: 10-ый класс)
Ответ отправлен: 10.08.2007, 13:33


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.54 beta от 01.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное