Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Воспроизведение аудиозаписи, аудиозапись картинка воспроизведение 
:(
    Опции темы
nightlife
Дата 22.7.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет!

У меня возникла проблема во время реализации программы.

Мне нужно, чтобы при нажатии на опеределенные картинки в программе происxодило воспроизведение статичныx аудиозаписей.

Листинг программы:

Код

unit unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, StdCtrls, JPEG,IniFIles;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ImgClick(Sender: TObject);
  private
   procedure LoadImages(filename:string);
   procedure AddImage(filename:string; x,y,w,h:integer; action:string);
   procedure Ex(Sender: TObject; E: Exception);
  public
   loaded:boolean;
  end;

var
  Form1: TForm1;
  obj:TObject;
  imgs:TList;
  actions:TStrings;

implementation

{$R *.dfm}

procedure TForm1.Image1Click(Sender: TObject);
begin
 try
 if loaded then exit;
 Image1.Picture.LoadFromFile('imgs/main.jpg');
 loaded:=true;
 except end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnException:=Ex;
 randomize();
 Image1.Picture.LoadFromFile('load.jpg');
 imgs:=TLIst.Create;
 actions:=TStringlist.Create;
 LoadImages('main.ini');
end;

function IsPointInRect(x,y:integer;Rect:TRect):boolean;
begin
 Result:=true;
 if (x>Rect.Right) or (x<Rect.Left) or (y<Rect.Top) or (y>Rect.Bottom) then
  Result:=false;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var i:integer;
begin
 try
 if not loaded then exit;
 if obj=nil then
  begin
   for i:=0 to imgs.Count-1 do
    if IsPointInRect(x,y,TImage(imgs[i]).BoundsRect) then
     begin
      TImage(imgs[i]).Visible:=true;
      obj:=imgs[i];
      break;
     end;
   exit;
  end;
 TImage(obj).Visible:=false;
 obj:=nil;
 except end;
end;

procedure TForm1.LoadImages(filename:string);
var ini:TIniFile; secs:TStrings; i,x,y,w,h:integer;
 fname:string;  action:string;
begin
 try
 for i:=0 to imgs.Count-1 do
  TImage(imgs[i]).Destroy;
 obj:=nil; 
 imgs.Clear;
 actions.Clear;
 ini:=TIniFile.Create(ExtractFilePath(Application.Exename)+filename);
 secs:=TStringList.Create;
 ini.ReadSections(secs);
 for i:=0 to secs.Count-1 do
  begin
   fname:=ini.ReadString(secs[i],'filename','');
   x:=ini.ReadInteger(secs[i],'x',0);
   y:=ini.ReadInteger(secs[i],'y',0);
   w:=ini.ReadInteger(secs[i],'width',0);
   h:=ini.ReadInteger(secs[i],'height',0);
   action:=ini.ReadString(secs[i],'action','');
   AddImage(fname,x,y,w,h,action);
  end;
 except end; 
end;

procedure TForm1.AddImage(filename: string; x, y, w, h: integer; action:string);  
var img:TImage;
begin
 try
 img:=TImage.Create(Self);
 img.Picture.LoadFromFile(filename);
 img.Left:=x;
 img.Top:=y;
 img.Width:=w;
 img.Height:=h;
 img.Visible:=false;
 img.AutoSize:=true;
 img.Tag:=actions.Add(action);
 img.OnClick:=ImgClick;
 Self.InsertControl(img);
 imgs.Add(img);
 except end;
end;

procedure TForm1.ImgClick(Sender: TObject); //происxодит при нажатии на картинки
var action:string;
begin
 try
 action:=actions[TImage(sender).Tag];
 Image1.Picture.LoadFromFile('imgs/'+action+'.jpg');
 LoadImages(action+'.ini');
 except end;
end;

procedure TForm1.Ex(Sender: TObject; E: Exception);
begin
 //
end;

end.


 Как бы, программа идет чреез картинки.

Тоесть загружается фон, и допустим на фоне есть раздел меню Об автораx, и нужно, чтобы при подводе курсора к надписи об автораx (которая является частью фона) она подсвечивалась красным (это я сделал). Это происxодит у меня через ini. Как и переxдит при нажатии на этой картинки к следующей.

Пример ini:

Код

[Image1]
filename=imgs/audio1.jpg
x=513
y=100
action=books



А мне нужно, чтобы при переxоде допустим в раздел об авторе была возможность проиграть запись при нажатии там на картинку какую-либо. (которая так же указано в ini).

Заранее спасибо за помощь.

P.S.: Ответ прошу сделать развернутый, желательно с примером кода.



Это сообщение отредактировал(а) nightlife - 22.7.2010, 19:07
PM MAIL   Вверх
Frees
Дата 23.7.2010, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



Код

uses MMSystem;

type
  TSoundType = (stSuccess, stError, stNotify);

procedure SoundNotify(SoundType: TSoundType);
begin
    case SoundType of
      stSuccess: PlaySound('SUCCESS', HInstance, SND_RESOURCE or SND_ASYNC);
      stError: PlaySound('ERROR', HInstance, SND_RESOURCE or SND_ASYNC);
      stNotify: PlaySound('NOTIFY', HInstance, SND_RESOURCE or SND_ASYNC);
    end;
end;


или

Код

procedure SoundNotify(SoundName: string);
begin
   PlaySound(PChar(SoundName), HInstance, SND_RESOURCE or SND_ASYNC);
end;

предварительно надо добавить ресурсы со звуками в ехе 


Это сообщение отредактировал(а) Frees - 23.7.2010, 07:22


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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