Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  03:17[Войти] | [Зарегистрироваться]
Ответ на вопрос № 72165

05-08-2009 12:32
Здравствуйте! В работающем проекте открываю файл *.docx, у которого есть картинки, компонентом WebBrowser из библиотеки Internet. Открывается в оболочке Word 2007 и в процессе открытия появляется окно MS Word ошибки - "неверно указана еденица измерения", но ее я не задавал. После нажатия ОК файл открывается нормально и с ним можно делать все, что хочешь, хотя мне нужно чтобы он только читался. Что нужно для этого сделать и где можно об этом почитать? Можно ди спрятать оболочку Word 2007?

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

22-01-2010 04:43 | Комментарий к предыдущим ответам
Жуть во оффтоп мощный, началось с Ворда, вылелось в воспроизведение файлов...
Слов нет, модераторы мое сообщение тоже оффтоп в принципе, можно удалять, просто не сдержался...

11-10-2009 03:22 | Сообщение от автора вопроса
Направил "фрагмент предисловия.docx" для размышления. Обратите внимание на P.S. в конце фрагмента. Ссылка: http:\\siil.ru/28065679. Жду Ваше мнение по этому вопросу.

09-10-2009 08:21
Как мне Вас найти если возникнет необходимость?
Если что, пишите прямо сюда :-)

P.S. Как доработаете учебник, копию дадите? Может как-нибудь займусь изучением французкого :D

09-10-2009 07:02 | Сообщение от автора вопроса
Огромное спасибо! Всё полочилось. Раньше не мог понять эти значения  в полях "Перед" и "После" и мучился с ними, но теперь разобрался. Поменял во всех исходных 12 главах и полный порядок. Немного жалко, но больше по этой теме вопросов нет. Займусь ликбезом по теории и может быть придумаю что-то ещё. Как мне Вас найти если возникнет необходимость?

09-10-2009 03:44
Разобрался, у вас в документе установлен интервал между абзацами, поставьте значение 0 в поля "Перед" и "После", и заново установите межстрочный интервал.

09-10-2009 03:25 | Комментарий к предыдущим ответам
Уже не надо ссылку, нашёл ваш файл по имени, сейчас буду смотреть.

09-10-2009 03:22
Не знаю как работает этот сайт.
Выбираете файл, отправляете его и вам даётся ссылка (вида: http://slil.ru/5422452), по которой можно скачать этот файл с их сервера. Мне необходима ссылка.

09-10-2009 00:18 | Сообщение от автора вопроса
Не знаю как работает этот сайт. Вчера вечером сделал выкопировку из текста в word 2007 (в блокноте пишет как в оригинале исходного текста) и отправил - "Фрагмент текста.docx". Не знаю дошёл ли? Номер не записал, нужен ли он?

08-10-2009 08:54
Вы можете выложить фрагмент текста? Там где интервал "прыгает".
Закачать можно на http://www.zalil.ru

08-10-2009 06:33 | Сообщение от автора вопроса
С этой галочкой я создавал все тексты. В ней возникла необходимость когда писал тексты диалогов слева на французском, а справа перевод на русский и надо было,чтобы предложения не перехлестывались. Потом при форматировании использовал её к другим частям текстов. Наверно дело не в ней?

08-10-2009 05:12
Попробуйте в Word'е выделить весь текст и установить галочку "Не добавлять интервал между абзацами одного стиля" (есть только в 2007 версии, в том же окне "Абзац").

08-10-2009 01:41 | Сообщение от автора вопроса
Вставил код соответственно указаниям в одну форму, ругнулся, добавил RichEdit в Eses и скомпилировался. Открыл текст формы, но межстрочный интервал остался искаженным в тех местах, как в первонвчальном варианте. Не могли ведь символы языка текстов (у меня французские и русские) повлиять на интервалы при открытии текста в программе?

07-10-2009 08:59
Если будет какая-нибудь информация по межстрочным интервалам, готов опровать её в рабочем варианте.
Попробуйте вот так:

procedure RELineSpace(REhwnd: THandle; LineSpace: Byte);
var
PF: PARAFORMAT2; //если будет ругаться "Undeclared identifier..." - добавьте в Uses модуль "RichEdit"
begin
ZeroMemory(@PF, SizeOf(PF));
PF.cbSize:=SizeOf(PARAFORMAT2);
PF.dwMask:=PFM_LINESPACING;
PF.bLineSpacingRule:=LineSpace;

SendMessage(REhwnd, EM_SETSEL, 0, -1);
SendMessage(REhwnd, EM_SETPARAFORMAT, 0, LPARAM(@PF));
SendMessage(REhwnd, EM_SETSEL, 0, 0);
end;


...
RichEdit1.Lines.LoadFromFile(fileName);
//вставляете эту процедуру после открытия файла
RELineSpace(RichEdit1.Handle, 1); // где "1" это будет величина интервала (указываются только целые числа)
...


07-10-2009 04:14 | Сообщение от автора вопроса
Ещё раз благодарен за плодотворное и полезное общение по решению сложных для меня вопросов. Проект практически готов и буду потихоньку заниматься его украшательством. Если будет какая-нибудь информация по межстрочным интервалам, готов опровать её в рабочем варианте. Желаю Вам удачи.

06-10-2009 06:44 | Сообщение от автора вопроса
Весьма признателен. Отлично! А ларчик-то просто открывался. Век живу, век учусь. Со ShowModal не проходит - пропадает картинка плеера. Внесу изменения во все формы и подумаю как сделать так, чтобы кнопки были invisible, и была бы была только картинка плеера. О результатах сообщу.

06-10-2009 05:14
Может я путаю желаемое с возможностью?
Ну что вы :-) возможности здесь ограничиваются лишь фантазией. Предлагаю вариант:

//Допустим у вас три процедуры:

procedure TForm3.Button1Click(Sender: TObject);
begin
//"Возврат в оглавление"
end;


procedure TForm3.Button2Click(Sender: TObject);
begin
//"Открыть текст Главы.."
end;


procedure TForm3.Button3Click(Sender: TObject);
begin
//"Установить плеер"
end;

...

//эта процедура, предположем, открывает новую форму
procedure TForm1.Button0Click(Sender: TObject);
begin
Form3.Button2.Click; //открыли текст главы
Form3.Button3.Click; //открыли плеер

Form3.Show; //открыли саму форму
//кстати, а не лучше ли будет "Form3.ShowModal"?
end;


06-10-2009 04:24 | Сообщение от автора вопроса
Спасибо. Попробовал, срабатывает, возьму на вооружение. Если можно, вот такой вопрос: из главной формы Form1 открываю форму любой главы кодом:

  //переход из оглавл. к форме главы 1 (кнопка Глава1)
procedure TForm1.Button2Click(Sender: TObject);
begin
    //операция с третьей формой
Form3.Show; //открывается форма для Главы 1 и т.д.
end;

На открывающейся форме три кнопки: "Возврат в оглавление", "Открыть текст Главы..", "Установить плеер" и поле RichEdit1 для текста. Нажав кнопки, открываю текст, устанавливаю плеер, всё работает и по оканчании - закрываю плеер и перехожу в оглавление. Явно лишние шаги, а как сделать так, чтобы из главной формы открывалась допустим Form3 с уже открытым текстом и установленным плеером не могу сообразить. Тогда на форме не будут нужны видимые кнопки - достаточно будет закрыть плеер и закрыть саму форму для возврата в оглавление. В коде они конечно останутся,но командовать ими надо из Form1. Может я путаю желаемое с возможностью?

06-10-2009 01:20
Попробовал для Form3 в Event в сторке OnCloseQuery вписал RichEdit1.Clear. и при переходе в код выдаёт в середине экрана окошко: Error: 'RichEdit1.Clear' is not a valid identifier  OK  Help.
В самой строке OnCloseQuery писать не надо, просто два раза кликаете по этой строке, и среда Delphi автоматически вписывает обработчик OnCloseQuery в сам код, а уже в сам обработчик и вставляете RichEdit1.Clear;

procedure TForm1.RichEdit1Change(Sender: TObject); // <- автоматически вставится
begin // <- автоматически вставится
RichEdit1.Clear; // <- сюда вписываем сами
end; // <- автоматически вставится


