Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Microo10
Форумчанин
22 / 17 / 0
Регистрация: 18.08.2011
Сообщений: 365
14.02.2012, 21:31     Вычисление позиции   #1
Итак, есть paintbox надо при нажатии на кнопку произвести следующие вычисления:
Код Code
1
2
3
4
5
TrackLen:=1000; //длинна всего трека(далее поясню)
TrackPos:=100; //текущая позиция воспроизведения
Надо ширину  выяснив сколько будет 1 % ширины paintbox'а,затем высчитать % 
тек. позиции по отношению к длине трека,затем высчитать % по отношению к 
ширине paintbox'a 
Поясняю: TrackLen и TrackPos постоянно изменяют свои значения получая данные от плеера через таймер,мне надо сделать прототип Scrolbar'a, что бы текущая позиция в paint'е закрашивалась определенным цветом,пример можно увидеть в архиве,там будет понятнее...
Если я плохо сформулировал свой вопрос,сообщите об этом в комментариях,я перетолкую))
Помогите мне пожалуйста,у самого каша в голове...
Вложения
Тип файла: rar _scrol.rar (438.2 Кб, 7 просмотров)
AdAgent
Объявления
14.02.2012, 21:31    Вычисление позиции
Microo10
Форумчанин
22 / 17 / 0
Регистрация: 18.08.2011
Сообщений: 365
15.02.2012, 07:59  [ТС]     Вычисление позиции   #2
Пожалуй поясню получше,надо выяснить сколько процентов уже проиграл плеер выяснив сколько процентов займет текущая позиция от длинны трека,и это процентное соотношение закрасить в paintbox...
P.S так очень трудно понять,откройте пример и вы увидите пример который принимает значение из Tedit

Добавлено через 13 минут
Вроде бы проблему решил,но Rad Xe2 ругается:
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Pos : Integer;
  procedure Draw;
 
implementation
 
{$R *.dfm}
//*****************************************************************************
// Создание формы
procedure TForm1.FormCreate(Sender: TObject);
begin
  Pos := 0;
  Draw;
end;
//*****************************************************************************
// Кнопка установить
procedure TForm1.Button1Click(Sender: TObject);
begin
 Pos := StrToInt(Edit1.Text);
  Draw;
end;
//*****************************************************************************
// Нажатие мыши
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
Proc,L:Integer;
A,B:Integer;
begin
  A:= 2000;
  B:=100;
  Pos := L;
  Draw;
  Proc:= B * 100 / A;
  L:= Image1.Height * Proc / 100
 
end;
//*****************************************************************************
// Движение мыши
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then
  begin
    Pos := X;
    Draw;
  end;
end;
//*****************************************************************************
// Прорисовать
procedure Draw;
begin
  with Form1.Image1 do
  begin
  // Фон
    Canvas.Pen.Color := RGB(81,81,81);
    Canvas.Brush.Color := RGB(81,81,81);
    Canvas.Rectangle(0, 0, Width, Height);
    // Позиция
    Canvas.Pen.Color := clBlue;
    Canvas.Brush.Color := clBlue;
    Canvas.Rectangle(0, 0, Pos, Height);
  end;
end;
//*****************************************************************************
end.
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Checking project dependencies...
Compiling Project1.dproj (Debug, Win32)
dcc command line for "Project1.dpr"
  d:\program files\embarcadero\rad studio\9.0\bin\dcc32.exe -$O- -$W+ -$YD --no-config -M -Q -AGenerics.Collections=System.Generics.Collections;
  Generics.Defaults=System.Generics.Defaults;WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG -I"d:\program 
  files\embarcadero\rad studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad 
  studio\9.0\Imports";"C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program 
  Files\FastReports\LibD16";"d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" 
  -LE"C:\Users\Public\Documents\RAD Studio\9.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\9.0\Dcp" -NSSystem.Win;Data.Win;Datasnap.Win;Web.Win;
  Soap.Win;Xml.Win;Bde;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi; -O"d:\program files\embarcadero\rad 
  studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad studio\9.0\Imports";
  "C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program Files\FastReports\LibD16";
  "d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" -R"d:\program files\embarcadero\rad 
  studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad studio\9.0\Imports";
  "C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program Files\FastReports\LibD16";
  "d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" -U"d:\program files\embarcadero\rad 
  studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad studio\9.0\Imports";
  "C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program Files\FastReports\LibD16";
  "d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" -K00400000 
  -NB"C:\Users\Public\Documents\RAD Studio\9.0\Dcp" -NH"C:\Users\Public\Documents\RAD Studio\9.0\hpp"   Project1.dpr   
[DCC Error] Unit1.pas(60): E2010 Incompatible types: 'Integer' and 'Extended'
[DCC Error] Unit1.pas(63): E2010 Incompatible types: 'Integer' and 'Extended'
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
Failed
Elapsed time: 00:00:00.3
Помогите что ему не нравиться??? Может преобразование в строку сделать?

