Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.06.2019, 13:31
Kwon Kwon вне форума
Прохожий
 
Регистрация: 05.11.2018
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Заполнить Edit-ы с помощью ComboBox

Здравствуйте уважаемые мастера Делфи.
Прошу помочь начинающему.
Пожалуйста, помогите решить две проблемы:

1. Есть ComboBox в который загружается текстовый файл звуковой разметки для файла звука.
Вид текста такой:
<t id="1" s="0" l="1329"/>
<t id="2" s="2329" l="2061"/>
<t id="3" s="5390" l="1605"/>
<t id="4" s="7995" l="1126"/>
....
где
s="7995" - время в миллисекундах от начала файла
l="1126" - время в миллисекундах продолжительности звучания выбранного отрезка

Суть вопроса - как заставить событие ComboBoxChange разбрасывать значения
s="...." в Edit1
а l="...." в Edit2 ?
Т.е. автоматически заполнить эдиты (только цифрами) из выбранной комбобоксом строки
значениями с определенными метками в текстовом файле - s="..." и l="...".

Второй вопрос.

2. Создать кнопку сохранения выбранного участка звука в WAV-файл.

Приблизительно код может выглядеть так:
Код:
procedure TFormPlayer.CreateWavClick(Sender: TObject);
var
  FragmentStart, FragmentEnd: LongInt;
  WaveStream: TMemoryStream;
  FS: TFileStream;
  SoundTrack: array of Integer;
begin
  if FileExists('00144.mp3') then
  begin
    FragmentStart := StrToInt(EditStart.Text);
    FragmentEnd := FragmentStart + StrToInt(EditEnd.Text);
    MediaPlayer1.FileName := '00144.mp3';
    MediaPlayer1.Open;
    MediaPlayer1.TimeFormat := tfMilliseconds;
    MediaPlayer1.StartPos := FragmentStart;
    MediaPlayer1.EndPos := FragmentEnd;
    MediaPlayer1.Wait := False;
    {WaveStream.SaveToFile('Sound.wav');
    WaveStream.Free;}
   try
    FS := TFileStream.Create('FileName.wav', fmCreate or fmOpenWrite);
    FS.Write(SoundTrack[0], SizeOf(Integer) * Length(SoundTrack));
   finally
     FS.Free;
     Finalize(SoundTrack);
   end;
  end;
end;

Сама программа:
https://drive.google.com/file/d/1kPH...ew?usp=sharing

Вот, помогите, пожалуйста, если есть возможность.
Ответить с цитированием
  #2  
Старый 03.06.2019, 00:28
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, например, вопользоваться regEx'ом.
Вот такой
Код:
[s|l]="\d*"
вернет тебе 2 совпадения, ну а уж распарсить каждое из них уже не проблема - да хоть в цикле пробегись и скопируй все цифры.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Kwon (04.06.2019)
  #3  
Старый 05.06.2019, 10:32
Kwon Kwon вне форума
Прохожий
 
Регистрация: 05.11.2018
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо за ответ.
Но всё таки, попрошусь ещё.
Я очень начинающий, без соответствующего образования, самоучка.
Можете Ваш код написать более конкретно, пожалуйста, если не сложно?
Там нужно сделать такой автоматический разброс выбранного итэм-индекса комбобокса на: S="(Edit1.Text)" L="(Edit2.Text)" в ComboBoxChange.
Конечно, прошу прощения за свою малограмотность в программировании.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter