Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TProgressBar - соотнести клик мышкой и свойство Position [D5, D6, D7, Win2k, WinXP]


DDDeN ©   (2007-11-15 13:32:00) 

Есть прогресс бар, свойство Max может принимать различные значения. Как, имея координаты тыка мышки, связать их с свойством Position? Чтобы можно было устанавливать текущую позицию кликом мышки.

Получить координаты тыка просто:


procedure TForm1.ProgressBar1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('X = ' + IntToStr(X) + ', ' + 'Y = ' + IntToStr(Y));
end;


ht9   (2007-11-20 03:12:00) [1]

position:=round(X*(max-min)/width);


DDDeN   (2007-11-16 09:19:00) [2]

Решение найдено!!!

ProgressBar1.Position := (X * ProgressBar1.Max) div ProgressBar1.ClientWidth;


DDDeN   (2007-11-16 08:55:00) [3]


> Германн ©   (16.11.07 04:34) [11]

ProgressBar1.ClientWidth


Германн   (2007-11-16 04:34:00) [4]


> DDDeN   (16.11.07 04:30) [10]
>
>
> > Германн ©   (15.11.07 15:14) [8]
> А справку почитать по событию OnMouseDown? И понять что
> есть Х в этом событии?
>
> В справке сказано: "X and Y are the pixel coordinates of
> the mouse pointer in the client area of the Sender." - Х
> и У - это координаты в пикселях указателя мыши в клиентской
> части компонента.
>
>

Ага. Прочитал таки. И какие твои мысли по поводу "клиентской части компонента"?

А всё прочее от "округления".


DDDeN   (2007-11-16 04:30:00) [5]


> Германн ©   (15.11.07 15:14) [8]
А справку почитать по событию OnMouseDown? И понять что есть Х в этом событии?

В справке сказано: "X and Y are the pixel coordinates of the mouse pointer in the client area of the Sender." - Х и У - это координаты в пикселях указателя мыши в клиентской части компонента.


> Anatoly Podgoretsky ©   (15.11.07 15:40) [9]
Надо делать поправку, видимо 0 не равно началу шкалы, она чуть левее. Тоже по поводу конца шкалы, но это требует проверки.

Шкала начинается с нуля, я проверил опытным путем, а вот заканчивается не тем числов, которому равна ширина компонента, а на 3 пикселя меньше (при разных ширинах компонента).


Anatoly Podgoretsky   (2007-11-15 15:40:00) [6]


> Спасибо, но у данного метода есть погрешность при увеличении
> Х увеличивается и погрешность.


> Сейчас...
> Сказывается конец рабочего дня

Тогда пройдет после отдыха.

> Спасибо, но у данного метода есть погрешность при увеличении
> Х увеличивается и погрешность.

Надо делать поправку, видимо 0 не равно началу шкалы, она чуть левее. Тоже по поводу конца шкалы, но это требует проверки.


Германн   (2007-11-15 15:14:00) [7]


> Спасибо, но у данного метода есть погрешность при увеличении
> Х увеличивается и погрешность.

А справку почитать по событию OnMouseDown? И понять что есть Х в этом событии?


DDDeN   (2007-11-15 14:35:00) [8]


> Вообще или сейчас?

Сейчас...
Сказывается конец рабочего дня


DDDeN   (2007-11-15 14:35:00) [9]


> Vice____   (15.11.07 14:27) [4]

Спасибо, но у данного метода есть погрешность при увеличении Х увеличивается и погрешность.


Anatoly Podgoretsky   (2007-11-15 14:31:00) [10]

> DDDeN  (15.11.2007 14:26:03)  [3]

Вообще или сейчас?


Vice____   (2007-11-15 14:27:00) [11]

ProgressBar1.Position:=  (((x)/(ProgressBar1.Width/100))*(ProgressBar1.Max/100);


DDDeN   (2007-11-15 14:26:00) [12]


> Kolan ©   (15.11.07 13:38) [1]

Он, к сожалению не годится...


> Anatoly Podgoretsky ©   (15.11.07 13:54) [2]

Извините... Просто мозг уже не очень соображает :)


Anatoly Podgoretsky   (2007-11-15 13:54:00) [13]

А самому посчитать, это же задача из начальной школы, нахождение пропорций.


Kolan   (2007-11-15 13:38:00) [14]

Есть такой контрол TTrackBar на вкладке Win32 — он не сгодится? Он так умеет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо