![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Доброго времени суток всем!
Я пытаюсь сделать свой трэк бар, путём создания нескольких image! Мне собственно надо осуществить перемотку проигрываемого файла с помощью данного трэкбара! если вас не затруднит гляньте пример! помогите, кто чем сможет!!! заранее спасибо! Вот исходный код: Код:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, bass, Registry;
type
TMainForm = class(TForm)
ListBox1: TListBox;
Label1: TLabel;
O: TOpenDialog;
TrackLength: TImage;
Thumbs: TImage;
procedure TrackLengthMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Label1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
public
{ Public declarations }
function SolveForY(X, Y: integer): integer;// функция
function GetPercentDone(FMinValue,FCurValue,FMaxValue:LongWord): Byte;//функция2
end;
var
MainForm: TMainForm;
channel:hstream;
implementation
{$R *.dfm}
procedure TMainForm.TrackLengthMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button = mbleft then begin
if Thumbs.Left <> TrackLength.Left + x then
Thumbs.Left:=TrackLength.Left + x - 10;
SolveForY(Thumbs.Left,TrackLength.Width);
bass.BASS_ChannelGetPosition(application.Handle,SolveForY(Thumbs.Left,TrackLength.Width) );
end;
end;
function TMainForm.GetPercentDone(FMinValue, FCurValue,
FMaxValue: LongWord): Byte;
begin
Result := SolveForY(FCurValue - FMinValue, FMaxValue - FMinValue);
end;
function TMainForm.SolveForY(X, Y: integer): integer;
begin
if Y = 0 then Result := 0
else Result := Trunc((X/Y)* 100);
end;
procedure TMainForm.Label1Click(Sender: TObject);
begin
o.Execute;
BASS_StreamFree(Channel);
Channel := BASS_StreamCreateFile(FALSE, PChar(o.filename), 0, 0, 0);
BASS_ChannelPlay(Channel, False);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
BASS_Init(-1, 44100, 0, application.Handle, nil);
Thumbs.Left:=TrackLength.Left - 10;
end;
procedure TMainForm.ListBox1DragDrop(Sender, Source: TObject; X,
Y: Integer);
begin
with (Sender as TListBox) do
Items.Move(ItemIndex,ItemAtPos(Point(x,y),True));
end;
procedure TMainForm.ListBox1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Sender=Source);
end;
end. |
|
#2
|
||||
|
||||
|
Я делал это примерно так:
Код:
var a:=Real; . . . a:=BASS_ChannelGetLength(streamhandle, BASS_POS_BYTE) / 100; //100 - число пикселей, которым ограничивается перемещение Image1 (ползунок трэкбара) . . . BASS_ChannelSetPosition(streamhandle, Round(Image1.Left * a), BASS_POS_BYTE); Последний раз редактировалось ryderx34, 05.03.2010 в 00:12. |