06-10-2009 00:53 | Сообщение от автора вопроса
Попробовал для Form3 в Event в сторке OnCloseQuery вписал RichEdit1.Clear. и при переходе в код выдаёт в середине экрана окошко: Error: 'RichEdit1.Clear' is not a valid identifier  OK  Help. В Help-е говорится о правилах написания. При такой конструкции они не нарушены, но как говорится в программе "Время" Однако...? Непосредственно для моего ПК это не имеет значения, памяти хватает и не тормозится, но опробовал диск на Notebook-е друга и чувствовалась перегрузка памяти. Всвязи с эти и возник вопрос.

05-10-2009 21:29
Как проверить, удаляется ли предыдущий текст из памяти после открытия следующей главы и как сделать так, чтобы память очищалась?
Достаточно будет, вписать в событие формы FormCloseQuery, очистку RichEdit1.Clear.

При открытии текста в программе, интервал самопроизвольно меняется в различных местах, что не очень удобно при прокрутке текстов.
Подумаю...

05-10-2009 01:54 | Сообщение от автора вопроса
Компановка и прогон проекта завершены успешно. Теперь в нем 4 папки, файл AudioPlayer.pas и 16 Форм вместо 5-ти прежних. Работать так удобнее, хотя будут изменения. Текстовые файлы в каждой главе открываю кодом:

procedure TForm3.Button2Click(Sender: TObject); //и т.д. до Form16
var
fileName:String;
begin

FileName:= ExtractFilePath(Application.ExeName)+'GLVZ\Глава1.rtf';//и т.д. до Гл.12
RichEdit1.Lines.LoadFromFile(fileName);
end;
end.

Все тексты Глав набирал в Word2007 и интервал задал для всего текста 1. При открытии текста в программе, интервал самопроизвольно меняется в различных местах, что не очень удобно при прокрутке текстов. Где можно почитать о приёмах сохранения перврначальных интервалов? Порылся в статьях сайта - кроме "Работа с файлами Паскаля" А. Подгорецкого ничего не нашёл, но она не в масть. Как проверить, удаляется ли предыдущий текст из памяти после открытия следующей главы и как сделать так, чтобы память очищалась?

02-10-2009 10:14
Ну слава богу, добили этот плеер :-)

Как я могу выразить мою благодарность именно Вам за оказанную помощь, чтобы об этом узнали в "Королевстве"?
Собственно мне и вашей благодарности достаточно, а то что другие знают или нет - мне всё равно, богаче или беднее я от этого не стану :-)

02-10-2009 09:42 | Сообщение от автора вопроса
Не перестаю каждый раз удивляться на неожиданные изменения после казалось бы незначительных перемен. Открывал текст в Form3 :

procedure TForm3.Button3Click(Sender: TObject);
var
Otkr:TFileStream;
begin
if OpenDialog1.Execute
then
Otkr:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
RichEdit1.Lines.LoadFromStream(Otkr);
FreeAndNil(Otkr);
RichEdit1.ReadOnly:=true;
end;

При этом и  была "заковырка" последовательности открытия. Решил делать для каждой Главы свою форму и уйти от OpenDialog. Написал:

procedure TForm3.Button4Click(Sender: TObject);
var
fileName:String;
begin

FileName:= ExtractFilePath(Application.ExeName)+'GLVZ\Глава1.rtf';
RichEdit1.Lines.LoadFromFile(fileName);
end;
end.

и "заковырка" исчезла. Можно открывать в любой последовательности. Не понял почему так было, ну и пусть. Завтра буду вносить изменения в проект. О непонятках буду спрашивать, понял, что можно.
Как я могу выразить мою благодарность именно Вам за оказанную помощь, чтобы об этом узнали в "Королевстве"?

02-10-2009 07:41
У вас путь к файлу указывается напрямую

OpenAudioPlayer('Zvuk\Sound1.wav', 'Sound1', True);

тут "Watch List" не ненужен.

Прогон показал, что у плеера есть заковырка. Если на Form3 сначала установить плеер, а затем открыть текст, то всё работает. Но перегрузив проект и сначала открыть текст, а потом нажать "Установить плеер", то посередине экрана появляется окно: Ошибка: Системе не удаётся найти указанный путь ОК.


Можно кусочек кода? Чтобы было понятнее.

02-10-2009 05:29 | Сообщение от автора вопроса
Поставил курсор в коде Form3 перед OpenAudioPlayer('Zvuk\Sound1.wav', 'Sound1', True); и нажал Ctrl+F5. В окне WatchList запись: OpenAudioPlayer: [process not accessible]. Перед ней квадратик с галочкой внутри. Листая по F7, путешествовал по пяти формам останаливаясь на последнем end;, открылся код AudioPlayer, дошёл до раздела Project1 и зелёная стрелка всала напротив Application.Initialize;, затем Application.CreateForm(TForm1, Form1); открыв пустую форму с дырками и только после Application.Run; открылась Главная форма (Form1).Что-то не так?

02-10-2009 03:37
Сделал как сообщил раньше и нажал Ctrl+F5. Никакой реакции. Foem3 остаётся на месте.
Form3 и должен оставаться на месте, а должно появиться окно "Watch List", в котором будет отображаться значение переменной (той которую мы выделили перед нажатием), потом пошагово (по F7) дойдите до процедуры OpenAudioPlayer и посмотрите какое значение у переменной (в которой содержится путь к файлу)... если конечно вы не напрямую указывали путь:

OpenAudioPlayer('C:\textbook\Глава 1.wav', 'Глава 1', False);


02-10-2009 02:20 | Сообщение от автора вопроса
Сделал как сообщил раньше и нажал Ctrl+F5. Никакой реакции. Foem3 остаётся на месте.

02-10-2009 01:22
Alt+F4
Вот я советчик ;-) Простите, голова не тем была забита, нужно жать Ctrl+F5, а Alt+F4 закрывает активное окно.

Не компилируется и ошибка:[Fatal Error] Could not create output file 'D:\Проекты учебника\textbook\Project1.exe'.
Если такое случается, сохраняете и закрываете проект, а потом в диспетчере задач находите процесс "Project1.exe" и убиваете его.

02-10-2009 00:16 | Сообщение от автора вопроса
Поставил:

then
Otkr:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
RichEdit1.Lines.LoadFromStream(Otkr);
FreeAndNil(Otkr);
RichEdit1.ReadOnly:=true;
RichEdit1.Clear;  <- вот сюда
end;
end.

Не компилируется и ошибка:[Fatal Error] Could not create output file 'D:\Проекты учебника\textbook\Project1.exe'. Похоже промахнулся? Не может создать выходной файл, а развеон нужен?

01-10-2009 23:59 | Сообщение от автора вопроса
Загрузил проект- Project1.exe, открывается главная форма- Form1 с оглавлением, нажал "Глава 1", открылается форма с тремя кнопками (Form3), нажал Alt+F4 - перешёл в Глпвную форму. Это сделал, или надо что-то в коде?

01-10-2009 19:45
Поставил True и всё отлично. Щшибка возникала наверно потому, что плеер устанавливался на поле RichEdit1, а когда встал в верхний правый угол, то всё ОК.
Просто если True - форма открывается так "FormAudio.Show", а если False - "FormAudio.ShowModal".

Открыв другую форму в компоненте RichEdit1 соханен предыдущий текст.

Пробовал:

//Операция с первой формой
Form1.Show;
Form3.Close;
end;

Все не главные формы, при закрытии просто скрываются (а не закрываются), используйте "RichEdit1.Clear" для очистки содержимого RichEdit1.

Прогон показал, что у плеера есть заковырка. Если на Form3 сначала установить плеер, а затем открыть текст, то всё работает. Но перегрузив проект и сначала открыть текст, а потом нажать "Установить плеер", то посередине экрана появляется окно: Ошибка: Системе не удаётся найти указанный путь ОК. Нажав ОК, плеер появляется в правом верхнем углу, но нажав "Воспроизведение", появляется только общее время 00:12:51, кнопка  обесцвечивается, но файл не озвучивается. Странная последовательность?
Посмотрите в отладке, перед самим открытием плеера, что у вас содержится в путе (выделяете переменную, Alt+F4, появляется окно).

