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

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

перетаскивание имаджев соединёных линией [D7, XP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

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