Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.093 c
15-1201902190
Kostafey
2008-02-02 00:43
2008.03.09
С днем рождения ! 2 февраля


2-1202795323
Mishenka
2008-02-12 08:48
2008.03.09
Как указать размеры картинки вставляемой в документ Word?


15-1201944617
Андрей
2008-02-02 12:30
2008.03.09
Браузер файлов на диске


2-1202803897
abhtr
2008-02-12 11:11
2008.03.09
2 TMainMenu на одной форме?


15-1202127812
xayam
2008-02-04 15:23
2008.03.09
Проект "Россия"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский