![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 он не сгодится? Он так умеет.