Добавлено через 9 часов 51 минуту
Не кто не знает как можно реализовать???
anonimus
Форумчанин
2132 / 1221 / 18
Регистрация: 28.04.2010
Сообщений: 4,486
15.02.2012, 10:07     Вычисление позиции   #3
1. не стоит давать название переменным зарезервированными именами или именами функций, у тебя переменная Pos.
2. Правильнее было бы передавать в процедуру Draw параметр текущая позиция, а не через глобальную переменную.
3. вот пример с TrackBar
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure Draw(p:integer);
begin
  with Form1.Image1 do
  begin
  // Фон
    Canvas.Pen.Color := RGB(81,81,81);
    Canvas.Brush.Color := RGB(81,81,81);
    Canvas.Rectangle(0, 0, Width, Height);
    // Позиция
    Canvas.Pen.Color := clBlue;
    Canvas.Brush.Color := clBlue;
    Canvas.Rectangle(0, 0, P, Height);
  end;
end;
//*****************************************************************************
procedure TForm1.TrackBar1Change(Sender: TObject);
var tmp:real;
begin
tmp:=TrackBar1.Position/TrackBar1.Max;
Draw(round(Image1.Width*tmp));
end;
принцип тот же и с плеером
Microo10
Форумчанин
22 / 17 / 0
Регистрация: 18.08.2011
Сообщений: 365
15.02.2012, 11:16  [ТС]     Вычисление позиции   #4
Цитата Сообщение от anonimus Посмотреть сообщение
принцип тот же и с плеером
Сейчас попробую

Добавлено через 6 минут
Все равно ругает:
Код Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Checking project dependencies...
Compiling Project1.dproj (Debug, Win32)
dcc command line for "Project1.dpr"
  d:\program files\embarcadero\rad studio\9.0\bin\dcc32.exe -$O- -$W+ -$YD --no-config -M -Q -AGenerics.Collections=System.Generics.Collections;
  Generics.Defaults=System.Generics.Defaults;WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG -I"d:\program 
  files\embarcadero\rad studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad 
  studio\9.0\Imports";"C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program 
  Files\FastReports\LibD16";"d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" 
  -LE"C:\Users\Public\Documents\RAD Studio\9.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\9.0\Dcp" -NSSystem.Win;Data.Win;Datasnap.Win;Web.Win;
  Soap.Win;Xml.Win;Bde;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi; -O"d:\program files\embarcadero\rad 
  studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad studio\9.0\Imports";
  "C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program Files\FastReports\LibD16";
  "d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" -R"d:\program files\embarcadero\rad 
  studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad studio\9.0\Imports";
  "C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program Files\FastReports\LibD16";
  "d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" -U"d:\program files\embarcadero\rad 
  studio\9.0\lib\Win32\release";"D:\Пользователи\Эдуард\Documents\RAD Studio\9.0\Imports";"d:\program files\embarcadero\rad studio\9.0\Imports";
  "C:\Users\Public\Documents\RAD Studio\9.0\Dcp";"d:\program files\embarcadero\rad studio\9.0\include";"D:\Program Files\FastReports\LibD16";
  "d:\program files\embarcadero\rad studio\9.0\RaveReports\Lib";"C:\Program Files\Raize\CS5\Lib\RS-XE2\Win32" -K00400000 
  -NB"C:\Users\Public\Documents\RAD Studio\9.0\Dcp" -NH"C:\Users\Public\Documents\RAD Studio\9.0\hpp"   Project1.dpr   
