Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.19;
Скачать: CL | DM;

Вниз

Кому СПАСИБО говорить?   Найти похожие ветки 

 
_Александр_   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
14-60844
Snake2000
2002-07-14 03:08
2002.08.19
Помогите геймеру


14-60824
Alx2
2002-07-24 09:49
2002.08.19
На Землю летит двухкилометровый астероид


4-60910
MARcoDEN
2002-06-10 20:28
2002.08.19
Как узнать хэндл другой программы?


1-60749
TAN_K
2002-08-07 13:36
2002.08.19
Работа с ComboBox - чайник - 1 программа в Delphi


1-60576
V.Turecky
2002-08-07 16:30
2002.08.19
CreateProcess!!!