01-10-2009 11:09 | Сообщение от автора вопроса
Прогон показал, что у плеера есть заковырка. Если на Form3 сначала установить плеер, а затем открыть текст, то всё работает. Но перегрузив проект и сначала открыть текст, а потом нажать "Установить плеер", то посередине экрана появляется окно: Ошибка: Системе не удаётся найти указанный путь ОК. Нажав ОК, плеер появляется в правом верхнем углу, но нажав "Воспроизведение", появляется только общее время 00:12:51, кнопка  обесцвечивается, но файл не озвучивается. Странная последовательность?

01-10-2009 10:25 | Сообщение от автора вопроса
Поставил True и всё отлично. Щшибка возникала наверно потому, что плеер устанавливался на поле RichEdit1, а когда встал в верхний правый угол, то всё ОК. Буду заниматься прогонами, другими Главами и офрмлением. Если возникнут вопросы не только по плееру, можно ли задать их? Например: тексты Глав, открывающиеся в RichEdit1 большие до 13 мин. озвучивания и загружаются:

Otkr:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
RichEdit1.Lines.LoadFromStream(Otkr);
FreeAndNil(Otkr);
RichEdit1.ReadOnly:=true;
end;
end.

Здесь заканчивается и сам код Form3. Закончив с одной главой, нажимаю кнопку "Возврат в оглавление":

procedure TForm3.Button5Click(Sender: TObject);
begin
//Операция с первой формой
Form1.Show;
end;

Открыв другую форму в компоненте RichEdit1 соханен предыдущий текст. Через компонент OpenDialog1 текст меняется, но память-то наверное съедается? Пробовал:

//Операция с первой формой
Form1.Show;
Form3.Close;
end;

текст остаётся. Возможно я заблуждаюсь насчёт памяти (ведь есть FreeAndNil(Otkr); , а если нет, то что надо написать и где? Ещё раз благадарю Вас за плеер. Если будут вопросы, надеюсь они дойдут до Вас?

01-10-2009 06:56 | Комментарий к предыдущим ответам
//вот так будет в правом верхнем углу
OpenAudioPlayer('C:\textbook\Глава 1.wav', 'Глава 1', True);
//а так посередине (и пока окно плеера не закроется, выполнение кода не продолжется)

Забыл дописать:

OpenAudioPlayer('C:\textbook\Глава 1.wav', 'Глава 1', False);


01-10-2009 06:55
Искал в AdioPlayer.pas WindModal, но не нашёл там ни True ни  False
if not WindModal then
равносильно
if WindModal=False then

Картинка плеера открывается по середине экрана монитора и сразу начинается воспроизведение. Её можно передвинуть, луше бы в верхнем правом углу.

//вот так будет в правом верхнем углу
OpenAudioPlayer('C:\textbook\Глава 1.wav', 'Глава 1', True);
//а так посередине (и пока окно плеера не закроется, выполнение кода не продолжется)

Или вы что-то другое имеете ввиду?

если открыть текст, то картинка открывается через ошибку
Так, поподробнее.

01-10-2009 05:53 | Сообщение от автора вопроса
Очередная благодарность и поздравление с успехом. Вам удалось додолбить этот вопрос до конца. Снова, не спеша прокрутил всё со своим проектом и ОК. На Form3 у меня три кннопки: "Возврат в оглавление" для выбора главы, "Открыть текст" в компоненте Edit1 на этой форме и соответственно "Установить плеер". Картинка плеера открывается по середине экрана монитора и сразу начинается воспроизведение. Её можно передвинуть, луше бы в верхнем правом углу. Искал в AdioPlayer.pas WindModal, но не нашёл там ни True ни  False. Если есть картинка плеера, то не открывается текст, и наоборот, если открыть текст, то картинка открывается через ошибку, а кнопка "Воспроизвести" не работает. Вероятно эта ситуация исправима?

01-10-2009 05:10
Странно, может добавили что-нибудь лишнее, посмотрите мой пример:
http://file.sibnet.ru/get/file/?id=697327

01-10-2009 02:03 | Сообщение от автора вопроса
Всё на месте. Теперь курсор встал в Project1.dpr после: Application.Create(TFormAudio, и сообщение:[Error] Project1.dpr(12): Incompatible types: 'TComponent' and 'Class reference'. Написано как Вы рекомендовали. В чём несовместимость?

01-10-2009 01:42 | Комментарий к предыдущим ответам
Я прям телепат :-)
См. моё предыдущее сообщение.

01-10-2009 01:40 | Сообщение от автора вопроса
Добавил строки в Project1.dpr. Курсор встал после: OpenAudioPlayer= и сообщение: [Error] Unit1.pas(21): Not enough actual parameters. Окуда должны взяться эти актуальные параметры?

01-10-2009 01:35 | Комментарий к предыдущим ответам
"Равно" не надо:
OpenAudioPlayer=('C:\textbook\Глава 1.wav', 'Глава 1', False);

01-10-2009 01:33
File not found: 'AudioPlayer.dcu'
AudioPlayer.dcu - это скомпилированный AudioPlayer.pas, вы его (а также AudioPlayer.dfm) не забыли скинуть в папку с новым проектом?

01-10-2009 01:24 | Сообщение от автора вопроса
Сделал новый пример с распаковкой:

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AudioPlayer, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenAudioPlayer=('C:\textbook\Глава 1.wav', 'Глава 1', False);
end;

end.

Получил:[Fatal Error] Unit1.pas(7): File not found: 'AudioPlayer.dcu'
И где его нарыть? В исходнике его нет.

01-10-2009 00:55
P.S. и использовать (например) здесь:
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenAudioPlayer=('C:\textbook\Zvuk\Глава1.wav','Глава 1', False);
//при нажатии на кнопку, должен открыться плеер
end;

01-10-2009 00:53

unit Unit3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  AudioPlayer, Dialogs, StdCtrls, ExtCtrls, ComCtrls, XPMan, ActiveX,
  DirectShow9;
type
  TForm3 = class(TForm);
OpenAudioPlayer=('C:\textbook\Zvuk\Глава1.wav','Глава 1 False);
                                              ^вот здесь курсор
//а надо вот так:
OpenAudioPlayer=('C:\textbook\Zvuk\Глава1.wav','Глава 1', False)
end;
end.


01-10-2009 00:28 | Сообщение от автора вопроса
Извиняюсь, случайно нажал отправить. При компиляции курсор застревает после .wav и даёт:[Error] Unit3.pas(9): Identifier expected but string constant found. Какой ему нужен идентификатор?

01-10-2009 00:15 | Сообщение от автора вопроса
Написал:

unit Unit3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  AudioPlayer, Dialogs, StdCtrls, ExtCtrls, ComCtrls, XPMan, ActiveX,
  DirectShow9;
type
  TForm3 = class(TForm);
OpenAudioPlayer=('C:\textbook\Zvuk\Глава1.wav','Глава 1 False);
                                              ^вот здесь курсор
end;
end.


30-09-2009 10:35
procedure OpenAudioPlayer(Sender: TObject);
    <- сюда begin
end;

Объявлять процедуру не надо, пишите сразу так:

OpenAudioPlayer('C:\textbook\Zvuk\Глава1.wav', 'Глава I', False);


30-09-2009 10:23 | Сообщение от автора вопроса
Весьма признателен за труды - плеер компактный приятно смотрится, но не получается с его установкой. Распаковал в проект, записал строки в Project1.dpr, из Form3 (где должен быть плеер) убрал все компоненты, предполагая что при компиляции код AudioPlayer-а сам установится на форме:

unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, XPMan, ActiveX, AudioPlayer,
  DirectShow9;
type
  TForm3 = class(TForm);
implementation
{$R *.dfm}
procedure OpenAudioPlayer(Sender: TObject);
    <- сюда begin
end;
end.

Получаю ощибку:[Error] Unit3.pas(13): BEGIN expected but END found и вторая строка [Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit3.pas'. Фантазировал, но без толку. Возможно надо писать, а что не знаю.
  Пробовал установить компоненты плеера на Form3 (куда Button4 и Button5 ?) и  скопировать код AudioPlayer.pas с заменой FormAudio не Form3 - всё мимо. Где-то я почитывал,что можно всталять код из .pas файла. Что мне нужно делать?

29-09-2009 11:50
Постойте, я подготовил новый проект, который существенно (как я надеюсь) облегчит вам работу, сначала качаем архив:
http://file.sibnet.ru/get/file/?id=696586
и распаковываем файлы в каталог с проектом, далее открываем "Project1.dpr" и вносим туда две строчки:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  ...
  AudioPlayer in 'AudioPlayer.pas';{<- вот сюда}

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  ...
  Application.CreateForm(TFormAudio, FormAudio);{<- и вот сюда}
  Application.Run;
end.


Теперь в нужной форме (той, откуда надо открывать плеер) вписываем в Uses модуль AudioPlayer и вызываем процедуру OpenAudioPlayer, ну и собственно всё :)

Параметры OpenAudioPlayer:
  PathMusic - путь к звуковому файлу;
  StrCaption - название в заголовке окна (можно указать '', тогда заголовок будет пустым);
  WindModal - если True - окно плеера будет открыто модально (другие окна будут недоступны), False - и наоборот, окно будет открыто в верхнем правом углу и поверх всех окон (т.е. можно будет слушать файл и одновременно читать текст).

P.S. в качестве бонуса, прикрутил к плееру регулировку громкости :)

29-09-2009 05:30 | Сообщение от автора вопроса
Кажется разобрался с путями. Лучше писать например Sound1.wav чем Глава1.wav - точки-то на клавиатуре имеют разные коды, а какую поставил в Главе не помнишь. Так похоже файл и теряется. Осталось решить вопрос с изменением позиции воспроизведения и можно подумать о возврате к 16-ти формам (для кахдой главы своя форма) как было у меня первоначально. Придётся много копировать кодов, но зато удобно в работе. Если не трудно, то хотелось бы получить подсказку.

29-09-2009 03:30
Спасибо за Смайлики! Весьма забавно. Сделаю словарик. Вот мои последнии попытки - снова из net-а взял пример,внёс рекомендованные изменения только:

if GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil)<>S_OK then
begin
ShowMessage('Ошибка');
Exit;,
function GetAudioPos(out StrPos: string; out IntPos: integer):boolean;
var
CurrPos: Int64;
Value, H, M, S: integer;
begin
Result:=False;
StrPos:='';
IntPos:=0;,
procedure SetAudioPos(IntPos: Int64);
var
CurrPos: Int64;
begin
if MediaSeeking=nil then
Exit;, и
AudioStop(Str, Int);
Label1.Caption:=Str; //вот здесь обнудяется общее время
Label2.Caption:=Str;
SendMessage(TrackBar1.Handle, WM_USER+5, 1, Int);
end;

  В строку Edit1 записал Zvuk\Глава1.wav. Скомпилировал, сохранил в папке proigr, и дабавил папку Zvuk. Работает отлично! Сделал распечатку кода для контроля.
На Form3 моего проекта разместил компоненты proigr и скопировал его код, заменив в нём Form1 на Form3 и проверил код после копирования. Скомпилировался, Form3 открылась, файл Глава1.wav озвучивается, общее время показывает и обнуляется при "стоп", а текущее время на 00:00:00 и при паузе движок времени перемещается, но на Label2 00:00:00, а продолжается воспроизведение с момента остановки. В чём причина? Сам процесс копирования или что-то ещё?

28-09-2009 10:45
Но вожможно автор не думал о том, что кто-то вроде меня захочет использовать проект не по прямому назначению, а в сосотаве другого проекта, и не подумал о возможных затруднениях, вызывающих у Вас недоумение, а у меня непонимание.
Хмм... попробую переработать проект, для более легкого "внедрения".

Кстати, что означают в тексте значки типа о_О, :)), :), ;-)? Если Вы меня поругиваете, то я всё равно не понимаю.
Ну что вы :) совсем наоборот:
http://ru.wikipedia.org/wiki/Смайл

