Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362

Рисование произвольной графики

10.09.2009, 16:49. Показов 6102. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо нарисовать простейшую кнопочку на форме через класс Graphics, но получается хрень...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void TestForm_MouseMove(object sender, MouseEventArgs e)
        {
BufferedGraphics bg = CurrentContext.Allocate(this.CreateGraphics(), this.ClientRectangle);
        bg.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
        SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(100, 0, 0, 0)); // Черный полпурозрачный
        BufferedGraphicsContext CurrentContext = BufferedGraphicsManager.Current;
        GraphicButton grbut = new GraphicButton(100, 10, 150, 40, "ЫЫЫЫ");
        Font fnt = new Font("Times New Roman", 15);
        this.DrawButton(grbut, fnt, true, bg.Graphics);
        bg.Render();
}
 
public void DrawButton(GraphicButton button, Font fnt, bool SelectOnMoveOrClick, Graphics g)
        {
            
            if (SelectOnMoveOrClick)
                button.Selected(MouseX, MouseY); // Вызываем фунцкию проверки наведения на кнопку 
 
            g.FillRectangle(semiTransBrush, button.X, button.Y, button.Width, button.Height);
            g.DrawRectangle(new Pen(button.BrushNow), button.X, button.Y, button.Width, button.Height);
            g.DrawString(button.Text, fnt, button.BrushNow, new Point(button.Width / 2 - ((int)(fnt.Size / 2) * button.Text.Length) + button.X - 10, button.Y + button.Height / 2 - fnt.Height / 2));
        }
в чем собственно проблема... если рисовать кнопку через метод OnPaint то рисуется все очень хорошо, полу прозрачный черный, как и должно быть, НО проблема в том что надо отслеживать если мышка попала в зону кнопки то она сменит цвет... поэтому приходиться в MouseMove создавать эл-т графики... в чем проблема? заливка происходит чисто черным цветом(не прозрачным) и на все окно формы, а не только там где надо... как это предотвратить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2009, 16:49
Ответы с готовыми решениями:

Графики, прерывание рисование при нулевом значении
Строю графики при помощи объекта Dundas2dChart. Все неплохо, но возникла проблема. В данных есть нулевые значения. Необходимо чтобы в...

Рисование простой графики
расскажите как рисовать простенькую графику в С# (visual studio). я нуб и не собираюсь рисовать игры и т.д. хотелось бы научится...

Рисование произвольной границы формы
собственно вопрос в том, возможно-ли из шарпов изменять хотя-бы цвет, а по возможности и стиль (изображение кнопок, градиентная заливка и...

7
 Аватар для homich77
81 / 80 / 4
Регистрация: 06.04.2009
Сообщений: 326
10.09.2009, 17:51
А можно поинтересоваться - какая цель всего этого?просто интересно
0
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
10.09.2009, 17:53  [ТС]
научиться =) просто я это копировал с игрульки одной простейшей, там написано вроде бы так же, но работает нормально, а у мя както через ж... вот и не могу понять почему...
0
5 / 5 / 1
Регистрация: 23.09.2009
Сообщений: 13
23.09.2009, 02:00
Я не очень вник в смысл вышеизложенного кода, но как я понял, тебе нужно что бы при наведении мыши кнопочка изменялась. так?
Если да то почему бы в обработчик события MouseMove не вставить проверку на наведение мыши, и в случае наведения, просто заносить значение в некоторую глобальную переменную и потом, при прорисовке, зависимости от неё менять цвет.
Да конечно не особо хорошо штамповать лишние глобальные переменные, но по-моему в данном случае это оправданно.

Да кстати. Обработчик события Paint вызывается каждый раз когда требуется перерисовка, или принудительно. так что еще при изменении статуса этой нашей переменной можно вызывать Invalidate(). а мне этого обработчика желательно вообще ничего не рисовать.
0
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
23.09.2009, 18:44  [ТС]
проблема не в отслежке, а в том что фон кнопки рисуется на всю форму а не на положенный размер и рисует не полупрозрачным черным а просто черным...
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
24.09.2009, 04:14
Думаю дело в этом:
C#
1
BufferedGraphics bg = CurrentContext.Allocate(this.CreateGraphics(), this.ClientRectangle);
this.CreateGraphics() - создается полотно рисования из формы, а не нужной кнопки,
this.ClientRectangle - клиентская область также соответсвует размерам формы, а не нужной кнопки.
Заменить на данные для вашей кнопки.
0
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
24.09.2009, 15:18  [ТС]
это я понял, но фишка в том что в коде четко сказано что квадрат надо залить на определенный размер, а не на весь экран как это происходит, и полупрозрачным черным, а не просто черным...
0
5 / 5 / 1
Регистрация: 23.09.2009
Сообщений: 13
27.09.2009, 17:57
Я же говорю, тебе просто отрисовку нужно делать в обработчике прорисовки кнопки, а не где нибудь ещё!!! тогда все будет работать норм.

C#
1
2
3
4
5
6
...// это обработчик прорисовки кнопки, он передает 2 параметра sender и e
{
Graphics gr = e.Graphics;
// далее рисуешь на gr все что тебе нужно.
}
...
если нужно перерисовать, например при наведении мыши, то вызываешь this.invalidate();
вот и все !!!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2009, 17:57
Помогаю со студенческими работами здесь

Графики функций и рисование
Есть задание: (Напишите приложение, которое строит ряд увеличивающихся окружностей, центры которых лежат на спирали. Число окружностей...

Одновременное рисование текста и графики
Есть Bitmap в нем рисую обект с подписями (к примеру координатные оси) Чтобы было проще: для объекта Graphics, полученного от Bitmap,...

Рисование произвольной линии
Люди добрые, помогите пожалуйста, уже столько времени не могу сообразить процедуру. Задача такова. Нужно присвоить Радиобаттону рисование...

Рисование графики для игр
Подскажите пожалуйста каим инструментом рисуеться графика в ждава играх, и как ним пользоваться, можно ли изменить графику в игре -...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами 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/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru