![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перетаскивание имаджев соединёных линией [D7, XP]
b86 © (2010-09-16 09:38:00)Здравствуйте. У меня такая задача, есть два имеджа. Надо что бы в процессе перетаскивания между ними была нарисована линия, т.е. если имейджы дальше друг от друга - линия длинее, ближе - линия короче. Подскажите, пожалуйста.
Anatoly Podgoretsky (2010-09-16 12:44:00) [1]> b86 (16.09.2010 12:23:29) [29]
Резиновые линии не круть, а элементарщина.
Ega23 (2010-09-16 12:28:00) [2]
> Смотрю вы сегодня неудержимы.
Я что-то не так сказал? Или неправильно?
> Попробовал Ваш совет из [12]. Линия перерисовывается, а
> не тянется. То ли я дурак, то ли лыжи не едут.
Есть некий объект. У него есть текущий размер и текущие координаты. Когда ты этот объект "тащишь", то меняются его текущие координаты.
Дальше. К объекту "ведут стрелочки". Данный объект знает, где какая стрелка у него заканчивается (относительно его координат).
Ну а дальше всё просто. Меняются координаты объекта. Он сначала "стирает себя" по старым координатам, стирает все свои линии по старым координатам (а стереть - это прорисовать их цветом фона). Потом рисует всё по новым.
Можно немного иначе. Заливаем весь рисунок фоном и перерисовываем его опять же весь.
Можно ещё иначе. Создаём виртуальный битмап, рисуем на нём что надо, а потом тупо копируем изображение на канву (что, собственно, DoubleBuffered и делает).
When DoubleBuffered is false, the windowed control paints itself directly to the window. When DoubleBuffered is true, the windowed control paints itself to an in-memory bitmap that is then used to paint the window. Double buffering reduces the amount of flicker when the control repaints, but is more memory intensive.
b86 (2010-09-16 12:23:00) [3]Круть. Спасибо.
Amoeba_ (2010-09-16 12:18:00) [4]
> b86 (16.09.10 12:14) [26]
Может это наведет на мысль?
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=94
Anatoly Podgoretsky (2010-09-16 12:16:00) [5]В справке, по методам канвы
b86 (2010-09-16 12:14:00) [6]
> Не поверишь: в справке.
Смотрю вы сегодня неудержимы.
Попробовал Ваш совет из [12]. Линия перерисовывается, а не тянется. То ли я дурак, то ли лыжи не едут.
Ваш вариант?
Ega23 (2010-09-16 12:02:00) [7]
> Где посмотреть про XOR?
Не поверишь: в справке.
b86 (2010-09-16 12:00:00) [8]Дааа! Резиновые линии. Где посмотреть про XOR?
Anatoly Podgoretsky (2010-09-16 11:58:00) [9]Тебе нужны резиновые линии, а они делаются не просто, а очень просто.
Двойное рисование с XOR
Ega23 (2010-09-16 11:48:00) [10]
> по поводу LMD. Раздел называется для начинающих, не так ли?
> Чванливые зануды MD.
Поясняю. Тебе сейчас товарищ оказал медвежью услугу. Он тебе сказал, что надо делать. И таки да, работать оно будет. И ты это весело и радостно запомнишь и начнёшь повсеместно использовать.
А потом очень удивишься, почему собеседование не удаётся нигде пройти.
Так вот. Уж коли взялся отвечать в "Начинающим" - будь любезен отвечать правильно. Либо не отвечай совсем, если не понимаешь.
Ega23 (2010-09-16 11:45:00) [11]Собственно, именно по этой причине и распространено мнение, что Delphi - батонокидательство и нормальные люди на нём не пишут.
b86 (2010-09-16 11:44:00) [12]по поводу LMD. Раздел называется для начинающих, не так ли?
Чванливые зануды MD.
Ega23 (2010-09-16 11:39:00) [13]
> Спорить не буду. Смысла просто нет никакого этим заниматься.
> Если это для вас пока сложновато - можно строить линию спомощью
> двух TShape - сначала горизонтальный а потом вертикальный
> отрезки, меняя их Left, Top, Width, Height.
LMD.
И. Павел (2010-09-16 11:38:00) [14]Если это для вас пока сложновато- можно строить линию спомощью
двух TShape - сначала горизонтальный а потом вертикальный
отрезки, меняя их Left, Top, Width, Height.
b86 (2010-09-16 11:38:00) [15]И. Павел, спасибо. Буду стараться.
И. Павел (2010-09-16 11:37:00) [16]> [13] Ega23 ©
Вот тут тоже люди за каждый байт бьются: http://10k.aneventapart.com/Uploads/83/#
Спорить не буду. Смысла просто нет никакого этим заниматься.
Ega23 (2010-09-16 11:37:00) [17]
> Если это для вас пока сложновато - можно строить линию спомощью
> двух TShape - сначала горизонтальный а потом вертикальный
> отрезки, меняя их Left, Top, Width, Height.
мама, роди меня обратно....
И. Павел (2010-09-16 11:34:00) [18]> Мой вопрос, как сделать так что бы линии тянулись или сокращались
> при перетаскивание?
см [1]. Этот метод позволяет нарисовать на канве (любой - например формы) линию.
Автоматически, спомощью стандартных компонентов, задачу вроде бы не сделать.
Чтобы тянуть/сокращать линию, нужно самостоятельно расчитывать координаты линии и рисовать ее в OnPaint канвы формы (к примеру, но в принципе можно где угодно - лишь бы была канва - объект TCanvas).
Если это для вас пока сложновато - можно строить линию спомощью двух TShape - сначала горизонтальный а потом вертикальный отрезки, меняя их Left, Top, Width, Height.
Вы начните. А как будут сложности - спрашивайте. А то пока мне, например, непонятно, что вам непонятно :)
Ega23 (2010-09-16 11:34:00) [19]
> Ну я и ответил в [6].
> Если нужна скорость и минимальный объем, то в принципе ООП
> это вообще лишнее.
> C TImage можно работать на форме в DesignTime, этим он удобен.
> Если эта возможность не нужна, то конечно его использовать
> нет смысла.
Тут дело такое. Если ты внимательно посмотришь, то эта конфа - для начинающих. А ты советы даёшь мягко говоря весьма чудесатые.
А начинающий без понятия, чудесатый ему совет дали, или нет. Он и загрузку файла как в [9] запросто сделает (а чо, работает же?).
Аккуратнее надо быть, коль отвечать берёшься.
Ega23 (2010-09-16 11:31:00) [20]
> Мой вопрос, как сделать так что бы линии тянулись или сокращались
> при перетаскивание? как сделать, что бы было видно именно
> её изменения в процессе перетаскивания?
1. Отрисовать эту линию по старым координатам цветом фона.
2. Нарисовать линию по новым координатам своим цветом.
Выполнять пункты 1 и 2 в OnMouseMove