Змінюй хід війни! Допомагай ЗСУ!

Электрофлуд :)

🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3481
Ага, нарешті я зрозумів.
Методів 2:
1( правильний) - свій клас "овальної кнопки" наслідуваний від button, у якому перевизначити деякі методи( малювання кнопки, обробка миші).
2( простий) - як і писав вище, створити будь-який елемент прямокутний( простіше всього Graphics), на якому намалювати свою кнопку, а там вже у обробці кліку визначати чи у зоні миша. Формально це буде прямокутник, фактично - кнопка потрібної форми з єдиним мінусом - неможливістю розміщення чогось іншого у межах цього ж прямокутника - тобто ще один такий овал по діагоналі впритул не вийде розмістити.
 
Останнє редагування:
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3482
Ага, нарешті я зрозумів.
Методів 2:
1( правильний) - свій клас "овальної кнопки" наслідуваний від button, у якому перевизначити деякі методи( малювання кнопки, обробка миші).
2( простий) - як і писав вище, створити будь-який елемент прямокутний( простіше всього Graphics), на якому намалювати свою кнопку, а там вже у обробці кліку визначати чи у зоні миша. Формально це буде прямокутник, фактично - кнопка потрібної форми з єдиним мінусом - неможливістю розміщення чогось іншого у межах цього ж прямокутника - тобто ще один такий овал по діагоналі впритул не вийде розмістити.

1. (поспорю на счет правильный, но для вторичного использования более пригоден) - да, но это очень ты глубоко копнул. Там и так все нужные свойства есть. Не надо их переписывать - все кнопки в демке на форме в дизайнере выглядят обычными квадратными. Действия происходят в конструкторе - именно там им тупо назначается регион.
2. Вообще не понял о чем ты. Это в билдере так?
На демке повози мышкой - контролы (да и сама форма) формально НЕ прямоугольные. Прозрачный контрол с картинкой я ещё в лохматом 99м делел в борланде :) Это не интересно именно изза "формальной" прямоугольности.
И да, я не в С, я в C# это ваяю под .NET - там всё немного не так..
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3483
зацените какая вундервафля за 2$
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3484
зацените какая вундервафля за 2$
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.

Я заценил шоп, который его продает:
Sold By
Shanghai Fashion Store S's store
Смотреть ассортимент
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Как туда попал тестер? :іржач: И, к стати, в самом шопе я его не наблюдаю.

И эт... его доставка сюда обойдется в $5.91 :D
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3485
И да, я не в С, я в C# это ваяю под .NET - там всё немного не так..
Сенк кеп, але шарп мс для свого дотнету й вигадали. Да й які класи в С?



1. (поспорю на счет правильный, но для вторичного использования более пригоден) - да, но это очень ты глубоко копнул. Там и так все нужные свойства есть. Не надо их переписывать - все кнопки в демке на форме в дизайнере выглядят обычными квадратными. Действия происходят в конструкторе - именно там им тупо назначается регион.
Регіон "живиться" об'єктами Drawing.2D, котрі ще треба створити. Тож не думаю, що конструктор отак просто декількома кліками усе сам за тебе зробить. Ну принаймні у ВС2010 конструктор цього не вміє та взагалі не світить властивість Region.
А так звичайно можна, при чому знову двома способами:
1( правильний) - створюємо свій повноцінний клас бла бла бла...
2( хитрий) - створюємо свій клас, але перевизначаємо у ньому лише 1 нахуй непотрібний метод. А краще метод, що викликає нахуй непотрібний івент, де й реалізуємо сабж.

Створена цим класом кнопка при першій же зміні розміру стане еліпсом.
class SquareButton : Button
{
protected override void OnResize(EventArgs e)
{
var path = new GraphicsPath();
path.AddEllipse(new Rectangle(x, y, this.Width, this.Height));
this.Region = new Region(path);
base.OnResize(e);
}
}
 
Останнє редагування:
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3486
Сенк кеп, але шарп мс для свого дотнету й вигадали. Да й які класи в С?
Ну в билдере вообще плюсы, а не С - то я так сократил, но ты, как всегда, доебался до слов.

Регіон "живиться" об'єктами Drawing.2D, котрі ще треба створити. Тож не думаю, що конструктор отак просто декількома кліками усе сам за тебе зробить.
Нет, сам не зробыть. Придётся пару функций написать. По выниманию из картинки контура и по назначению его регионом контрола.

Ну принаймні у ВС2010 конструктор цього не вміє та взагалі не світить властивість Region.
Чё она не светит? Конструктор это виртуальное понятие. Нет там ни какого конструктора, конструктор это кусок кода, где написано чего сделать при создании объекта с этим объектом. Можешь туда руками дописывать что угодно, и чего в нем не светит свойство регион?
Студия или билдер или моно сделают только простейшие действия, которые ты в панели свойств выбрал. Ни кто не мешает им руками помочь.

А так звичайно можна, при чому знову двома способами:
1( правильний) - створюємо свій повноцінний клас бла бла бла...
2( хитрий) - створюємо свій клас, але перевизначаємо у ньому лише 1 нахуй непотрібний метод. А краще метод, що викликає нахуй непотрібний івент, де й реалізуємо сабж.
3. Створюэмо свiй неполноценный класс, в котором 2 нi кому не непотрiбнi, а навiть дуже потрiбнi методи, що я выще визначив. И применяем эти функции к нужным нам контролам при из создании. Это более переносимо и может существовать отдельно, применяясь в любом другом проекте.

Створена цим класом кнопка при першій же зміні розміру стане еліпсом.
Код:
    class SquareButton : Button
    {
        protected override void OnResize(EventArgs e) 
        {
            var path = new GraphicsPath();
            path.AddEllipse(new Rectangle(x, y, this.Width, this.Height));
            this.Region = new Region(path);
            base.OnResize(e);
        }
    }
Надо будет позырить дома :) Большинство таких советов (типа с хабра и прочих ресурсов, где темы всплывали) были полным фейком и сферическим конём в вакккме, отчего даже не компилировались и рыть где там баг мне было лень.
Из того, что я нашел - всё работает, но несколько не так, как ты накрапал. В ощем - вечером дораскапываю существующий код и твой проверю (сейчас у мну IDE на машине нет, а ноут свой я по морозу не потащил).
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3487
Чё она не светит? Конструктор это виртуальное понятие. Нет там ни какого конструктора, конструктор это кусок кода, где написано чего сделать при создании объекта с этим объектом. Можешь туда руками дописывать что угодно, и чего в нем не светит свойство регион?
Студия или билдер или моно сделают только простейшие действия, которые ты в панели свойств выбрал. Ни кто не мешает им руками помочь.
Я конструктор форм іде мав на увазі.
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3488
Я конструктор форм іде мав на увазі.

А, та не, тот умеет только впихивать в конструктор установки, заданные в поле свойств панели инструментов, ну и хедеры создавать.
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3489
Рискну выдвинуть идею здесь (поскольку у мну Вася в игноре, да и не пишет давно сюда) - трансформатор тока+мост+активная нагрузка, заведеная на транзистор. А далее - в зависимости от фантазии - либо с собственным питанием (тогда можно и на компаратор), либо на симистор в схему отпирания, чтобы её блокировать и он сам закроется. ...

Я тогда тоже предложил токовый транс, но Васия отверг его на корню.

Вот поэтому и интересно, чем же закончилось. :)
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3490
А, та не, тот умеет только впихивать в конструктор установки, заданные в поле свойств панели инструментов, ну и хедеры создавать.

Да чого ж, не лише. Часом дуже допомагає, хоча скоріше як загальний шаблон та джерело шаблонів для купи модулів.


Але це всеодно напівмера. Взагалі властивість Region використовується для повністю зворотнього - обмеження області елемента.
Наприклад можна ту саму область на формі створити без ніякої кнопки і використовувати л_клік івент форми, що генеруватиметься лише на клік усередині цього регіону. Формально - це не кнопка буде, фактично - 1 у 1 з тим, що є зараз.
Нормальна реалізація сабжу - лише перевизначення купки методів, що цю кнопку малюють та палять мишу.
Код:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

    class SquareButton : Button
    {
        protected override void OnResize(EventArgs e)
        {
            using (var path = new GraphicsPath())
            {
                path.AddEllipse(new Rectangle(2, 2, this.Width - this.Width / 10, this.Height - this.Height / 10));
                this.Region = new Region(path);
            }
            base.OnResize(e);
        }
    }

    public class Form1 : Form
    {
        SquareButton button1;
        int i =0;

        public Form1()
        {
            button1 = new SquareButton();
            button1.Text = "Click me";
            button1.Click +=new EventHandler(button1_Click);
            this.Controls.Add(button1);    
        }

        public void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Im ellipse now")
            {
                if (i == 1)this.Close();
                MessageBox.Show("Im already ellipse. Stop touch me! One more time and FUUUUU");
                i++;
                return;
            }
            button1.Size = new Size(100, 70);
            button1.Text = "Im ellipse now";
        }
    }

    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        } 
    }
 

Вкладення

  • RoundButton.rar
    3.6 КБ · Перегляди: 54
Останнє редагування:
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3491
Да чого ж, не лише. Часом дуже допомагає, хоча скоріше як загальний шаблон та джерело шаблонів для купи модулів.