28-09-2009 10:07 | Сообщение от автора вопроса
Ни коим образом не хотел Вас в чём-то заподозрить. Пример как отдельный проект работает и говорил об этом неоднократно. Но вожможно автор не думал о том, что кто-то вроде меня захочет использовать проект не по прямому назначению, а в сосотаве другого проекта, и не подумал о возможных затруднениях, вызывающих у Вас недоумение, а у меня непонимание. К этому выводу приводят предложенные Вами изменения и дополнения в коде после моих неудачных попыток. Кстати, что означают в тексте значки типа о_О, :)), :), ;-)? Если Вы меня поругиваете, то я всё равно не понимаю. И опять древний вопрос - Что делать?

28-09-2009 08:54
И так ясно, что откроется и озвучится, если в системе установлен проигрыватель Windows Media. Не понял цель такой проверки.
Цель заключалась, в проверки правильности путя, т.к. "PlayButton('C:\textbook\Zvuk\Глава1.wav')" показывает "Системе не удаётся найти указанный путь", а вставка "C:\textbook\Zvuk\Глава1.wav" в Explorer открывает этот файл, то я в недоумении о_0

А не подложил ли автор проекта http:\\file.sinet.ru/get/file/?id=678034 маленького поросёночка большим дядям? Разве правильно так писать:

//MediaControl.Run;
  except
ShowMessage('Ошибка');
  end;
end;
хотя он компилируется и озвучивает файл загрузки ХР?

Это какого поросёнка, я хотел спихнуть :)) Я немного в замешательстве :)
Вас удивляет, что при за комментированной строчке
//MediaControl.Run;
файл чудесным образом воспроизводится? Просто в том варианте, после процедуры AudioRun вызывается другая процедура AudioStartPause, в которой и находится MediaControl.Run.

28-09-2009 06:25 | Сообщение от автора вопроса
И так ясно, что откроется и озвучится, если в системе установлен проигрыватель Windows Media. Не понял цель такой проверки. Любой файл с расширением *.wav будет проигрываться.
Как было раньше рекомендовано integer заменен на Int64 в:

procedure SetAudioPos(IntPos: Int64);
var
CurrPos: Int64;
begin
if MediaSeeking=nil then
Exit;


А не подложил ли автор проекта http:\\file.sinet.ru/get/file/?id=678034 маленького поросёночка большим дядям? Разве правильно так писать:

//MediaControl.Run;
  except
ShowMessage('Ошибка');
  end;
end;

хотя он компилируется и озвучивает файл загрузки ХР?

27-09-2009 06:35
появляется окно ошибки -"Не возможно найти указанный файл ОК"

И впрямь чертовщина?

Откройте "Мой компьютер" (explorer) и в верхнее поле "адрес", вставьте "C:\textbook\Zvuk\Глава1.wav", далее Enter и если Глава1.wav откроется - будет и впрямь чертовщина о_0

Глава1.wav озвучивается, а движок бара воспроизведения застревает, как было вначале, хотя все исправления в код внесены, проверял по распечатке для верности
Проверьте по точнее, сам я уже не помню, в каком то месте должен быть Int64 вместо Integer.

27-09-2009 06:19 | Сообщение от автора вопроса
Попробовал, сделал:

procedure TForm3.Button1Click(Sender: TObject);
begin
PlayButton('C:\textbook\Zvuk\Глава1.wav');
end;

компилируется, но после запуска, перехода в Form3 и нажатия Button1 появляется окно ошибки -"Не возможно найти указанный файл ОК". Кажется по такому адресу и в темноте должно что-то отыскаться, днако ...?
Попробовал ещё вариант проекта vers1: скопировал 5 моих рабочих форм, на Form3 разместил Primer1 и добавил только одну папку Zvuk, скомпилировался, Глава1.wav озвучивается, а движок бара воспроизведения застревает, как было вначале, хотя все исправления в код внесены, проверял по распечатке для верности. И впрямь чертовщина?

27-09-2009 03:50
но сдаётся мне, что здесь какая-то несовместимость
Если она и есть, то только с путями ;-)

Но есть ещё тяга к улучшению уже сделаного.
И это отлично :), тем более осталось совсем чуть-чуть!

Попробуйте указать полный путь, вместо '\Zvuk\Глава1.wav' вписать 'C:\textbook\Zvuk\Глава1.wav', истина где-то рядом.

26-09-2009 03:26 | Сообщение от автора вопроса
Проект для проверок вариантов находится на системном диске C:\ в папке "textbook". В ней находятся папки: GLVZ-с текстами глав *.rtf, Zvuk-со звуковым сопровождением текстов *.wav, player-специально для плеера AIMP2, Songs-с песнями на французском языке для отдыха и,естественно, Project1.exe для старта программы со всеми причиндалами 5-ти форм, из которых и сосотоит сам проект и полностью повторяет Работающий проек, который храню на диске D:\ и на всякий случай на CD- 298 МБ . С путями кажется всё на месте, а пробный плеер Primer1 (отдельно работющий с папкой Zvuk в его составе) при установке его на форму 3 после компиляции и старта проекта дает ошибки, упомянутые ниже. Хоть я совсем начинающий школяр в Delphi, но сдаётся мне, что здесь какая-то несовместимость. Может оставить всё как есть? Знакомые, смотревшие мое пособие отзываются положительно да и мне на старости лет интересно поупражняться французским яыком с нудя. Но есть ещё тяга к улучшению уже сделаного. Вот в чём вопрос. И какой будет ответ?

25-09-2009 13:42
Значит действительно проблема с путями, проверьте точно, как располагаются файлы и правильные ли пути указываются.

Куда вставить полный путь -GetCurrentDir+'\Zvuk\Глава1.wav'?
GetCurrentDir - функция, возвращающая текущий каталог, т.е. тот из которого произведён запуск программы.
"GetCurrentDir+'\Zvuk\Глава1.wav" - по такой схеме, в каталоге, откуда стартовала программа, должна находится папка "Zvuk", а в ней уже файл "Глава1.wav", измените схему для своего расположения файлов.

25-09-2009 12:56 | Сообщение от автора вопроса
Вставил GetLastError, компилируется без ошибки, а при открытии на форме дает ошибку: "Не удаётся найти указанный файл  ОК". Куда вставить полный путь -GetCurrentDir+'\Zvuk\Глава1.wav'? Вставил в :

procedure TForm3.Button1Click(Sender: TObject);
begin
PlayButton(GetCurrentDir+'\Zvuk\Глава1.wav');
end;

показывает на форме ошибку: "Системе не удаётся найти указанный путь  ОК".

25-09-2009 05:29
Ага, значит проблема всё-таки в "Глава1.wav", либо не удаётся его найти, либо он некорректен, посмотрите что пишет GetLastError, вот это:

if GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil)<>S_OK then
  begin
ShowMessage('Ошибка'); //ошибка открытия файла (возможно он не найден)
Exit;
  end;

изменяем на:

if GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil)<>S_OK then
  begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
  end;


А вообще, лучше использовать полные пути, вместо относительных:

GetCurrentDir+'\Zvuk\Глава1.wav' //после GetCurrentDir, незабываем добовлять '\'


25-09-2009 03:50 | Сообщение от автора вопроса
Внёс изменения. При прогоне Primer1 по F7 на Exit не попадаю а "заикание" началось в процедуре:

procedure GetAudioCount(out StrCount: string; out IntCount: integer);
var
DurPos: Int64;
Value, H, M, S: integer;
begin
<<вот здесь>>StrCount:='';
IntCount:=0;

Сам пример по-прежнему работает. В рабочем проекте прогон по F7 закончился в:

procedure AudioRun(Path: string; CHWND: HWND);

в измененной строке:

if GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil)<>S_OK then
  begin
<<вот здесь>>ShowMessage('Ошибка'); //ошибка открытия файла (вожможно он не найден)
Exit;
  end;

Папка Zvuk в обоих вариантах находится  в корнях проектов. В первом Глава1.wav открывается и звучит, во втором после главной формы в форме где плеер, при нажатии кнопки:

procedure TForm3.Button1Click(Sender: TObject);
begin
PlayButton('Zvuk\Глава1.wav');
end;

  показывает "Ошибка". Почему? Что-то не так с указанием пути? Всё сделано под копирку.

24-09-2009 09:56
Что бы это могло означать?
Чёрт его знает ;-| Прогоните по F7 процедуру AudioRun, не попадаем ли мы, там, на "Exit" (то что проскакиваем "if CHWND<>0 then" - это нормально), а лучше - вообще замените все Exit'ы на:

  begin
ShowMessage('Ошибка');
Exit;
  end;

Заменяйте только в тех местах, где нет условия:

if ...=nil then
//или
if ...<>nil then


И ещё, небольшие подправления:
- в процедуре AudioRun, найдите строчку "GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil)" и замените на:

if GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil)<>S_OK then
  begin
ShowMessage('Ошибка'); //ошибка открытия файла (возможно он не найден)
Exit;
  end;


- в процедуре PlayButton, найдите строчку "MediaControl.Run" и замените на:

if MediaControl<>nil then
MediaControl.Run;


24-09-2009 03:58 | Сообщение от автора вопроса
Спасибо за Ctrl+F2. Заставили снова регистрироваться и подготовленный ответ исчез. А суть его в том, что в рабочем проекте в отличие от Primer1 курсор с позиции:

procedure TForm3.Button1Click(Sender: TObject);
begin
>>вот сюда<< PlayButton('Zvuk\1.wav');
end;

нажатием F4 сначала открывает главную форму проекта Form1 и после перехода к форме, где есть плеер (Form3) и её закрытия, передвижение by F7 никакого звука или "заикания" не обнаруживает. Что бы это могло означать?

23-09-2009 06:02
Выйти можно только через Close All и на сообшение "Debug session in progress. Terminate?"
Закрывать всё не обязательно, достаточно будет Ctrl+F2.

Тоже самое с добавленым работающим примером к моему проекту, где Form3 открывается, а звука нет.
А работающем проекте есть "заикающийся" звук?

Может что-то не так?
Хех, наверняка :) Ну ничё, будем долбить до конца ))

23-09-2009 05:24 | Сообщение от автора вопроса
Извиняюсь за "ядро" - это только моё предположение. Начал проверку с работающего проекта Primer1. Установил курсор в указанное место и нажал F4 или Run to cursor. Открылась форма плеера и запустил воспроизведение. При пошаговом передвижении by F7 зелёной стрелки, на строке:

MediaSeeking.GetDuration(DurPos);


началось прослушивание заикающегося воспроизведения и это "Duration-продолжение" может длится до бесконечности. Выйти можно только через Close All и на сообшение "Debug session in progress. Terminate?" ответить ОК. Тоже самое с добавленым работающим примером к моему проекту, где Form3 открывается, а звука нет. Замаялся, но не понял суть всей процедуры, хотя сам проект Primer1 отдельно работает. Может что-то не так?

19-09-2009 09:24 | Комментарий к предыдущим ответам
"Ядра" там никакого нет, это просто код и не важно куда он вставлен, если код работает в отдельном проекте, то должен работать и вашем проекте.

Проверьте отладкой, поставьте курсор на строчку PlayButton

procedure TForm1.Button1Click(Sender: TObject);
begin
>>вот сюда<< PlayButton('Zvuk\1.wav');
end;

нажмите F4, запустите воспроизведение и пошагово (по F7) посмотрите, что происходит.

18-09-2009 04:57 | Сообщение от автора вопроса
Первоначалоно рекомендованный пример плеера с Вашей помощью удалось довести до ума. Нажодится в папке primer1, содержит: Папку "Zvuk", Project1.exe, Project1,~dpr, Unit1.pas и всё остальное, что положено любому готовому проекту. Он работает - запустив ехе-шнние, открывается форма плеера, нажав "открыть аудио файл" озвучивается файл указанный в пути:

//а используете так:
procedure TForm1.Button1Click(Sender: TObject);
begin
PlayButton('Zvuk\1.wav');
end;

Всё путём! Взял из своего работающего проекта две главных формы, соэдал новый проект, влкючил в него папаку "Zvuk", добавил в него пустышку Form3, поместил на неё все компоненты плеера из примера и скопировал код Unit1.pas. Проект компилируется, Form3 открывается, плеер на ней находится, а файл 'Zvuk\1.wav' не воспроизводится.
Если в этот новый проект добавить папку primer1, а на пустушку Form3 поместить кнопку "установить плеер" и прописать ей:

