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

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

Кому СПАСИБО говорить? [D6, Win95/98]


Страницы:   1 2

_Александр_ ©   (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) правой части какого-либо объекта, а не его ШИРИНЫ.

:)


Страницы:   1 2

Наверх

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