Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 26.10.2011
Сообщений: 99

Запомнить предыдущее положение курсора и нарисовать линию

12.11.2012, 23:01. Показов 2532. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Смысл в том,что за курсором рисуется линия(перемещается) одного цвета. а мне нужно что после того как я переместил курсор в другое положение на старом месте нарисовалась линия цвета формы( т.е. стерлась). для этого мне нужно запомнить предыдущие положение. не могу сообразить как нарисовать вторую линию

C#
1
g.DrawLine(pen, PointsList[PointsList.Count - 1], e.Location);//первая линия
C#
1
2
oldCursor.X = e.X;//Запоминаем горизонтальную 
oldCursor.Y = e.Y;//и вертикальную координаты курсора
а вот какие координаты задать второй линии не соображу
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2012, 23:01
Ответы с готовыми решениями:

Запомнить положение знаков препинания в строке string
Здравствуйте. Дана строка string. Нужно неким образом запомнить положение знаков препинания в строке. Желательно, после какого по счету...

Запомнить положение и размеры всех конролов на форме
Собственно есть базовый класс SettProg, который содержит список состоящий из одинаковых экземпляров класса ContrInfo, который содержит...

Запомнить и записать позицию курсора
Всем привет. Очень простенький вопрос.Как установить позицию курсора ? Я получаю его так int pos = HIWORD(SendMessage(hEdit, EM_GETSEL,...

8
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
13.11.2012, 05:01
Мб поможет мой мини гайд
1. Создадим класс ColoredLine, для того, что бы в дальнейшем запоминать нарисованные линии
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ColoredLine
    {
        public int Previous_MouseMoveXF, Previous_MouseMoveYF, Previous_MouseMoveXT, Previous_MouseMoveYT;
        public Color colorOfLine;
 
        public ColoredLine(int fx,int fy,int tx,int ty,Color _color)
        {
            Previous_MouseMoveXF = fx;
            Previous_MouseMoveYF = fy;
            Previous_MouseMoveXT = tx;
            Previous_MouseMoveYT = ty;
            colorOfLine = _color;
        }
    }

2.Создадим переменные в форме
Кликните здесь для просмотра всего текста

C#
1
2
3
4
int x_MouseDown, y_MouseDown;//положение курсора при нажатии на клавишу мыши будет записываться в эти переменные
        bool OffOn;//состояние
        Pen myPen = new Pen(Color.Red, 3);//цвет красный, 3 пикселя - ширина линии
        List<ColoredLine> ListOfLines = new List<ColoredLine>();//список цветных линий

3.Создадим обытие mouseDown для формы
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            //в момент нажатия кнопки мыши:
            x_MouseDown = e.X;//Определяем координаты "x" и "y" указателя мыши
 
            y_MouseDown = e.Y;
            //Изменяем значение OffOn на противоположное:
 
            OffOn = true;
        }

4. Создадим событие mouseMove
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics g = this.CreateGraphics();
 
            if (OffOn == true)
            {
                g.Clear(Color.Transparent);//clear all, иначе будет много линий от сохранившейся точки
                DrawPreviousLines();//рисуем все линии нашего списка в форме
                g.DrawLine(myPen, x_MouseDown, y_MouseDown, e.X, e.Y);//x_MouseMove, y_MouseMove);
            }
        }

5.Создадим событие MouseUp для нашей формы
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            Random r = new Random();//каждая предыдущая линия получит уникальный цвет
            ListOfLines.Add( new ColoredLine(x_MouseDown, y_MouseDown, e.X, e.Y, Color.FromArgb(r.Next(255),r.Next(255),r.Next(255),r.Next(255)) ) );//в список нарисованных линий добавим новую
            OffOn = false;
        }

6. Добавим метод, который рисует все линии, которые были нарисованы до текущей
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
private void DrawPreviousLines()
        {
            Graphics g = this.CreateGraphics();
            foreach (ColoredLine line in ListOfLines)//рисуем все элементы списка.
            {
                g.DrawLine(new Pen(line.colorOfLine), line.Previous_MouseMoveXF, line.Previous_MouseMoveYF, line.Previous_MouseMoveXT, line.Previous_MouseMoveYT);
            }
        }

