|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как сделать свой трекбар из 2-3 Image?
В общем нужно сделать свой трекбар для плеера, обычный TrackBar не подходит, единственный компонент который подходит, так это AdvTrackBar, но он триальный. Вот встала проблема создания трекбара из 2 Image (один - это полоска, а другой это за что тягать). Только вот реализовать это не получается. Может кто подскажет?
|
#2
|
||||
|
||||
Подсказать как реализовать?
Ничего особо сложного, делаете класс наследник TGraphicControl в нем преписываете конструктор Create и метод Paint. Если есть необходимость, то регистрируете его. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Примерчик такой у вас уже есть, посмотрите в исходниках как реализован класс TShape он живет в ExtCtrls.pas
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Глянул этот файл, но чесно говоря почти ничего там не понял, там сильно много лишнего, а мне просто надо наглядно используя 2 компонента Image сделать трекбар. Просто узнать длину файла, определить процент, и позицию движка, и чтобы этот движок передвигался если за него потянуть. Вот это собственно и непонятно.
|
#6
|
||||
|
||||
совпадение? на днях начинал делать такой компонент! правда только начал, но не успел доделать, выложу сырой исходник, основное в нём уже есть, осталось потвикать и доделать, думаю сможете.
TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |
#7
|
||||
|
||||
Вот код перетаскивания, проценты сам посчитай(если умеешь)
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Label1: TLabel; Label2: TLabel; Shape3: TShape; procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; mv : boolean; coord : TPoint; l,il : integer; procent : integer; implementation {$R *.dfm} procedure TForm1.Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ((Shape2.Left - Shape3.Left) < X) and (X < (Shape2.Left - Shape3.Left)+17) then mv := true; Coord := Point(x,y); l := Shape2.Left; end; procedure TForm1.Shape3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var sm : integer; begin sm := X-Coord.X; if (Shape2.Left >= Shape3.Left+(Shape3.Width - Shape2.Width - 4)) and (sm > 0) then exit; if (Shape2.Left <= (Shape3.Left+4)) and (sm < 0) then exit; if mv then begin Shape2.Left := l + sm; end; end; procedure TForm1.Shape3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mv := false; end; procedure TForm1.FormCreate(Sender: TObject); begin il := Shape2.Left; end; end. Код:
object Form1: TForm1 Left = 192 Top = 114 Width = 485 Height = 135 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Shape1: TShape Left = 20 Top = 26 Width = 361 Height = 11 end object Shape2: TShape Left = 22 Top = 14 Width = 17 Height = 33 Brush.Color = clGray end object Label1: TLabel Left = 14 Top = 60 Width = 457 Height = 13 Caption = 'Замени компонеты TShape (кроме Shape3) компонентами TImage (если' + ' хочешь, конечно)' end object Label2: TLabel Left = 12 Top = 78 Width = 66 Height = 13 Caption = 'Проценты - 0' end object Shape3: TShape Left = 18 Top = 14 Width = 367 Height = 33 Brush.Style = bsClear Pen.Style = psClear OnMouseDown = Shape3MouseDown OnMouseMove = Shape3MouseMove OnMouseUp = Shape3MouseUp end end Кнопка "+" - весы в правом верхнем углу сообщения... |
#8
|
|||
|
|||
AleD, спасибо, как раз в тему, только вот как использовать компонент?
mak-karpov и за код тоже спасибо! |
#9
|
||||
|
||||
Цитата:
юзать сам компонент, ну там есть переменные min max и pos которые отвечают за минимальное, максимальное и установленное значение. При смене ползунка юзером выполняется событие OnChange (аргумент ByMouse который по идеи должен обозначать как изменился ползунок от мыши или от установки переменной, пока не работает). ну и для этого надо загрузить изображения:
TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |
#10
|
|||
|
|||
Спасибо, только вот я не могу понять одно в таких компонентах, как сделать этот трекбар видимым? тоесть мне нужно добавить ADTracker в Uses, а потом, например загрузить в него картинки, это делается типа так: ADTracker.TrackNormal:=LoadFromFile('pic.bmp') ? А как сделать у него событие OnChange? Нужно писать процедуру?
|