[DCC Error] Unit1.pas(44): E2034 Too many actual parameters
[DCC Error] Unit1.pas(56): E2250 There is no overloaded version of 'Pos' that can be called with these arguments
[DCC Error] Unit1.pas(58): E2010 Incompatible types: 'Integer' and 'Extended'
[DCC Error] Unit1.pas(61): E2010 Incompatible types: 'Integer' and 'Extended'
[DCC Error] Unit1.pas(69): E2250 There is no overloaded version of 'Pos' that can be called with these arguments
[DCC Error] Unit1.pas(75): E2267 Previous declaration of 'Draw' was not marked with the 'overload' directive
[DCC Error] Unit1.pas(28): E2065 Unsatisfied forward or external declaration: 'Draw'
[DCC Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
Failed
Elapsed time: 00:00:00.3
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  procedure Draw;
 
implementation
 
{$R *.dfm}
//*****************************************************************************
// Создание формы
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
//*****************************************************************************
// Кнопка установить
procedure TForm1.Button1Click(Sender: TObject);
var tmp:real;
begin
 Tmp := StrToInt(Edit1.Text);
 Draw(round(Image1.Width*tmp));
end;
//*****************************************************************************
// Нажатие мыши
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
Proc,L:Integer;
A,B:Integer;
begin
  A:= 2000; //длина песни
  B:=100; //текущая позиция
  Pos := L;
  Draw;
  Proc:= B * 100 / A; //Кол-во процентов
  L:= Image1.Height * Proc / 100 //длина закрашенного участка
 
end;
//*****************************************************************************
// Движение мыши
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then
  begin
    Pos := X;
    Draw;
  end;
end;
//*****************************************************************************
// Прорисовать
procedure Draw(pos:integer);
begin
  with Form1.Image1 do
  begin
  // Фон
    Canvas.Pen.Color := RGB(81,81,81);
    Canvas.Brush.Color := RGB(81,81,81);
    Canvas.Rectangle(0, 0, Width, Height);
    // Позиция
    Canvas.Pen.Color := clBlue;
    Canvas.Brush.Color := clBlue;
    Canvas.Rectangle(0, 0, Pos, Height);
  end;
end;
//*****************************************************************************
end.
anonimus
Форумчанин
2132 / 1221 / 18
Регистрация: 28.04.2010
Сообщений: 4,486
15.02.2012, 11:57     Вычисление позиции   #5
я не пытался устранить твои ошибки, я ответил на вопрос
надо выяснить сколько процентов уже проиграл плеер выяснив сколько процентов займет текущая позиция от длинны трека,и это процентное соотношение закрасить в paintbox...
AdAgent
Объявления
15.02.2012, 11:57    Вычисление позиции
Microo10
Форумчанин
22 / 17 / 0
Регистрация: 18.08.2011
Сообщений: 365
15.02.2012, 12:55  [ТС]     Вычисление позиции   #6
Цитата Сообщение от anonimus Посмотреть сообщение
я не пытался устранить твои ошибки, я ответил на вопрос
Собственно суть вопроса была не в этом,а в вычисление процентного соотношения)

Добавлено через 32 минуты
И устранения Incompatible types

Добавлено через 16 минут
Спасибо всем,на винограде на этот вопрос ответили за 10 мин 3 человека.
Нужно было использовать округление Round
NIch
Форумчанин
401 / 312 / 20
Регистрация: 17.03.2010
Сообщений: 1,122
15.02.2012, 13:39     Вычисление позиции   #7
Цитата Сообщение от Microo10 Посмотреть сообщение
устранения Incompatible types
Ответил в личку)))
Mawrat
Форумчанин
11771 / 5057 / 246
Регистрация: 19.09.2009
Сообщений: 7,822
15.02.2012, 17:54     Вычисление позиции   #8
Цитата Сообщение от Microo10 Посмотреть сообщение
Спасибо всем,на винограде на этот вопрос ответили за 10 мин 3 человека.
Нужно было использовать округление Round
anonimus, как раз, вот здесь, в коде, чёрным по белому написал, что требуется округление. Я приведу ещё раз код от anonimus и ключевую часть выделю красным:
---
procedure TForm1.TrackBar1Change(Sender: TObject);
var tmp:real;
begin
tmp:=TrackBar1.Position/TrackBar1.Max;
Draw(round(Image1.Width*tmp));
end;
---
Цитата Сообщение от Microo10 Посмотреть сообщение
Спасибо всем,на винограде на этот вопрос ответили за 10 мин 3 человека.
Подытожу: итого - ответил 1 человек на Кибере + 3 человека на Винграде и + ещё один человек (это я) подсветил ключевую часть красным.
Microo10
Форумчанин
22 / 17 / 0
Регистрация: 18.08.2011
Сообщений: 365
15.02.2012, 18:21  [ТС]     Вычисление позиции   #9
Цитата Сообщение от Mawrat Посмотреть сообщение
anonimus, как раз, вот здесь, в коде, чёрным по белому написал, что требуется округление. Я приведу ещё раз код от anonimus и ключевую часть выделю красным:
---
procedure TForm1.TrackBar1Change(Sender: TObject);
var tmp:real;
begin
tmp:=TrackBar1.Position/TrackBar1.Max;
Draw(round(Image1.Width*tmp));
end;
---

Подытожу: итого - ответил 1 человек на Кибере + 3 человека на Винграде и + ещё один человек (это я) подсветил ключевую часть красным.
В процедуре Draw не требовалось округление
anonimus
Форумчанин
2132 / 1221 / 18
Регистрация: 28.04.2010
Сообщений: 4,486
15.02.2012, 18:40     Вычисление позиции   #10
Цитата Сообщение от Microo10 Посмотреть сообщение
В процедуре Draw не требовалось округление
внимательнее будь
deathNC
Форумчанин
1862 / 980 / 14
Регистрация: 08.12.2009
Сообщений: 2,795
Записей в блоге: 2
15.02.2012, 18:59     Вычисление позиции   #11
Цитата Сообщение от Microo10 Посмотреть сообщение
на винограде на этот вопрос ответили за 10 мин 3 человека

Не по теме:

Какое это имеет отношение к данной теме?

Yandex
Объявления
15.02.2012, 18:59    Вычисление позиции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 21:26. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.