Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как при открытии формы воспроизвести миди, Как при открытии формы воспроизвести мид 
V
    Опции темы
~FoX~
Дата 12.3.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Щаз под рукой нету ничего из компиляторов, так что только идея...

Код

var 
  FS: TFileStream; 
  RS: TResourceStream; 
  RID:Integer; 

begin 
   FS := TFileStream.Create('c:\1.mid', fmCreate); 
   RS := TResourceStream.CreateFromID(Application.Handle, RID, rt_RCData); //Или Application.Instance - надо тестить,  RID - Id ресурса....
   FS.CopyFrom(RS, 0); 
   RS.Free; 
   FS.Free; 
end; 




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
alexamur
Дата 12.3.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Нихт арбайтен smile Исправно создает на С: миди-файл, с размером 0 байт и в ступор. Вот сообщение компилятора:[Warning] Unit1.pas(32): Variable 'RID' might not have been initialized
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R MyRes.res}
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  FS: TFileStream;
  RS: TResourceStream;
  RID: Integer;
begin
   FS := TFileStream.Create('c:\midi.mid', fmCreate);
   RS := TResourceStream.CreateFromID(Application.Handle, RID, rt_RCData);
   //Или Application.Instance - надо тестить,  RID - Id ресурса....
   FS.CopyFrom(RS, 0);
   RS.Free;
   FS.Free;
end;

end.

и еще выводится окно "Не найден ресурс p:D" smile 
PM MAIL   Вверх
MetalFan
Дата 12.3.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



ну прально, у ресурса какой идентификатор?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
alexamur
Дата 12.3.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2009

Репутация: нет
Всего: нет




Цитата(MetalFan @  12.3.2009,  15:33 Найти цитируемый пост)
ну прально, у ресурса какой идентификатор?


1049
PM MAIL   Вверх
MetalFan
Дата 12.3.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



alexamur, а в параметре RID что передается?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
alexamur
Дата 13.3.2009, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Наверное я повеселю Вас: а как узнать ID ресурса? smile 
PM MAIL   Вверх
MetalFan
Дата 13.3.2009, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



alexamur, повеселил. какой установишь ID, такой и будет. к ресурсу можно обратиться как по имени, так и по ID.

Добавлено через 1 минуту и 46 секунд
Цитата(alexamur @  12.3.2009,  15:17 Найти цитируемый пост)
   RS := TResourceStream.CreateFromID(Application.Handle, RID, rt_RCData);
   //Или Application.Instance - надо тестить,  RID - Id ресурса....

достаточно просто указать hInstance вместо Application.Handle.
так же должна быть функция с примерным названием TResourceStream.CreateFromName


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
~FoX~
Дата 13.3.2009, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



alexamur, фиг с ним с идом....Будем рулить тем что есть под рукой  smile 
Код

  RS := TResourceStream.Create(Application.Handle, 'MYMID', rt_RCData);

Плюём на варнинг ибо не его собачье дело.... smile 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
MetalFan
Дата 13.3.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



Цитата(~FoX~ @  13.3.2009,  09:02 Найти цитируемый пост)
Application.Handle

да при чем тут хэндл приложения?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 13.3.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  Правильно будет не Application.Handle, HInstance - т.е. базовый адрес приложения в его виртуальном адресном пространстве или HInstance Dll если ресурс находиться в Dll.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
alexamur
Дата 13.3.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Alexeis - HInstance реально работает - спасибо
Цитата(~FoX~ @  13.3.2009,  09:02 Найти цитируемый пост)
alexamur, фиг с ним с идом....Будем рулить тем что есть под рукой  smile 
Выделить всёкод Pascal/Delphi
1:
    
  RS := TResourceStream.Create(Application.Handle, 'MYMID', rt_RCData);

Плюём на варнинг ибо не его собачье дело.... smile  
 - с Application.Handle со ссылкой на имя не работает
Сейчас компилируется без ошибок, создает из ресурса, по указанному пути, реальный миди-файл, но не воспроизводит его. Как это организовать? И чтобы после закрытия формы миди убивался?
Код

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R MyRes.res}
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
  FS: TFileStream;
  RS: TResourceStream;
  //RID: Integer;
begin
   FS := TFileStream.Create('c:\midi.mid', fmCreate);
   //RS := TResourceStream.CreateFromID(Application.Handle, RID, rt_RCData);
   //RS := TResourceStream.Create(Application.Handle, 'MYMID', rt_RCData);
   RS := TResourceStream.Create(HInstance, 'MYMID', rt_RCData);
   FS.CopyFrom(RS, 0);
   RS.Free;
   FS.Free;
end;
end.

PM MAIL   Вверх
MetalFan
Дата 13.3.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



Цитата(alexamur @  13.3.2009,  14:36 Найти цитируемый пост)
но не воспроизводит его

кто он? где код воспроизведения?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
~FoX~
Дата 13.3.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Ну дык уважаемый...

Код

uses MMSystem;
//..............
procedure TForm1.FormCreate(Sender: TObject);
var
  FS: TFileStream;
  RS: TResourceStream;
  //RID: Integer;
begin
   FS := TFileStream.Create('c:\midi.mid', fmCreate);
   //RS := TResourceStream.CreateFromID(Application.Handle, RID, rt_RCData);
   //RS := TResourceStream.Create(Application.Handle, 'MYMID', rt_RCData);
   RS := TResourceStream.Create(HInstance, 'MYMID', rt_RCData);
   FS.CopyFrom(RS, 0);
   RS.Free;
   FS.Free;
   MCISendString(PChar('PLAY ' + 'c:\midi.mid'), nil, 0, 0);      //играть то чем то надо )))
end;

//А по онКлоузе соответственно угрохиваем файл

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MCISendString(PChar('STOP' + 'c:\midi.mid'), nil, 0, 0);  //не забываем тормозить фало...
  DeleteFile('c:\midi.mid');
end;


Это сообщение отредактировал(а) ~FoX~ - 13.3.2009, 15:04


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
alexamur
Дата 13.3.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



Цитата(MetalFan @  13.3.2009,  14:41 Найти цитируемый пост)
кто он? где код воспроизведения?

Так в том и вопрос, что не знаю, как заставить "петь" мидюшку. А ОН - это миди-файл. Ну "слабоват еще в коленках"...да и раньше еще говорил, что из кухонной утвари...чайник... smile

Добавлено через 3 минуты и 9 секунд
О.... сорри...пока писал я,  ответил ~FoX~ СПАСИБО. Вот сейчас поизучаю все это - отпишусь
PM MAIL   Вверх
alexamur
Дата 13.3.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2009

Репутация: нет
Всего: нет



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

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

В принципе, play останавливать и не надо (в моем случае) - при закрытии формы и так stop. А вот удалить файл желательно. Не нашел ничего лучше, чем спрятать извлекаемый файл куда подальше. Во как ругается :
[Error] Unit1.pas(31): Undeclared identifier: 'FormClose'
[Error] Unit1.pas(31): ';' expected but ')' found
[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'


PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1054 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.