procedure TForm3.Button1Click(Sender: TObject);
begin
WinExec(PChar(ExtractFilePath(Application.ExeName)+
'primer1\Projecr1.exe'),0);
end;

то всё ОК. Компилируется, открывается и файл 'Zvuk\1.wav' озвучивается.
Очевидно, в последнем случае ядро управления плеером нажодится на Form3, а в предыдущем оно теряется. Где-то про ядро я видел, кажется в книге Джеффри Рихарда "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows", но я на  64-разрядную не переходил.
Эта ситуация полностью повторяет мой рабочий проект, где использую плеер AIMP2. А хотелось бы .....,да видно не получится? А вдруг?

17-09-2009 19:23
Создаю новое приложение, включаю в него Unit главной формы из моего работающего проекта, открываю новую форму (допустим Form2) и кладу на неё  Unit из примера проверенного примера плеера со всеми причиндалами. Сохраняю как новый проект и он успешно компилирется. Открываю этот проект - главную форму, щелкаю по главе в которой содержится аудио-файл, открывается Form2 со всеми параметрами плеера (как отдельный проект он работает), а запусть тот жк самый файл не удается.
Что то я запутался, в смысле "запусть тот жк самый файл не удается"? У вас же проект компилируется? При открытии файла ошибок тоже нет? Значит вы упустили какую то деталь, посмотрите внимательно. Пройдитесь ещё отладкой по процедуре PlayButton'a.

17-09-2009 11:07 | Сообщение от автора вопроса
Создаю новое приложение, включаю в него Unit главной формы из моего работающего проекта, открываю новую форму (допустим Form2) и кладу на неё  Unit из примера проверенного примера плеера со всеми причиндалами. Сохраняю как новый проект и он успешно компилирется. Открываю этот проект - главную форму, щелкаю по главе в которой содержится аудио-файл, открывается Form2 со всеми параметрами плеера (как отдельный проект он работает), а запусть тот жк самый файл не удается. Если на Form2 сделать кнопку - "установить плеер" и назначить ей процедуру:

procedure TForm2.Button2Click(Sender: TObject);
begin
WinExec(PChar(ExtractFilePath(Application.ExeName)+
'player\AIMP2.exe'),0);
end;

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

17-09-2009 04:36 | Вопрос к автору: запрос дополнительной информации
Как отдельный проект плеер работает, но создав его на отдельной форме проекта моего пособия, которая открывается из главной формы, заставить его воспроизвести файл не удается.
Странно, можно поподробнее.

Такое впечатление,что его нужно как отдельный проект запускать на этой форме через ехе-шник.
Да нет, можно и из проекта.

17-09-2009 01:06 | Сообщение от автора вопроса
Компонент TLable1 присуствует и общее время показывает, а то, что не обнуляется так и пусть. Как отдельный проект плеер работает, но создав его на отдельной форме проекта моего пособия, которая открывается из главной формы, заставить его воспроизвести файл не удается. Такое впечатление,что его нужно как отдельный проект запускать на этой форме через ехе-шник. Это я уже делаю с плеером AIMP2, используя кнопку на форме для его установки и позиционированием его в нужное место. Он отлично работает, а хотельсь бы, чтобы при выборе очередной главы на главной форме для работы с ней открывалась форма с уже установленным на ней плеером в верхней части формы, открытым текстом этой главы в компоненте RichEdit1 и нажав кнопку типа "открыть аудио-файл" прослушивать его и работать с текстом. Уверен что это не благое пожелание, но с какой стороны к этому подбираться? С компонентом WindowsMediaPlayer это удается сделать, но как сообщал ранее RichEdit1 не прокручивает текст и искажения в картинке. В каком направлении покопаться?

15-09-2009 18:54
Undeclared identifier: 'Lable1' - здесь надо кинуть на форму компонент TLable (с именем 'Lable1'), вообще в моём примере (проекте, который скидывал) два компонента TLable, в первый выводится общее время звучания, а во второй - текущее время воспроизведения.

Наверняка всплывут заковычки и с Вашего разркшения буду просить совета
Спрашивайте, поможем, чем сможем :)

15-09-2009 12:10 | Сообщение от автора вопроса
Спасибо, изменение позиции воспроизаедения работает отлично, а обнуление дает ошибку -Lable1.Caption:=Str;  //вот здесь обнуляется общее время -
[Error] Unit1.pas(247): Undeclared identifier: 'Lable1'. Пока убрал, это не столь важно. При переходе на другую главу будет свое общее время. Поупражняюсь с компонентом OpenDialog для выбора нужного файла для воспроизведения и уменьшения кол-ва форм, а затем займусь включением этого плеера в проект. Наверняка всплывут заковычки и с Вашего разркшения буду просить совета. Весьма признателен.

15-09-2009 07:28
Значит так, заменяем следующие процедуры:

procedure GetAudioPos(out StrPos: string; out IntPos: integer);
procedure SetAudioPos(IntPos: Int64);
procedure TForm1.Button3Click(Sender: TObject);
procedure TForm1.Timer1Timer(Sender: TObject);
procedure TForm1.TrackBar1Change(Sender: TObject);

на эти:

function GetAudioPos(out StrPos: string; out IntPos: integer): boolean;
var
CurrPos: Int64;
Value, H, M, S: integer;
begin
Result:=False;
StrPos:='';
IntPos:=0;

if MediaSeeking=nil then
Exit;

MediaSeeking.GetCurrentPosition(CurrPos);

Value:=Trunc(CurrPos/10000000);
H:=Value div 3600;
M:=(Value mod 3600) div 60;
S:=(Value mod 3600) mod 60;

StrPos:=Format('%2.2d:%2.2d:%2.2d', [H, M, S]);
IntPos:=Value;
Result:=True;
end;


procedure SetAudioPos(IntPos: Int64);
var
CurrPos: Int64;
begin
if MediaSeeking=nil then
Exit;

CurrPos:=IntPos*10000000;
MediaSeeking.SetPositions(CurrPos, AM_SEEKING_AbsolutePositioning, CurrPos, AM_SEEKING_NoPositioning);
end;


procedure TForm1.Button3Click(Sender: TObject);//стоп воспроизведения
var
Str: string;
Int: integer;
begin
AudioStop(Str, Int);

Label1.Caption:=Str; //вот здесь обнуляется общее время
Label2.Caption:=Str;
SendMessage(TrackBar1.Handle, WM_USER+5, 1, Int);
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var
Str: string;
Int: integer;
begin
if GetAudioPos(Str, Int) then
  begin
Label2.Caption:=Str;
SendMessage(TrackBar1.Handle, WM_USER+5, 1, Int);
  end;

SetAudioEvent;
end;


procedure TForm1.TrackBar1Change(Sender: TObject);
var
Str: string;
Int: integer;
begin
SetAudioPos(TrackBar1.Position);

if GetAudioPos(Str, Int) then
  begin
Label2.Caption:=Str;
SendMessage(TrackBar1.Handle, WM_USER+5, 1, Int);
  end;
end;


14-09-2009 11:20 | Сообщение от автора вопроса
С одной заморочкой справились - не проверил //изначально Timer1.Enabled = False, а было пусто. Изменил, пример компилируется и файл открывается. Спасибо. Кнопки работают, индикаторы общего времени воспроизведения и текущего показывают соответствующие значения, но с изменением позиции воспроизведения возникли осложнения. Нажав "Паузу" и передвинув движок на нужную позиции времени, продолжить воспроизведение можно, а при следующей "пауэе" регулировку можно произвести только до первого значения остановки а после неё движок не перемещается. При нажатии "Стоп" движок как положено смещается влево до конца, а показатель общего времени не сбрасывается. Как это поправить -  не знаю. Без решения этих заморочек нет смысла включать зтот плеер в проект. Надееюсь на вразумления.

12-09-2009 14:38
Какие изменения надо внести в код, чтобы вместо озвучивания запуска открывался нужный мне файл звукового воспроизведения?
В посте 29-08-2009 15:45, я рекомендовал вместо этого:

