Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2009, 12:04
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
Стрелка Как сделать свой трекбар из 2-3 Image?

В общем нужно сделать свой трекбар для плеера, обычный TrackBar не подходит, единственный компонент который подходит, так это AdvTrackBar, но он триальный. Вот встала проблема создания трекбара из 2 Image (один - это полоска, а другой это за что тягать). Только вот реализовать это не получается. Может кто подскажет?
Ответить с цитированием
  #2  
Старый 27.09.2009, 12:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Подсказать как реализовать?
Ничего особо сложного, делаете класс наследник TGraphicControl
в нем преписываете конструктор Create и метод Paint. Если есть необходимость, то регистрируете его.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 27.09.2009, 20:03
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Подсказать как реализовать?
Ничего особо сложного, делаете класс наследник TGraphicControl
в нем преписываете конструктор Create и метод Paint. Если есть необходимость, то регистрируете его.
А можно примерчик как это реализовать, если не сложно?
Ответить с цитированием
  #4  
Старый 27.09.2009, 21:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Примерчик такой у вас уже есть, посмотрите в исходниках как реализован класс TShape он живет в ExtCtrls.pas
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 27.09.2009, 22:11
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
По умолчанию

Глянул этот файл, но чесно говоря почти ничего там не понял, там сильно много лишнего, а мне просто надо наглядно используя 2 компонента Image сделать трекбар. Просто узнать длину файла, определить процент, и позицию движка, и чтобы этот движок передвигался если за него потянуть. Вот это собственно и непонятно.
Ответить с цитированием
  #6  
Старый 28.09.2009, 01:33
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

совпадение? на днях начинал делать такой компонент! правда только начал, но не успел доделать, выложу сырой исходник, основное в нём уже есть, осталось потвикать и доделать, думаю сможете.
Вложения
Тип файла: rar ADTracker.rar (2.0 Кбайт, 37 просмотров)
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #7  
Старый 28.09.2009, 07:29
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Вот код перетаскивания, проценты сам посчитай(если умеешь)
Код:
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.
dfm
Код:
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  
Старый 30.09.2009, 21:31
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
По умолчанию

AleD, спасибо, как раз в тему, только вот как использовать компонент?
mak-karpov и за код тоже спасибо!
Ответить с цитированием
  #9  
Старый 01.10.2009, 08:45
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от nbstudio
AleD, спасибо, как раз в тему, только вот как использовать компонент?
mak-karpov и за код тоже спасибо!
ну для начало его надо установить, делается это так: открываеш какой нибудь пакет (например dclusr.dpk) и добавляеш в него файл компонетна, затем компилируеш и (если ещё не установлен) устанавливаеш
юзать сам компонент, ну там есть переменные min max и pos которые отвечают за минимальное, максимальное и установленное значение. При смене ползунка юзером выполняется событие OnChange (аргумент ByMouse который по идеи должен обозначать как изменился ползунок от мыши или от установки переменной, пока не работает).
ну и для этого надо загрузить изображения:
  • TrackNormal - трэкбар,
  • TrackUp - подсвеченый трэкбар (не юзается здесь),
  • TrackDown - нажатый трэкбар (тоже ещё не юзается),
  • TrackDisable - отключённое состояние трэкбара (так же ),
  • Background - фоновое изображение,
  • BackgroundUsed - полоса тянущаяся за трэкбаром,
  • BackgroundDisable - отключённое состояние (не юзается)
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #10  
Старый 01.10.2009, 22:19
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
По умолчанию

Спасибо, только вот я не могу понять одно в таких компонентах, как сделать этот трекбар видимым? тоесть мне нужно добавить ADTracker в Uses, а потом, например загрузить в него картинки, это делается типа так: ADTracker.TrackNormal:=LoadFromFile('pic.bmp') ? А как сделать у него событие OnChange? Нужно писать процедуру?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter