Форум: "Media";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
Внизкак перетащить текст Найти похожие ветки
← →
rexti (2007-04-10 15:53) [0]на Canvase выведен текст (textout()). как мышкой его переместить в другое место Canvasa?
← →
Сергей М. © (2007-04-10 16:14) [1]Никак.
← →
Fredy314 © (2007-04-10 17:11) [2]ПОчему никак
Если это своя программа можно стирать и рисовать заново. только зачем?
← →
Belorus © (2007-04-11 01:28) [3]Мышкой никак... Нужно докупать отдельное устройство по переноске GDIшных текстов... К сожалению крепление текста к поверхности монитора настолько прочное что стандартные средства просто бессильны....
← →
homm © (2007-04-11 09:41) [4]> К сожалению крепление текста к поверхности монитора настолько
> прочное что стандартные средства просто бессильны....
Текст к поверхности монитора не крепится. Опять начинаешь ахинею нести?
← →
rexti (2007-04-11 10:46) [5]огромное чувство юмора. тогда поставим вопрос так: когда на canvace нарисован какой-то объект (линия, многоугольник polyline, lineto, и тд) я могу его перетаскивать мышкой через свойство pen.mode те при наведении мышки на объект onmousedown, onmousemove, onmouseup (с перерисовкой). а как быть в этом случае с текстом ?
← →
Сергей М. © (2007-04-11 10:57) [6]
> могу его перетаскивать мышкой через свойство pen.mode
Покажи код, где ты умудряешься это делать)
← →
rexti (2007-04-11 11:15) [7]завтра покажу он на другом компе. а алгоритм такой: подводим мышку к объекту (левая кнопка ), по граничным координатам считаем что он выбран, сбрасываем координаты обекта во временный массив, меняем свойство pen.mode, при перемещении мышки каждый раз перерисовываем объект с новыми координатами (старые + дельта) и стираем там где он был раньше (старые координаты), при отпускании левой кнопки мышки рисуем еще раз и возвращаем старый pen.mode.
← →
homm © (2007-04-11 11:18) [8]> завтра покажу он на другом компе. а алгоритм такой: подводим
> мышку к объекту (левая кнопка ), по граничным координатам
> считаем что он выбран, сбрасываем координаты обекта во временный
> массив, меняем свойство pen.mode, при перемещении мышки
> каждый раз перерисовываем объект с новыми координатами (старые
> + дельта) и стираем там где он был раньше (старые координаты)
> , при отпускании левой кнопки мышки рисуем еще раз и возвращаем
> старый pen.mode.
И в чем проблема? Все то-же самое для текста слабо?
← →
antonn © (2007-04-11 11:24) [9]текст - тот же самый прямоугольник
← →
rexti (2007-04-11 11:27) [10]а как мне стереть текст по старым координатам? font.color:=clWhite ? а если перемещение идет на сложном фоне?
← →
homm © (2007-04-11 11:28) [11]> а если перемещение идет на сложном фоне?
А если перемещение линии идет на сложном фоне, у тебя нет вопросов как стереть? В чем принципиальная разница то?
← →
homm © (2007-04-11 11:29) [12]Подсказка: При движении мышы с нажатой кнопкой, нкжно посылать Invalidate, а уже в процедуре рисования отображать изменения.
← →
rexti (2007-04-11 11:30) [13]линию я рисую карандашем у которого и меняю свойство mode, а у фонта такого свойства нет
← →
rexti (2007-04-11 11:33) [14]если можно про Invalidate в коде
← →
homm © (2007-04-11 11:36) [15]Давай я тебе скажу то что ты должен был сказать мне:
Ты рисуешь карандашем со стилем XOR, и при повторном рисовании линии фон востанавливается. Теперь тебе нужно двигать текст, и ты хочешь вывести текст методом XOR, что у тебя не получается.
Что, сложно было вопрос так задать? Проще же спросить как мышкой текст двигать...
В общем не помню можно ли так текст выводить непосредственно. но точно можно извратится с получением региона нарисованого текста, залить этот регион по хору, либо воспользоватся способом в [11].
← →
homm © (2007-04-11 11:38) [16]> если можно про Invalidate в коде
procedure Image1.OnMouseMove()
begin
if Mousedown = TRUE then begin
Image1.Invalidate();
end;
end;
← →
Сергей М. © (2007-04-11 11:42) [17]
> rexti
По-моему ты занялся ерундой.
← →
rexti (2007-04-11 11:46) [18]переместить и двигать это разные вещи?
а что если я пишу так :
procedure Image1.OnMouseMove()
begin
if Mousedown then Image1.Canvas.TextOut("ddd");
end;
это не вызывает немедленной перерисовки Image1 ?
← →
homm © (2007-04-11 11:49) [19]> это не вызывает немедленной перерисовки Image1 ?
А с чего ты взял что должно?
> переместить и двигать это разные вещи?
В чем суть различий?
← →
rexti (2007-04-11 11:57) [20]почему ерундой? стоит конкретная задача оформления геолого-геофизических данных
← →
rexti (2007-04-11 12:03) [21]так ты хочешь сказать что
Image1.Canvas.LineTo(x,y);
Image1.Invalidate();
будет рисоваться, а
Image1.Canvas.LineTo(x,y);
нет ?
← →
homm © (2007-04-11 12:11) [22]Нет. В приведеном варианте как раз наоборот :)
Image1.Canvas.LineTo(x,y);
нарисует линию
Image1.Invalidate();
перерисует весь имейдж, и этой линии уже не будет.
Сходи почитай умных книжек. у тебя нет никакого понимания того как выводится графика на экран в оконных приложениях.
← →
rexti (2007-04-11 12:23) [23]если для тебя мой вопрос о графике такой простой чтож ответить нормально на него не можешь
← →
Сергей М. © (2007-04-11 12:30) [24]
> почему ерундой? стоит конкретная задача оформления геолого-
> геофизических данных
Да хоть арбузо-литейных данных))) .. Суть-то не в задаче)
Потому и ерундой, что объект должен рисовать себя сам.
Все что при этом от тебя требуется - определить св-ва каждого из объектов (в т.ч его положение на холсте) и последовательность рендеринга этих объектов.
Тогда для рендеринга всей "сцены" при изменении позиции любого из объектов достаточно скомандовать объектам отрисовать (каждый сам себя) в указанной последовательности.
← →
homm © (2007-04-11 12:32) [25]> если для тебя мой вопрос о графике такой простой чтож ответить
> нормально на него не можешь
Потому что твой подход в принцепе не верен, и ответ на него много сложнее твоего простого вопроса.
Я могу ответить, но мне хочется наставить на путь истенный :) Но вцелом достаточно прсто все описал Сергей М.
← →
rexti (2007-04-11 12:42) [26]спасибо за информацию. кое-что понял. буду пробывать.
← →
Fenik © (2007-04-11 20:51) [27]Надо в памяти битмап с фоном держать и из него обновлять измененную область.
← →
Vovan The One (2007-04-11 22:38) [28]2 homm:
>Image1.Canvas.LineTo(x,y);
нарисует линию
Image1.Invalidate();
перерисует весь имейдж, и этой линии уже не будет.
Что за бред?
>Сходи почитай умных книжек. у тебя нет никакого понимания того как выводится графика на экран в оконных приложениях.
И ты тоже.
← →
homm © (2007-04-12 00:31) [29]> [28] Vovan The One (11.04.07 22:38)
«Иногда лучше жевать» ©
← →
homm © (2007-04-12 01:09) [30]Прошу прощения, действительно оказался не прав, т.к. конретно TImage создает конкретно для себя буферную картинку, и именно ее канва, а не канва самого конролла предлагается для рисования. Для всех остальных оконных и графических контроллов, кроме TImage все нарисованное на них не в событии OnPaint стирается при первой-же перерисовке, вне зависимости от причины по которой происходит перерисовка, будь то вызов Inavlidate() или затирания другим окном.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.044 c