Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Внизclipboard->WAVE->file Найти похожие ветки
← →
Dema-X (2004-10-18 09:46) [0]Как можно звук находядящийся в clipbord"е занести в переменную в Delphi
c последющей записью в файл,в справке я не нашел даже примерного описания в каком типе можно хранить
звуки подскажите пожалуйста
← →
ЮЮ © (2004-10-18 10:10) [1]А как, интересно, он в clipbord попал? У тебя clipbord со встроенным микрофоном?
← →
Dema-X (2004-10-18 11:12) [2]а ты в программе звукозавись посмотри пункт копировать а clipbbrd прошерсти на CF_WAVE так вот и попадает :)
← →
KilkennyCat © (2004-10-18 12:05) [3]
> Dema-X (18.10.04 11:12) [2]
ну так ты и ответил на свой вопрос... осталось только создать ресурс и сделать в нем лоадфромклипбоард
← →
Dema-X (2004-10-18 18:39) [4]
> KilkennyCat © (18.10.04 12:05) [3]
>
> > Dema-X (18.10.04 11:12) [2]
>
> ну так ты и ответил на свой вопрос... осталось только создать
> ресурс и сделать в нем лоадфромклипбоард
В этом то и проблема,я не знаю что создавать,никаких классов TWAVE я не встречал Ж(
← →
GuAV © (2004-10-18 22:04) [5]
uses Clipbrd, MMSystem;
var h: HGLOBAL; P: Pointer;
begin
if not Clipboard.HasFormat(CF_WAVE) then Exit;
Clipboard.Open;
try
h := Clipboard.GetAsHandle(CF_WAVE);
if h = 0 then Exit;
P := GlobalLock(h);
if P <> nil then
try
// P указвыает на звук
// юзаем как хотим
PlaySound(P, 0, SND_MEMORY);
// закончили работу
finally
GlobalUnlock(h);
end;
finally
Clipboard.Close;
end;
end;
← →
GuAV © (2004-10-18 22:30) [6]Точнее можно и без Open/Close, это в TClipboard автоматически делается.
var h: HGLOBAL; P: Pointer;
begin
if not Clipboard.HasFormat(CF_WAVE) then Exit;
h := Clipboard.GetAsHandle(CF_WAVE);
if h = 0 then Exit;
P := GlobalLock(h);
if P <> nil then
try
PlaySound(P, 0, SND_MEMORY);
finally
GlobalUnlock(h);
end;
end;
← →
GuAV © (2004-10-18 22:44) [7]то есть [6] зря написал - не работает потому что закрывает clipboard сразу же. а [5] - работает, проверил.
← →
KilkennyCat © (2004-10-19 01:26) [8]
> Dema-X (18.10.04 18:39) [4]
а TStream встречал?
← →
Dema-X (2004-10-19 06:55) [9]
> KilkennyCat © (19.10.04 01:26) [8]
>
> > Dema-X (18.10.04 18:39) [4]
>
>
> а TStream встречал?
Встречал только описания не видел поэтому использовать не получатся приложение валится...
← →
Dema-X (2004-10-19 07:32) [10]
> GuAV ©
Ну не совсем то что надо,ваш пример показывает как проиграть а как зогнать этот звук в глобальную переменныю?
← →
GuAV © (2004-10-19 14:34) [11]P^ это УЖЕ глобальная переменная которая нужна. В файл например сохранить надо ? тогда так:
var h: HGLOBAL; P: Pointer;
begin
if not Clipboard.HasFormat(CF_WAVE) then Exit;
Clipboard.Open;
try
h := Clipboard.GetAsHandle(CF_WAVE);
if h = 0 then Exit;
P := GlobalLock(h);
if P <> nil then
try
// P указвыает на звук
// юзаем как хотим
with TFileStream.Create("c:\test.wav", fmCreate) do
try
WriteBuffer(PWAVEHDR(P).lpData, PWAVEHDR(P).dwBufferLength);
finally
Free;
end;
// закончили работу
finally
GlobalUnlock(h);
end;
finally
Clipboard.Close;
end;
end;
← →
Dema-X (2004-10-19 18:30) [12]иак в том то и дело что P^ это лишь указатель на ресурс а нужно чтоюы в тип типа tbimap или др
← →
GuAV © (2004-10-19 23:11) [13]Dema-X (19.10.04 18:30) [12]
иак в том то и дело что P^ это лишь указатель на ресурс а нужно чтоюы в тип типа tbimap или др
Не совсем понял.
надо куда нибуть поместить то что потом пойдёт в файл ?
тогда заменить TFileStream на TMemoryStream, сделать его глобальной переменной. Или без TSream - через GetMem и Move
надо сделать что-то доступным после выполнения процедуры ?
скопировать. например, через move.
где в дельфи класс TWave ? видимо, его действительно нет в составе дельфи. Чей то готовый вероятно можно найти, используя поисковую систему.
← →
GuAV © (2004-10-20 01:00) [14]а ещё AVIGetFromClipboard есть, нужно только найти объявления для дельфи или переписать с сишных.
← →
Dema-X (2004-10-20 09:00) [15]
> GuAV © (19.10.04 23:11) [13]
> Dema-X (19.10.04 18:30) [12]
> иак в том то и дело что P^ это лишь указатель на ресурс
> а нужно чтоюы в тип типа tbimap или др
>
> Не совсем понял.
Ну короче массив создать который находится в памяти и к каждому элементу можно обращатся как к звуку.а P это POINTER - указатель скопировали одно запомнил скопировали другое забыл 1 и запомнил 2.
← →
GuAV © (2004-10-20 12:52) [16]
>
> Ну короче массив создать который находится в памяти и
> к каждому элементу можно обращатся как к звуку.а P это
> POINTER - указатель скопировали одно запомнил
> скопировали другое забыл 1 и запомнил 2.
скопировать, например, через move в массив из указателейGetMem(A[I], Size);
Move(P, A[I], Size);
или в список.GetMem(P1, Size);
Move(P, P1, Size);
List.Add(P1);
или через список TMemoryStream;M:=TMemoryStream.Create;
try
M.WriteBuffer(P, Size);
List.Add(M);
except
M.Free;
raise;
end;
← →
GuAV © (2004-10-20 13:29) [17]Короче, вот работоспособный пример.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton; // вставить звук в список
Button2: TButton; // проиграть все звуки из списка
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Clipbrd, MMSystem, Contnrs;
{$R *.dfm}
var List: TObjectList;
procedure TForm1.Button1Click(Sender: TObject);
var h: HGLOBAL; P: Pointer; S: TMemoryStream;
begin
if not Clipboard.HasFormat(CF_WAVE) then Exit;
Clipboard.Open;
try
h := Clipboard.GetAsHandle(CF_WAVE);
if h = 0 then Exit;
P := GlobalLock(h);
if P <> nil then
try
S := TMemoryStream.Create;
try
S.WriteBuffer(PWAVEHDR(P).lpData, PWAVEHDR(P).dwBufferLength);
List.Add(S);
except
S.Free;
raise;
end;
finally
GlobalUnlock(h);
end;
finally
Clipboard.Close;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var I: Integer;
begin
for I := 0 to List.Count - 1 do
PlaySound(TMemoryStream(List[I]).Memory, 0, SND_MEMORY);
end;
initialization
List := TObjectList.Create;
finalization
List.Free;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c