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

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

как перетащить текст [D6]


Страницы:   1 2

rexti ©   (2007-04-10 15:53:00) 

на Canvase выведен текст (textout()). как мышкой его переместить в другое место Canvasa?


homm   (2007-04-12 01:09:00) [1]

Прошу прощения, действительно оказался не прав, т.к. конретно TImage создает конкретно для себя буферную картинку, и именно ее канва, а не канва самого конролла предлагается для рисования. Для всех остальных оконных и графических контроллов, кроме TImage все нарисованное на них не в событии OnPaint стирается при первой-же перерисовке, вне зависимости от причины по которой происходит перерисовка, будь то вызов Inavlidate() или затирания другим окном.


homm   (2007-04-12 00:31:00) [2]

> [28] Vovan The One   (11.04.07 22:38)

«Иногда лучше жевать» ©


Vovan The One   (2007-04-11 22:38:00) [3]

2 homm:

> Image1.Canvas.LineTo(x,y);
нарисует линию
Image1.Invalidate();
перерисует весь имейдж, и этой линии уже не будет.


Что за бред?

> Сходи почитай умных книжек. у тебя нет никакого понимания того как выводится графика на экран в оконных приложениях.

И ты тоже.


Fenik   (2007-04-11 20:51:00) [4]

Надо в памяти битмап с фоном держать и из него обновлять измененную область.


rexti   (2007-04-11 12:42:00) [5]

спасибо за информацию. кое-что понял. буду пробывать.


homm   (2007-04-11 12:32:00) [6]

> если для тебя мой вопрос о графике такой простой чтож ответить
> нормально на него не можешь

Потому что твой подход в принцепе не верен, и ответ на него много сложнее твоего простого вопроса.
Я могу ответить, но мне хочется наставить на путь истенный :) Но вцелом достаточно прсто все описал Сергей М.


Сергей М.   (2007-04-11 12:30:00) [7]


> почему ерундой? стоит конкретная задача оформления геолого-
> геофизических данных


Да хоть арбузо-литейных данных))) .. Суть-то не в задаче)

Потому и ерундой, что объект должен рисовать себя сам.

Все что при этом от тебя требуется - определить св-ва каждого из объектов (в т.ч его положение на холсте) и последовательность рендеринга этих объектов.

Тогда для рендеринга всей "сцены" при изменении позиции любого из объектов достаточно скомандовать объектам отрисовать (каждый сам себя) в указанной последовательности.


rexti   (2007-04-11 12:23:00) [8]

если для тебя мой вопрос о графике такой простой чтож ответить нормально на него не можешь


homm   (2007-04-11 12:11:00) [9]

Нет. В приведеном варианте как раз наоборот :)

Image1.Canvas.LineTo(x,y);
нарисует линию
Image1.Invalidate();
перерисует весь имейдж, и этой линии уже не будет.

Сходи почитай умных книжек. у тебя нет никакого понимания того как выводится графика на экран в оконных приложениях.


rexti   (2007-04-11 12:03:00) [10]

так ты хочешь сказать что
Image1.Canvas.LineTo(x,y);
Image1.Invalidate();
будет рисоваться, а
Image1.Canvas.LineTo(x,y);
нет ?


rexti   (2007-04-11 11:57:00) [11]

почему ерундой? стоит конкретная задача оформления геолого-геофизических данных


homm   (2007-04-11 11:49:00) [12]

> это не вызывает немедленной перерисовки Image1 ?

А с чего ты взял что должно?


> переместить и двигать это разные вещи?

В чем суть различий?


rexti   (2007-04-11 11:46:00) [13]

переместить и двигать это разные вещи?
а что если я пишу так :
procedure Image1.OnMouseMove()
begin
 if Mousedown then Image1.Canvas.TextOut('ddd');
end;
это не вызывает немедленной перерисовки Image1 ?


Сергей М.   (2007-04-11 11:42:00) [14]


> rexti


По-моему ты занялся ерундой.


homm   (2007-04-11 11:38:00) [15]

> если можно про Invalidate в коде

procedure Image1.OnMouseMove()
begin
if Mousedown = TRUE then begin
 Image1.Invalidate();
end;
end;


homm   (2007-04-11 11:36:00) [16]

Давай я тебе скажу то что ты должен был сказать мне:
Ты рисуешь карандашем со стилем XOR, и при повторном рисовании линии фон востанавливается. Теперь тебе нужно двигать текст, и ты хочешь вывести текст методом XOR, что у тебя не получается.

Что, сложно было вопрос так задать? Проще же спросить как мышкой текст двигать...

В общем не помню можно ли так текст выводить непосредственно. но точно можно извратится с получением региона нарисованого текста, залить этот регион по хору, либо воспользоватся способом в [11].


rexti   (2007-04-11 11:33:00) [17]

если можно про Invalidate в коде


rexti   (2007-04-11 11:30:00) [18]

линию я рисую карандашем у которого и меняю свойство mode, а у фонта такого свойства нет


homm   (2007-04-11 11:29:00) [19]

Подсказка: При движении мышы с нажатой кнопкой, нкжно посылать Invalidate, а уже в процедуре рисования отображать изменения.


homm   (2007-04-11 11:28:00) [20]

> а если перемещение идет на сложном фоне?

А если перемещение линии идет на сложном фоне, у тебя нет вопросов как стереть? В чем принципиальная разница то?


Страницы:   1 2

Наверх

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