|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Изменение trackbar, и работа с ним!
Доброго времени суток всем!
Я пытаюсь сделать свой трэк бар, путём создания нескольких 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. |