7. Если не понятно, скачиваем робочий проект.
8. Результат выполнения программы в прикрепленных файлах.
9. Всем спокойной ночи
Миниатюры
Запомнить предыдущее положение курсора и нарисовать линию  
Вложения
Тип файла: 7z Рисуем линию.7z (24.5 Кб, 29 просмотров)
1
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
13.11.2012, 05:10
Заранее извенюсь перед более опытными программистами за быдло-код
0
1 / 1 / 1
Регистрация: 26.10.2011
Сообщений: 99
13.11.2012, 13:14  [ТС]
я боюсь для моей программы не совсем подойдет.

там заместо рефоешь в режиме ribbon нужно закрашивать рисуемую линию другой. как то попроще бы и менее громозко сделать бы)
Вложения
Тип файла: rar резинка.rar (75.8 Кб, 4 просмотров)
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
13.11.2012, 16:10
Цитата Сообщение от Goal Посмотреть сообщение
C#
1
List<ColoredLine> ListOfLines = new List<ColoredLine>();//список цветных линий
А зачем список линий? они же намертво рисуются.
Разве для того что б "букву" перетащить.
0
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
14.11.2012, 00:22
Цитата Сообщение от Noob.net Посмотреть сообщение
А зачем список линий? они же намертво рисуются.
Разве для того что б "букву" перетащить.
и тебе привет попробуй скомпилировать то что я кинул, только в этом методе забери две строчки
C#
1
2
3
4
5
6
7
8
9
10
11
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics g = this.CreateGraphics();
 
            if (OffOn == true)
            {
                //g.Clear(Color.Transparent);//clear all, иначе будет много линий от сохранившейся точки
                //DrawPreviousLines();//рисуем все линии нашего списка в форме
                g.DrawLine(myPen, x_MouseDown, y_MouseDown, e.X, e.Y);//x_MouseMove, y_MouseMove);
            }
        }
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
14.11.2012, 01:53
C#
1
Graphics g1 = Graphics.FromImage(Btmp);
Я в своем маленьком б*ло пейнте использовал 2 битмапа.
Первый как черновик,на котором рисуем фигуру,//эффект растягивания прямоугольника
а второй - чистовик на который заносим нарисованную фигуру.
Мне кажется это более правильно.

p.s. Раньше был удивлен,что стирание фигур - это рисование поверх нее)
0
1 / 1 / 1
Регистрация: 26.10.2011
Сообщений: 99
14.11.2012, 12:29  [ТС]
C#
1
2
3
4
5
6
                        oldCursor.X = e.X;//Запоминаем горизонтальную 
                        oldCursor.Y = e.Y;//и вертикальную координаты курсора
                        g.DrawLine(pn, PointsList[PointsList.Count - 1], oldCursor1);
                        oldCursor1.X = e.X;//Запоминаем горизонтальную 
                        oldCursor1.Y = e.Y;//и вертикальную координаты курсора
                        g.DrawLine(pen, PointsList[PointsList.Count - 1], oldCursor);
так сделал. единственное что уже нарисованные линии стираются
0
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
15.11.2012, 01:49
используй мой вариант, там они запоминаються
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2012, 01:49
Помогаю со студенческими работами здесь

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

положение курсора
как мне отловить наведение мыши на определённую часть формы (например картинку7) есть вариант Option Explicit Private Declare...

Положение курсора в с++
Как получить координаты позиции каретки(текстового курсора) в с++? Мне очень надо записать эти координаты в переменные.

QWebFrame и положение курсора
Доброго времени суток! У меня есть QWebView, допустим, с 3-мя фреймами, не считая mainFrame. Эти 3 фрейма занимают не все пространство...

Индекс и положение курсора
Цепляю индекс к парадок. таблице и курсор находится где-то в середине таблицы, а мне надо, чотб он был наверху. Как быть?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru