![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как перетащить текст [D6]
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]> а если перемещение идет на сложном фоне?
А если перемещение линии идет на сложном фоне, у тебя нет вопросов как стереть? В чем принципиальная разница то?