//открытие файла
procedure TForm1.Button1Click(Sender: TObject);
var
Str: string;
Int: integer;
begin
AudioRun(Edit1.Text, 0{Panel1.Handle}); //если вы захотите вопроизвести видео -
//вместо 0 укажите хэндл поверхности (например панели), куда будет выводиться
//картинка


Добавить процедуру PlayButton(PathMusic: string), где в параметре PathMusic указывать путь к файлу.

11-09-2009 10:46 | Сообщение от автора вопроса
Проверил всё Object TreeView, Object Inspector, Events -всё на месте, а результат тот же, что в моём сообщении от 09-09-2009. В исходном примере файл запуска Windows XP открывается, воспроизводится и все компоненты примера работают. Какие изменения надо внести в код:

//открытие файла
procedure TForm1.Button1Click(Sender: TObject);
var
Str: string;
Int: integer;
begin
AudioRun(Edit1.Text, 0{Panel1.Handle}); //если вы захотите вопроизвести видео -
//вместо 0 укажите хэндл поверхности (например панели), куда будет выводиться
//картинка

чтобы вместо озвучивания запуска открывался нужный мне файл звукового воспроизведения? Пробовал разные варианты указывать путь для компонента Edit1 в Object Inspector'e в строке Text и глухота, а C:\WINDOWS\Media\WindowsXP - запуск.wav - работает. Вот это именно мне не ясно, потому и вопрошаю.

10-09-2009 09:42
кроме сообщения Undeclared identifier 'Timer1' ничего не получил
Скорее всего, вы не положили на форму компонент TTimer.

хотя  procedure Timer1Timer(Sender:TObject); в разделе type не трогал.
procedure Timer1Timer - без компонента TTimer, это всего лишь обычная процедура, в имя которой входит строка Timer1, она никогда не будет выполнятся.
С TTimer - это будет уже не просто процедура, а обработчик событий (OnTimer), выполняющийся каждый раз через определённый промежуток времени (Timer1.Interval).

Нет ли ещё каких-нибудь  головоломок на эту тему?
Вам надо взять компонент TTimer (на вкладке System) и бросить на форму, потом выделить его и в Object Inspector'e (если не понятно, это окно (снизу, слева) со свойствами компонента) перейти на вкладку Events и выбрать в OnTimer'е строчку Timer1Timer.

Если что-то не ясно, спрашивайте.

09-09-2009 01:44 | Сообщение от автора вопроса
Добавил первую часть кода и убрал лишнее - компилируется, но звуковой файл не открывается. Добавил вторую часть кода для удобства - кроме сообщения Undeclared identifier 'Timer1' ничего не получил, хотя  procedure Timer1Timer(Sender:TObject); в разделе type не трогал. И ещё - попробовал сделать форму с использованием компонента WindowsMediaPlayer - работает, правда не совсем стабильно - при переходе на другую главу возникают искажения на картинке плеера, но текст в разделе формы RichEdit1 не прокручивается, хотя в коде сохранил всё из работающего проекта. Нет ли ещё каких-нибудь  головоломок на эту тему?

31-08-2009 21:01 | Комментарий к предыдущим ответам
PlayButton(PathMusic: string); декларирована явно не здесь.
Ничего страшного :) Добавьте строчку
procedure PlayButton(PathMusic: string);
к остальным декларированым процедурам.

31-08-2009 11:31 | Сообщение от автора вопроса
К сожалению эти procedure 'ы не вписываются в рекомендованный готовый проект. PlayButton(PathMusic: string); декларирована явно не здесь.

29-08-2009 15:45
Как эту функцию повесить на button2 не знаю
Добавьте к проекту, эту процедуру:

procedure TForm1.PlayButton(PathMusic: string); //указываем в параметре путь к файлу
var
Str: string;
Int: integer;
begin
AudioStop(Str, Int);

Label2.Caption:=Str;
SendMessage(TrackBar1.Handle, WM_USER+5, 1, Int);


AudioRun(PathMusic, 0);

GetAudioCount(Str, Int);
Label1.Caption:=Str;
TrackBar1.Max:=Int;

MediaControl.Run;
Timer1.Enabled:=True; //изначально Timer1.Enabled = False
end;


//а используете так:
procedure TForm1.Button1Click(Sender: TObject);
begin
PlayButton('Zvuk\1.wav');
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
PlayButton('Zvuk\2.wav');
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
PlayButton('Zvuk\3.wav');
end;




И для удобства, вот это:

procedure AudioPause;
begin
MediaControl.Pause;
Timer1.Enabled:=False;
end;


procedure AudioStart;
begin
MediaControl.Run;
Timer1.Enabled:=True;
end;


