![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Unconnected |
![]()
Сообщение
#1
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Привет всем.
На форме имеются созданные вручную TImage'и. Каждому я вручную присвоил необходимые события. Собственно, нужно сделать возможность изменения размеров компонента, чтобы при подводе курсора к границе (но не к углу!) имаджа курсор менялся на обоюдоострую стрелочку, и можно было растягивать компонент. Вот что получилось: Procedure TLine_Road.onMouseDown(Sender: TObject; Button: TMouseButton; В процедуре OnMove я уже сделал перетаскивание компонента, работает. А вот чуть выше, в этой процедуре - попытка сделать ресайз, но там пробно только для верхней границы. Какое-то странное поведение: имадж создаётся на панели с координатами (1,1), уже с картинкой. Если его не двигать, то при подводе курсора к верхней границе, он, курсор, меняет, как и должно быть, форму, но ничего не меняет. А если имадж подвинуть ниже, то и вовсе курсор не меняется. Подвинули на исходную - меняется. Чертовщина, хотя сравнивал координаты - вроде правильно всё. Сообщение отредактировано: Unconnected - 22.02.2010 20:26 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
OnMove - это что? Какое сообщение обрабатывается?
|
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
OnMouseMove, и с остальными так же.
И ещё, у имаджей свойства autosize и stretch стоят в true. Сообщение отредактировано: Unconnected - 22.02.2010 20:56 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А собственно, с чего ты решил, что TImage.OnMouseMove дает тебе X, Y, как-то относящиеся к внешним компонентам? X, Y как раз изменяются 1 .. m.Width, 1 .. m.Height соответственно. Если мыша вне контрола - событие просто не наступает. Это по поводу твоего удивления
Цитата А если имадж подвинуть ниже, то и вовсе курсор не меняется. Теперь понятно, почему?Я бы решал задачу вот так: procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;(для большей правдоподобности курсор устанавливается в Hand, когда можно перетаскивать изображение) |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Код интересный, спасибо, повожусь с ним
![]() -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
![]()
Сообщение
#6
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Во дела. Ресайз не работал, пока я не отключил AutoSize! Но, когда я отключил AutoSize, то картинка сразу потолстела и стала некрасивой (у меня ещё strength включён). Можно ли это как-то обойти, не запрашивая размеры файла-картинки и не забивая их вручную в имадж при его создании?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Proportional в True устанавливать не пробовал?
![]() |
Unconnected |
![]()
Сообщение
#8
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
В итоге я сделал массивом из размеров, они мне ещё понадобятся.. Теперь с именно ресайзом косяк:
Procedure TLine_Road.OnMove(Sender: TObject; Shift: TShiftState; X, Сделал экспериментально только для растягивания вниз. Так-то механизм я понял, но вот этот код работает только когда растягиваешь медленно-медленно... -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Хочешь, покажу тебе "уличную магию"?
![]() Выносишь тип и переменную за пределы обработчика события, и чуть-чуть перегруппируешь операторы в самом обработчике: type, и теперь оно работает (только на увеличение, однако; у тебя же независимо от направления движения мыши высота изображения увеличивается) при любой скорости перемещения мыши. |
Unconnected |
![]()
Сообщение
#10
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Уже лучше стало, уличная магия заключалась в " if not down then begin" (помимо глобализации типа и переменной)?
![]() Только вот со скоростью мышки всё равно не так получается. Если веду со средней скоростью - нормально, а чуть быстрее - курсор улетает с нижней границы. В принципе, ресайз и так состоится, но некрасиво как-то) небольшое видео прикрепил. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Попробуй сделать так, чтоб мыша вылезла за пределы контрола вот с таким Case-ом:
case myStatus of ![]() |
Rian |
![]()
Сообщение
#12
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: ![]() ![]() ![]() |
вот такое тож работает, правда курсоры не делал
-------------------- Objective-C, Unity3d
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата вот такое тож работает Работать и работать правильно - это разные вещи... Твой код - работает...Ибо при попытке растянуть картинку за нижнюю границу, она начинает увеличиваться с первой космической скоростью при малейшем движении мыши вниз... Исправляй. Добавлено через 4 мин. P.S. Кстати, а вот это: Цитата else |
Client |
![]()
Сообщение
#14
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Набрал код Rian'а (ренейм?
![]() ![]() Цитата к чему относится Методом трассировки выяснил, что этот код отвечает за перемещение имеджа при нажатии мыши в области, не включающую в себя рамку ![]() PtInRect(Rect(2, 2, m.Width - 2, m.Height - 2), Point(X, Y))Это "point in rect" ? т.е. область не влючая рамку (2 пикселя) ? Добавлено через 2 мин. Цитата Хочешь, покажу тебе "уличную магию"? Не-не-не, только не это, Дэвид Блэйн ![]() |
Rian |
![]()
Сообщение
#15
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: ![]() ![]() ![]() |
Набрал код Rian'а (ренейм? ![]() ![]() моргание убирается через doublebufferd:=true; ![]() Добавлено через 12 мин. Работать и работать правильно - это разные вещи... Твой код - работает... Ибо при попытке растянуть картинку за нижнюю границу, она начинает увеличиваться с первой космической скоростью при малейшем движении мыши вниз... Исправляй. Добавлено через 4 мин. P.S. Кстати, а вот это: к чему относится? Это был первый вопрос на засыпку. А второй - как ты думаешь, когда отработает изменение Image1.Top? При каких условиях? убегает с космической скоростью?... не заметил.... последняя проверка перемещает всю картинку image1.top отработает если y<5 и... есть флаг нажатия ЗЫ. я уже боюсь чего это volvo опять загадает ![]() Прикрепленные файлы ![]() -------------------- Objective-C, Unity3d
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата скачков не заметил Я про скачки не говорил я говорил про непропорционально высокую по сравнению со скоростью перемещения мыши скорость:![]() Видео в формате XViD, если что... Это что, мне только кажется, или так и должно быть? Тогда я больше в эту тему не захожу, вы скажите, если я тут мешаю ... Добавлено через 1 мин. Цитата последняя проверка перемещает всю картинку Последняя проверка записана некорректно - Else относится только к ПРЕДпоследней проверке, если ты не заметил. Операторных скобок не было замечено в твоем коде. Или это опять я не прав, а у тебя все шоколадно? |
Rian |
![]()
Сообщение
#17
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: ![]() ![]() ![]() |
Это что, мне только кажется, или так и должно быть? Тогда я больше в эту тему не захожу, вы скажите, если я тут мешаю ... не не не ни в коем случае! может в свойствах картинки что-то другое? но у меня код таскает, все как положено: все границы и вся картинка Else относится к case а что не так? Сообщение отредактировано: Rian - 24.02.2010 18:22 -------------------- Objective-C, Unity3d
|
Client |
![]()
Сообщение
#18
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата если я тут мешаю Ну с чего такие мысли? тебе тут все радыСообщение отредактировано: Client - 24.02.2010 18:49 |
Unconnected |
![]()
Сообщение
#19
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Если кому интересно, вот немного модифицированный код volvo, немного расширена область "рамки" для ресайза, и разделение на ресайз вверх и вниз (право-лево мне не надо):
TMyStatus = (stMoving, stResizing);sorry за мой английский) Сообщение отредактировано: Unconnected - 24.02.2010 23:02 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Гость |
![]()
Сообщение
#20
|
Гость ![]() |
да кстати а чем видео делаете?
|
![]() ![]() |
![]() |
Текстовая версия | 11.07.2025 5:55 |