Але це всеодно напівмера. Взагалі властивість Region використовується для повністю зворотнього - обмеження області елемента.
Наприклад можна ту саму область на формі створити і тоді, наприклад, л_клік івент форми генеруватиметься лише якшо клікнули усередині визначеної регіоном області. Вийде 1 в 1 з тим, що є зараз, про що я з самого початку і казав.
Код:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

    class SquareButton : Button
    {
        protected override void OnResize(EventArgs e)
        {
            using (var path = new GraphicsPath())
            {
                path.AddEllipse(new Rectangle(2, 2, this.Width - this.Width / 10, this.Height - this.Height / 10));
                this.Region = new Region(path);
            }
            base.OnResize(e);
        }
    }

    public class Form1 : Form
    {
        SquareButton button1;
        int i =0;

        public Form1()
        {
            button1 = new SquareButton();
            button1.Text = "Click me";
            button1.Click +=new EventHandler(this.button1_Click);
            this.Controls.Add(button1);    
        }

        public void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Im ellipse now")
            {
                if (i == 1)this.Close();
                MessageBox.Show("Im already ellipse. Stop touch me! One more time and FUUUUU");
                i++;
                return;
            }
            button1.Size = new Size(100, 70);
            button1.Text = "Im ellipse now";
        }
    }

    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        } 
    }

ROUND1.png

ROUND2.png


Походу - не работает.
P.S. А почему для обратного? Это, как раз, прямое и есть - ограничить контур компонента. Только особенностью его использования является то, что контур может быть любой формы. А ориентация на картинко - просто упрощает проектирование своих контролов, так как можно и в кореле и в гимпе и в пэйнте зазырить какое оно будет. И оно именно такое и будет :)
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3492
Чого не працює? Овальна кнопка є? Є = працює.
Немає бордеру нормального - ну так ми його й не змінювали, він прямокутний та поза еліпсом. Тому й напівмера.
 
Останнє редагування:
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3493
Чого не працює? Овальна кнопка є? Є = працює.
Немає бордеру нормального - ну так ми його й не змінювали, він прямокутний та поза еліпсом. Тому й напівмера.

Где овал? :D Там надпись и всё. Я понял, допилю своё - на соурсфорж выкину :)
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3494
Невже повилазило? Навіть на твоєму скрині видно той "овал", хоча різниця кольорів і невелика.

На з контрастом.
Але знову ж таки без бордера, без підсвічування. Для реалізації усього цього знову ж таки є 2 варіанти:
1 ( трушний) - нормально перевизначити усі методи, що малюють кнопку.
2 ( як завжди) - наліпити на кнопку картинку№1, а в обробнику івенту наведення миші змінювати на картинку№2. Так загалом і реалізовано у твоєму прикладі.
 

Вкладення

  • RoundButton.rar
    3.5 КБ · Перегляди: 60
Останнє редагування:
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3495
Невже повилазило? Навіть на твоєму скрині видно той "овал", хоча різниця кольорів і невелика.

На з контрастом.
Але знову ж таки без бордера, без підсвічування. Для реалізації усього цього знову ж таки є 2 варіанти:
1 ( трушний) - нормально перевизначити усі методи, що малюють кнопку.
2 ( як завжди) - наліпити на кнопку картинку№1, а в обробнику івенту наведення миші змінювати на картинку№2. Так загалом і реалізовано у твоєму прикладі.

ниданивосичас. я в глагнэ срусь :D
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3496
Фуф, от глагнэ уже тошнит. Возвращаюсь к C# :D
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3497
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3498
Ну так що скажеш по сабжу?

Та сделал вчера. Извращение ещё то, но работает. Возникла проблема с отрисовкой - из пэйнта растр отрисовывается корректно. Захотел добавить градиентов - сделал в векторном редакторе и экспортнул - лажа, не все градиенты понимаются на контроле. В имажебоксе рисуется нормально, а на кнопке - с артефактами. Пока не нашел как создавать красивые и одновременно корректные растры.

P.S. Но основной цели достиг - при прозрачном фоне картинки контрол занимает именно то место, где есть не фон. То есть - если спреем напшикать - кнопка будет при наведении мышки на точки, где цвет :) Шо не может не радовать.
P.P.S. Теперь думаю как корректнее оформить - как библиотеку, или так и оставить классом и тупо присоединять его к проекту, если нужно. Там в классе 2 метода - конвертирование bmp в регион и применение этого региона к контролу.
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3499
Там Васия с загадочным лиТСом ("я уже знаю, но вас, бездельники, поинтригую") пытался устроить конкурс идей на тему самого крутого отключателя (индикатора) нагрузки по превышению определенного тока.

Интересно чем закончилось и кто получил Гран-при :)

Эта тема ?
https://www.kharkovforum.com/showthread.php?t=2674842
 
  • 🟡 16:11 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3500
Назад
Зверху Знизу