![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кому СПАСИБО говорить? [D6, Win95/98]
_Александр_ © (2002-08-09 04:35:00)Объясните, мне, балбесу, пожалуйста, если можно по-русски, описания типа TRect - 4 часа промучался, пока до меня не дошло, что поля Bottom и Left - это ширина и высота экземпляра этого типа, а не Bottom и Left (Yниж Xправ) региона. Почему бы их так сразу и не назвать - Height и Width соотв.
В хелпе на писано:
ширина региона = Right - Left
высота = Bottom - Top!
Ну в чём я не прав? Разъясните, пожалуйста...
Ну очень обидно потерять столько времени из-за глупых мелочей, я уж чуть ли с ума не начал сходить, разбираясь, почему не работает..
Заранее благодарен...
Юрий Зотов (2002-08-09 10:42:00) [1]Точно перетренировка. Бывает.
Домой... и спать... спать... спать...
_Александр_ (2002-08-09 10:32:00) [2]Дык, действительно не говорил. :)
- НЕ туда всмотрелся, как никак 26й час на работе...
Юрий Зотов (2002-08-09 10:27:00) [3]Дык... про ограничения я и не говорил, вроде бы. Хотя не исключено, что и они тоже существуют.
Вообще, при решении проблем я стараюсь руководствоваться двумя правилами:
1. "Look the source, Luke!"
2. RTFM.
И всем советую то же самое. В 90% случаев сильно экономит время и нервы. :o)
_Александр_ (2002-08-09 10:17:00) [4]2 Юрий Зотов ©(09.08.02 09:59)
Не буду ничего писать о мелких деталях, с которыми я не согласен - это пустяки, по сравнению с тем, как теперь я успокоился - благодаря Вашему ответу.
Преогромное, спасибо, этот ответ - то, чего я ждал... :)
Конечно же, не стоило так всё тщательно разжёвывать(за это отдельная благодарность :)), упор в вашем ответе я поставил на "ограничений мин. размера ", а не на "mediaplayer.setdisplayrect" слова, поэтому он был откинут в сторону...
Ещё раз благодарю.
Может, кто прочитает - спасёт себе пару часов времени... :)
Юрий Зотов (2002-08-09 09:59:00) [5]> _Александр_
Если речь идет о TMediaPlayer, то Вы правы, Но сразу так и нужно было сказать, а не обижаться на весь TRect в принципе. И не мучаться 4 часа, а посмотреть код и справку. Которые проясняют вопрос за 5 минут.
Помните, я говорил:
- никто не мешает ... записывать в них и что угодно другое;
- такое ... документируется.
OK. Пытаемся выставить DisplayRect и ничего не получается. Думаем - в чем же дело, давай-ка посмотрим, а как же он выставляется? Смотрим код метода SetDisplayRect и видим, что идет посылка команды mci_Put. Думаем дальше - а что это за команда и с чем ее едят? Открываем справку API и видим: "For video-overlay devices, lpDest points to an MCI_OVLY_RECT_PARMS structure". Отлично, в той же справке смотрим эту структуру и читаем:
rc
Rectangle containing positioning information. RECT structures are handled differently in MCI than in other parts of Windows; in MCI, rc.right contains the width of the rectangle and rc.bottom contains its height.
И сразу все становится ясно.
_Александр_ (2002-08-09 09:58:00) [6]2 Alx2 © (09.08.02 09:29)
MediaPlayer1.DisplayRect < эта штука может быть и большой и маленькой... :)
У меня, всё замечательно работает, используя MediaPlayer1.DisplayRect.Right - как ширину, а MediaPlayer1.DisplayRect.Bottom - как высоту прямоугольной области!
Вот я и решил спросить совета.... что за дела?...
Alx2 (2002-08-09 09:29:00) [7]>_Александр_ (09.08.02 09:22)
Некоторые вещи не могут быть меньше какого-то ограничения. К TRect это не относится. Он может хранить любые значения. Значит ищи виноватого. Того, кто не хочет быть мелким.
_Александр_ (2002-08-09 09:28:00) [8]2 MBo © (09.08.02 09:10)
Вы, тоже абсолютно правы.
Но, опять - НО!
C канвой формы работает - просто замечательно.
Но, вот с дисплеем MediaPlayer-а - работает вышеописанным способом.
Ради интереса - попробуйте сами.
_Александр_ (2002-08-09 09:22:00) [9]2 Alx2 © (09.08.02 09:10)
Вы абсолютно правы, вот именно так,я , в начале, и думал.
Но, в результате опытов, оказалось:
при
R.Right = 110 и R.Left = 100;
(Ширина = R.Right - R.Left = 110 - 100 = 10)
Прямоугольная область имеет ширину не 10 пикселей, а 110.
Аналогичная ситуация и с высотой (R.Top = 100, R.Bottom = 110).
Вот и вопрос у меня возник в чём:
почему ширина этой прямоугольной области равна 110 а не 10 (110 -100) пикселей?
Alx2 (2002-08-09 09:10:00) [10]>_Александр_ (09.08.02 09:00)
>Ширина = R.Right - R.Left = 110 - 100 = 10
Прав.
Я перестал понимать суть вопроса. Что нужно узнать?
Ведь в этом все сказано: тип TRect обычно служит для хранения координат двух точек: левого верхнего и правого нижнего угла плоского целочисленного прямоугольника со сторонами, ориентированными по соответствующим координатным осям.
MBo (2002-08-09 09:10:00) [11]>ни о каких ограничениях и Constraints-ах я не веду речи.
поставь эксперименты:
1) R.Left := 100;
R.Top := 100;
R.Right := 110;
R.Bottom := 110;
canvas.Rectangle(r);
2) procedure TForm1.Button1Click(Sender: TObject);
var
R : TRect;
i:integer;
begin
R.Left := 100;
R.Top := 100;
R.Bottom := 300;
for i:=20 downto 1 do begin
R.Right := 100+10*i;
MP1.DisplayRect := R;
caption:=inttostr(i*10);
panel1.refresh;
sleep(300);
end;
end;
_Александр_ (2002-08-09 09:00:00) [12]
2 Alx2 © (09.08.02 08:50)
Ширина = R.Right - R.Left = 110 - 100 = 10
, или я не прав?
2 MBo © (09.08.02 08:52)
ни о каких ограничениях и Constraints-ах я не веду речи...
_Александр_ (2002-08-09 08:58:00) [13]Наверное, я сошёл с ума...
Alx2 (2002-08-09 08:53:00) [14]>Alx2 © (09.08.02 08:50)
Даже не много не так.
Дело в том, что область 10x10 понятие более общее, чем квадрат 10х10 с такими-то координатами.
MBo (2002-08-09 08:52:00) [15]_Александр_
Не стоит делать так далеко идущих выводов на основе ограничений мин. размера mediaplayer.setdisplayrect
Alx2 (2002-08-09 08:50:00) [16]>_Александр_ (09.08.02 08:42)
Странно это как-то.
Аналогично можно спросить почему 2+3 дает сумму 2 и 3, а не их произведение.
_Александр_ (2002-08-09 08:42:00) [17]2 Юрий Зотов © (09.08.02 08:26)
Может тогда объясните почему приведённый ниже фрагмент кода, задаёт прямоугольную область, точнее - квадрат с лев. верхн. углом в точке 100,100 и шириной/высотой(длиной) - 110/110, а не
область 10x10 пикселей?
var
R : TRect;
begin
R.Left := 100;
R.Top := 100;
R.Right := 110;
R.Bottom := 110;
MP1.DisplayRect := R;
end;
Пояснения:
MP1 - TMediaPlayer1;
MP1.Display := Panel1;
За начало координат принимаю верхний левый угол Панели1.
Юрий Зотов (2002-08-09 08:26:00) [18]Зря Вы 4 часа мучались, явная перетренировка получилась. Поля TRect, как правило, содержат именно то, что соответствует их английскому названию. Другое дело, что никто не мешает нам (и не только нам) записывать в них и что угодно другое - хоть ширину с высотой, хоть телефон любимой девушки. Но, к счастью, такое встречается нечасто и обычно все же документируется.
_Александр_ (2002-08-09 05:43:00) [19]Сорри - ОШИБОЧКА!
Вместо Left - читать Right (справа, правый) - совсем устал... :)
_Александр_ (2002-08-09 05:41:00) [20]Детализация:
Bottom - (низ - англ.) - по идее это слово должно употребляться для обозначения какой-либо координаты (по оси Y) нижней части какого-либо объекта, а не его ВЫСОТЫ.
Left - (левый, слева - англ.) - по идее это слово должно употребляться для обозначения какой-либо координаты (по оси X) правой части какого-либо объекта, а не его ШИРИНЫ.
:)