Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
ВнизКому СПАСИБО говорить? Найти похожие ветки
← →
_Александр_ (2002-08-09 04:35) [0]Объясните, мне, балбесу, пожалуйста, если можно по-русски, описания типа TRect - 4 часа промучался, пока до меня не дошло, что поля Bottom и Left - это ширина и высота экземпляра этого типа, а не Bottom и Left (Yниж Xправ) региона. Почему бы их так сразу и не назвать - Height и Width соотв.
В хелпе на писано:
ширина региона = Right - Left
высота = Bottom - Top!
Ну в чём я не прав? Разъясните, пожалуйста...
Ну очень обидно потерять столько времени из-за глупых мелочей, я уж чуть ли с ума не начал сходить, разбираясь, почему не работает..
Заранее благодарен...
← →
Хм.. (2002-08-09 04:46) [1]Врожденная вежливость не позволяет РАЗЪЯСНИТЬ.
Но прав именно хелп, а не ВЫ.
Подробности - после детализации вопроса.
← →
_Александр_ (2002-08-09 05:41) [2]Детализация:
Bottom - (низ - англ.) - по идее это слово должно употребляться для обозначения какой-либо координаты (по оси Y) нижней части какого-либо объекта, а не его ВЫСОТЫ.
Left - (левый, слева - англ.) - по идее это слово должно употребляться для обозначения какой-либо координаты (по оси X) правой части какого-либо объекта, а не его ШИРИНЫ.
:)
← →
_Александр_ (2002-08-09 05:43) [3]Сорри - ОШИБОЧКА!
Вместо Left - читать Right (справа, правый) - совсем устал... :)
← →
Юрий Зотов (2002-08-09 08:26) [4]Зря Вы 4 часа мучались, явная перетренировка получилась. Поля TRect, как правило, содержат именно то, что соответствует их английскому названию. Другое дело, что никто не мешает нам (и не только нам) записывать в них и что угодно другое - хоть ширину с высотой, хоть телефон любимой девушки. Но, к счастью, такое встречается нечасто и обычно все же документируется.
← →
_Александр_ (2002-08-09 08:42) [5]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.
← →
Alx2 (2002-08-09 08:50) [6]>_Александр_ (09.08.02 08:42)
Странно это как-то.
Аналогично можно спросить почему 2+3 дает сумму 2 и 3, а не их произведение.
← →
MBo (2002-08-09 08:52) [7]_Александр_
Не стоит делать так далеко идущих выводов на основе ограничений мин. размера mediaplayer.setdisplayrect
← →
Alx2 (2002-08-09 08:53) [8]>Alx2 © (09.08.02 08:50)
Даже не много не так.
Дело в том, что область 10x10 понятие более общее, чем квадрат 10х10 с такими-то координатами.
← →
_Александр_ (2002-08-09 08:58) [9]Наверное, я сошёл с ума...
← →
_Александр_ (2002-08-09 09:00) [10]
2 Alx2 © (09.08.02 08:50)
Ширина = R.Right - R.Left = 110 - 100 = 10
, или я не прав?
2 MBo © (09.08.02 08:52)
ни о каких ограничениях и Constraints-ах я не веду речи...
← →
Alx2 (2002-08-09 09:10) [11]>_Александр_ (09.08.02 09:00)
>Ширина = R.Right - R.Left = 110 - 100 = 10
Прав.
Я перестал понимать суть вопроса. Что нужно узнать?
Ведь в этом все сказано: тип TRect обычно служит для хранения координат двух точек: левого верхнего и правого нижнего угла плоского целочисленного прямоугольника со сторонами, ориентированными по соответствующим координатным осям.
← →
MBo (2002-08-09 09:10) [12]>ни о каких ограничениях и 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:22) [13]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) пикселей?
← →
_Александр_ (2002-08-09 09:28) [14]2 MBo © (09.08.02 09:10)
Вы, тоже абсолютно правы.
Но, опять - НО!
C канвой формы работает - просто замечательно.
Но, вот с дисплеем MediaPlayer-а - работает вышеописанным способом.
Ради интереса - попробуйте сами.
← →
Alx2 (2002-08-09 09:29) [15]>_Александр_ (09.08.02 09:22)
Некоторые вещи не могут быть меньше какого-то ограничения. К TRect это не относится. Он может хранить любые значения. Значит ищи виноватого. Того, кто не хочет быть мелким.
← →
_Александр_ (2002-08-09 09:58) [16]2 Alx2 © (09.08.02 09:29)
MediaPlayer1.DisplayRect < эта штука может быть и большой и маленькой... :)
У меня, всё замечательно работает, используя MediaPlayer1.DisplayRect.Right - как ширину, а MediaPlayer1.DisplayRect.Bottom - как высоту прямоугольной области!
Вот я и решил спросить совета.... что за дела?...
← →
Юрий Зотов (2002-08-09 09:59) [17]> _Александр_
Если речь идет о 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 10:17) [18]2 Юрий Зотов © (09.08.02 09:59)
Не буду ничего писать о мелких деталях, с которыми я не согласен - это пустяки, по сравнению с тем, как теперь я успокоился - благодаря Вашему ответу.
Преогромное, спасибо, этот ответ - то, чего я ждал... :)
Конечно же, не стоило так всё тщательно разжёвывать(за это отдельная благодарность :)), упор в вашем ответе я поставил на "ограничений мин. размера ", а не на "mediaplayer.setdisplayrect" слова, поэтому он был откинут в сторону...
Ещё раз благодарю.
Может, кто прочитает - спасёт себе пару часов времени... :)
← →
Юрий Зотов (2002-08-09 10:27) [19]Дык... про ограничения я и не говорил, вроде бы. Хотя не исключено, что и они тоже существуют.
Вообще, при решении проблем я стараюсь руководствоваться двумя правилами:
1. "Look the source, Luke!"
2. RTFM.
И всем советую то же самое. В 90% случаев сильно экономит время и нервы. :o)
← →
_Александр_ (2002-08-09 10:32) [20]Дык, действительно не говорил. :)
- НЕ туда всмотрелся, как никак 26й час на работе...
← →
Юрий Зотов (2002-08-09 10:42) [21]Точно перетренировка. Бывает.
Домой... и спать... спать... спать...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c