IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Масштабирование компонентов
Unconnected
сообщение 22.02.2010 20:24
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

На форме имеются созданные вручную TImage'и. Каждому я вручную присвоил необходимые события. Собственно, нужно сделать возможность изменения размеров компонента, чтобы при подводе курсора к границе (но не к углу!) имаджа курсор менялся на обоюдоострую стрелочку, и можно было растягивать компонент. Вот что получилось:

Procedure TLine_Road.onMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
xmouse:=x;ymouse:=y;
down:=true;
end;

Procedure TLine_Road.onMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
down:=false;
end;

Procedure TLine_Road.OnMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var m:TImage;
begin
m:=(sender as TImage);
if (x>m.left) and (x<m.left+m.width) and ((y=m.top) or (y=m.top+m.height)) then
begin
m.Cursor:=crSizeNS;
if down then begin
if y=m.top then begin
m.height:=m.height+(y-m.top);
m.Top:=y-1;
end;
end;
end else
if down then
begin
m.Cursor:=crDefault;
m.left:=m.left+(x-xmouse);
m.top:=m.top+(y-ymouse);
end;
end;


В процедуре OnMove я уже сделал перетаскивание компонента, работает. А вот чуть выше, в этой процедуре - попытка сделать ресайз, но там пробно только для верхней границы. Какое-то странное поведение: имадж создаётся на панели с координатами (1,1), уже с картинкой. Если его не двигать, то при подводе курсора к верхней границе, он, курсор, меняет, как и должно быть, форму, но ничего не меняет. А если имадж подвинуть ниже, то и вовсе курсор не меняется. Подвинули на исходную - меняется. Чертовщина, хотя сравнивал координаты - вроде правильно всё.

Сообщение отредактировано: Unconnected - 22.02.2010 20:26


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Client
сообщение 24.02.2010 16:43
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Набрал код Rian'а (ренейм? smile.gif ) и скачков не заметил. Правда, морагние есть небольшое smile.gif
Цитата
к чему относится
Методом трассировки выяснил, что этот код отвечает за перемещение имеджа при нажатии мыши в области, не включающую в себя рамку smile.gif
PtInRect(Rect(2, 2,  m.Width - 2, m.Height - 2), Point(X, Y))
Это "point in rect" ? т.е. область не влючая рамку (2 пикселя) ?

Добавлено через 2 мин.
Цитата
Хочешь, покажу тебе "уличную магию"?
Не-не-не, только не это, Дэвид Блэйн lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rian
сообщение 24.02.2010 17:40
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Цитата(Client @ 24.02.2010 15:43) *

Набрал код Rian'а (ренейм? smile.gif ) и скачков не заметил. Правда, морагние есть небольшое smile.gif

моргание убирается через
doublebufferd:=true;

yes2.gif ренейм) не может же первый придуманный ник быть вечным....

Добавлено через 12 мин.
Цитата(volvo @ 24.02.2010 14:06) *

Работать и работать правильно - это разные вещи... Твой код - работает...

Ибо при попытке растянуть картинку за нижнюю границу, она начинает увеличиваться с первой космической скоростью при малейшем движении мыши вниз... Исправляй.

Добавлено через 4 мин.
P.S. Кстати, а вот это:
к чему относится? Это был первый вопрос на засыпку. А второй - как ты думаешь, когда отработает изменение Image1.Top? При каких условиях?

убегает с космической скоростью?... не заметил....

последняя проверка перемещает всю картинку

image1.top отработает если y<5 и... есть флаг нажатия

ЗЫ. я уже боюсь чего это volvo опять загадает blink.gif


Прикрепленные файлы
Прикрепленный файл  resize.rar ( 220.31 килобайт ) Кол-во скачиваний: 130


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Unconnected   Масштабирование компонентов   22.02.2010 20:24
volvo   OnMove - это что? Какое сообщение обрабатывается?   22.02.2010 20:41
Unconnected   OnMouseMove, и с остальными так же. И ещё, у имад...   22.02.2010 20:55
volvo   А собственно, с чего ты решил, что TImage.OnMouseM...   22.02.2010 21:42
Unconnected   Код интересный, спасибо, повожусь с ним :)   22.02.2010 21:58
Unconnected   Во дела. Ресайз не работал, пока я не отключил Aut...   23.02.2010 0:31
volvo   Proportional в True устанавливать не пробовал? :)   23.02.2010 1:22
Unconnected   В итоге я сделал массивом из размеров, они мне ещё...   23.02.2010 16:25
volvo   Хочешь, покажу тебе "уличную магию"? :)...   23.02.2010 17:40
Unconnected   Уже лучше стало, уличная магия заключалась в ...   23.02.2010 21:50
volvo   Попробуй сделать так, чтоб мыша вылезла за пределы...   24.02.2010 0:04
Rian   вот такое тож работает, правда курсоры не делал ...   24.02.2010 13:40
volvo   Работать и работать правильно - это разные вещи......   24.02.2010 15:06
Client   Набрал код Rian'а (ренейм? :) ) и скачков не ...   24.02.2010 16:43
Rian   Набрал код Rian'а (ренейм? :) ) и скачков не...   24.02.2010 17:40
volvo   Я про скачки не говорил я говорил про непропорцион...   24.02.2010 18:02
Rian   Это что, мне только кажется, или так и должно быт...   24.02.2010 18:20
Client   Ну с чего такие мысли? тебе тут все рады   24.02.2010 18:47
Unconnected   Если кому интересно, вот немного модифицированный ...   24.02.2010 22:10
Гость   да кстати а чем видео делаете?   25.02.2010 9:22
volvo   Ну, это кто чем... Я - вот этим: http://camstudio....   25.02.2010 10:39


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 11.07.2025 4:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"