28-08-2009 03:35 | Сообщение от автора вопроса
Спасибо, посмотрел. От того, что Вы рекомендовали раньше он отличается
добавленными в type XPManifest1:TManifest; и Edit1:TEdit: и, соответственно, в "открытие файла"
begin
AudioRun(Edit1.Text. 0... вместо AudiRun('путь к файлу' 0..., куда я и вставил путь к папке где сидят звуковые файлы проекта (Zvuk\*.wav), корорые не открываются после компиляции проекта, также как и в этом готовом проекте - изменение пути в строке Edi1 воспроизводит только тишину, а указанный C:\WINDOWS\Media\WindowsXP-запуск.wav озвучивает загрузку ХР. Чтобы не создавалось впечатление что я что-то намешал - поясняю. Мой готовый проект открывает главную форму, где я выбираю нужную главу (из 12) щелкаю по ней и открывается форма, на которой в верхней части расположены  кнопки для открытия текста этой главы в RichEdit1 (расположен ниже шапки формы) и кнопка для установки плеера AIMP2, посредством которого воспроизвожу звуковое сопровождение текста, выбрав нужную из папки Zvuk. Кнопкой возврат в оглавление - открываю главную форму для последующей работы. Хотелось бы исключить процесс установки плеера и его ручное позиционирование на вставленный в модуль формы этот пример. Все функции примера меня устраивают, осталось только соэдать условия выбора открытия  требуемого файла озвучивания текста из папки Zvuk и его закрытие при переходе к другому. Извиняюсь,но короче не смог.Как эту функцию повесить на button2 не знаю. Вот тут нужна помощь.

27-08-2009 21:30
Что вы там намешали :-)
Посмотрите готовый проект:
http://file.sibnet.ru/get/file/?id=678034

27-08-2009 11:42 | Сообщение от автора вопроса
Позор на мою старую голову. В этой LOGO для взрослых нельзя ошибаться не только в кубике, но и в буквери. Исправил, комплимируется, но звуковые файлы не открываются. Существующий код:

//открытие файла
procedure TForm3.Button2Click(Sender: TObject);
var
Str: string;
Int: integer;
begin
AudioRun('Zvuk\*.wav', 0{Panel1.Handle}); //если вы захотите вопроизвести
//видео - вместо 0 укажите хэндл поверхности (например панели), куда будет
//выводиться картинка
GetAudioCount(Str, Int);
Label1.Caption:=Str;
TrackBar1.Max:=Int;
end;
//пауза - старт
procedure TForm3.Button4Click(Sender: TObject);
begin
AudioStartPause;
end;

Звуковые файлы у меня в папке Zvuk в корне программы, текстовые в папке GLVZ и они открываются:

rocedure TForm3.Button3Click(Sender: TObject);
var
Otkr:TFileStream;
begin
if OpenDialog1.Execute
then
Otkr:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
RichEdit1.Lines.LoadFromStream(Otkr);
FreeAndNil(Otkr);
RichEdit1.ReadOnly:=true;
end;

Возможно в код звукового файла надо добавить OpenDialog2, но соображу куда и в каком виде?

27-08-2009 06:40
Может быть CLSCTX_INPROC_SERVER?

27-08-2009 06:32 | Сообщение от автора вопроса
Нашел то,что когда-то удалил в коде и вставил. Без него компилировалось, но плеер не работал, а с ним ошибка:
[Error] Unit3.pas(82): Undeclared identifier: 'CLSTX_INPROC_SERVER'
[Error] Unit3.pas(275): Identifier redeclared: 'TForm3.TrackBar1Change'
[Error] Unit3.pas(276): Identifier redeclared: 'Str'
[Error] Unit3.pas(277): Identifier redeclared: 'Int'
[Error] Unit3.pas(282): Undeclared identifier: 'Lable2'
[Fatal Error] Project1.dpr(9): Could not compile used unit 'Unit3.pas'
в коде

begin
if GraphBuilder<>nil then
Exit;
CoCreateInstance(CLSID_FilterGraph, nil, CLSTX_INPROC_SERVER, IID_IGraphBuilder,
GraphBuilder);
try
if not Assigned(GraphBuilder) then
Exit;
GraphBuilder.RenderFile(PWideChar(WideString(Path)), nil);
if GraphBuilder.QueryInterface(IID_IMediaControl, MediaControl)<>S_OK then
Exit;

курсор останавливается после _SERVER а где объявлять этот идентификатор не знаю и, тем более, что это такое? Может быть у Вас возникнут какие-нибудь соображение, если загляните в рекомендованный код примера? Или где про это почитать?

27-08-2009 03:43 | Сообщение от автора вопроса
Добрый день! Устанавливал JVCL так: в C:\Program Files\Borland\delphi7  создал папку JVCL и туда инсталировал сначала vcl затем jvcl командой install в папке с сайта. При работе над проектом добавил пути в Tools\Invironment Options\Library из C:\Program Files\Dorland\Delphi7\JVCL\jcl\lib\d7, затем ...\JVCL\jvcl\dcu, и ...\JVCL\jvcl\lib\d7\debug.
Наконец проект с примером плеера из DirectShow9 скомпилировался, но звуковое сопровождение текста не подключается. Что-то напортачил в коде. Буду сверять с оригиналом.
По поводу TJvRichEdit - у меня 12 глав только чистого текста  и в одном предисловии есть картини, которые открылись. Если придется работать с таблицами, учту Ваше замечание. Пока не буду переустанавливать Delphi. Вожно будут вопросы по Вашему примеру плеера, я кажется что-то случайно удалил из кода.

27-08-2009 00:07
File not found xxx.dcu, хотя путь в Inviornment Options\Library указан четко
А как у вас указан путь:
$(DELPHI)\Components\... ?
или
C:\Program Files\Borland\Delphi7\Components\... ?
При первом варианте, у меня когда то возникала проблема, точно не помню, вроде модуль искался не по нужному пути.

По поводу .rtf: к сведению, TJvRichEdit не корректно отображает таблицы в документе, не так давно я столкнулся с этой проблемой (проектировал элект. учебники), решил таким таким образом: сохранил документы в формате .mht и открывал их в TWebBrowser'е.

P.S. с DirectShow9 разобрались?

26-08-2009 02:30 | Сообщение от автора вопроса
Решив одну задачку, похоже наткнулся на более серьезные проблемы. Надеюсь Вы в курсе дискусии по вопросам Win32.Includ.A (красное сообщение в начале сайта)? Через два дня после инстоляции JVCL у меня началась чехорда при компиляции проектов - возможно это простое совпадение. Сообщил об этом в дискусии и устранил SysConst.bak, но там ребята заняты более серьезными делами - откуда вирус взался, зачем, почему, когда, кому это выгодно и извечный русский вопрос вопрос - что делать? и выпендриваются друг перед другом - у кого лучшая версия и кто лучше понимает эту проблему и чем она грозит. А у меня при компиляции проекта с добавленным модулем MediaPlayer'а (по совету одного из рыцарей на осове DirectShow9) каждый раз сообщает ошибку - File not found xxx.dcu, хотя путь в Inviornment Options\Library указан четко где они находятся, и приходится копировать их в ручную в проект. Надоело когда наткнулся на очередной с Snmp.dcu, которого не нашел. Как Вы думаете, может перустановить мою Delphi7 , или отформатировать весь диск и заново все преустановить, хотя делал это в мае с.г. когда переустанавливал материнскую плату в новый корпус и заменил кое-какое оборудование? Хотелось бы узнать Ваше мнение.

19-08-2009 01:41 | Сообщение от автора вопроса
Благодарен за отличную подсказку. Компонент TJvRichEdit запросто открыл мои картинки в текстовом файле rtf, хотя были тпудности с инстоляцией JVCL. В Яндексе мало конкретных ссылок на эту тему, а я не сторонник того, чтобы другие набивали себе шишки роясь в темных закоулках. Таким новичкам как я (а может и не только новичкам), при рекомендациях использования JVCL, можно кое-что конкретизировать. Если этот сыр бесплатный и без мышеловки, то желательно познакомиться с описанием библиотек JCL и JVCL -http://www.tdelphiblog/com/2008/12/jcjedi-code-library-jvcljedi-visual_28.html, где их скачать -http://sourceforge,net/projects/jvcl/files/ я лично взял JVCL337CompleteJCL1105-build3400.zip, трудности при инстоляции -http://forum.source.ru/index.php?showtopic=146237 как их избежать и куда устанавливать, а также указать путь использования этих библиотек в самой среде Delphi через Tools\Invironment Options\Library.
Есть еще вопросы и если можно задам их после того как покопаюсь. Кстати, запуская проект с компонентом WebBrouser в WinXP SP3 все ОК, а в Vista - ПК зависает при открытии этого файла. Меня это не волнует, я от этого ушел.

16-08-2009 07:50
Если нет острой нужды показывать именно doc/docx файлы, то перевод в rtf очень подходящее решение. К сожалению, стандартный дельфёвый RichEdit не всегда корректно работает с картинками и таблицами.
Очень рекомендую инсталлировать в вашу дельфи библиотеку компонентов JVCL. Библиотека обширная, бесплатная, в ней очень много полезных компонентов. Тамошний TvRichEdit вполне справляется с rtf-файлами с картинками и таблицами.
Так же для отображения файлов Word/Excel и многого другого (при условии что соответсвующие приложения установлены на целевой машине)
можно использовать OleContainer. Но это будет уже тяжелая артиллерия, и если вам нужен всего лишь просмотр документов, лучше использовать компоненты для отображения офисных файлов.

Пару замечаний к вашему коду. RichEdit прекрасно умеет читать файлы сам, напрямую, без промежуточного TFileStream. И свойство ReadOnly можно выставлять в дизайн-тайм, чтоб было меньше кода.

16-08-2009 03:32 | Сообщение от автора вопроса
Думал, что вопрос можно задавать по теме для большей ясности, оказалось, что дучше по штукам. Исправлюсь. Для доступа к текстовым файлам *.docx (у меня их 12 и они объемные до 60 КБ) конвертировал их в формат *.rtf (> 500 КБ) и использовал компонент RichEdit:


procedure TForm3.Button3Click(Sender: TObject);
var
Otkr:TFileStream;
begin
if OpenDialog1.Execute
then
Otkr:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
RichEdit1.Lines.LoadFromStream(Otkr);
FreeAndNil(Otkr);
RichEdit1.ReadOnly:=true; //чтобы не было соблазна редактировать


но он не открывает картинки, если они есть в тексте (оставляет на их месте пробел). Еще в одном файле в составе текста необходимо отображать картинки, поэтому использовал компонент WebBrowser без конвертирования исходного файла, так как другого ничего не нашел, по этому и возникли вопросы. Если есть другие варианты, буду рад их проверить.

14-08-2009 03:51
Хотелось бы узнать почему.
Ну, может, потому что их сразу несколько, и неясно на какой вы ждете ответа :)

Про проблему "неверно указана еденица измерения" в Internet Explorer (и соответственно в построенных на его базе компонентах) много чего может рассказать Яндекс.

После нажатия ОК файл открывается нормально и с ним можно делать все, что хочешь, хотя мне нужно чтобы он только читался.
А что вы пробовали делать, чтоб файл только читался?

Может, для доступа к файлам МС Офиса попробуете использовать более подходящие компоненты чем WebBrowser?

13-08-2009 11:35 | Сообщение от автора вопроса
Очевидно, что на мой вопрос ответа не будет? Хотелось бы узнать почему.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Вода мокрая или сухая?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования