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

В FAR парой кликов делается через F5.



Переглянути вкладення 7958348

В архиве лежит

Та то я, чтобы не париться просто переименовал для обхода ограничений по размеру файла на ХФ и обхода антивирусов гугля и собственного почтового сервера :D
Хочу делать как там. 3.2 девелоп нормально отконвертировал - компилится. Вечером буду корячить код и учиться делать так же :) Идея хороша. Собственные контролы и окна нестандартной формы - всю жизнь мечтал.
 
Та то я, чтобы не париться просто переименовал для обхода ограничений по размеру файла на ХФ и обхода антивирусов гугля и собственного почтового сервера :D

Я ж потроха архива не смотрел, переименовал и все. Фраза двусмысленная получилась:

- В чем проблема?
- .rar переименовать в .exe
 
Будь-який елемент створити - той же Graphics з твоєю картинкою - а в обробнику евента кліку перевіряти усередині твого контуру миша чи ні.
Контур постійний чи може бути різний завантажений?
Та нахер мне картинка? Мне контур нужен по кривой , а не прямоугольный :D


Якщо не зрозумiв - переназви rar у exe й запусти. Це демонстраха.

- В чем проблема?
- .rar переименовать в .exe

:рл:
Там нет проблем.
Там есть экзешник, которому я принудительно руками поменял расширение, чтобы он через почту без проблем пролазил. ОН - демонстрационная программка, которая демонстрирует чего я собственно хочу добиться. Переименовываешь в exe и смотришь, если интересно чего я имел ввиду :D

P.S. Но можно и из твоего зипа его открыть. Он под .NET и не требует установки. И вирусов там нет - я смотрел и только что компилил :)
 
Ага, нарешті я зрозумів.
Методів 2:
1( правильний) - свій клас "овальної кнопки" наслідуваний від button, у якому перевизначити деякі методи( малювання кнопки, обробка миші).
2( простий) - як і писав вище, створити будь-який елемент прямокутний( простіше всього Graphics), на якому намалювати свою кнопку, а там вже у обробці кліку визначати чи у зоні миша. Формально це буде прямокутник, фактично - кнопка потрібної форми з єдиним мінусом - неможливістю розміщення чогось іншого у межах цього ж прямокутника - тобто ще один такий овал по діагоналі впритул не вийде розмістити.
 
Останнє редагування:
Ага, нарешті я зрозумів.
Методів 2:
1( правильний) - свій клас "овальної кнопки" наслідуваний від button, у якому перевизначити деякі методи( малювання кнопки, обробка миші).
2( простий) - як і писав вище, створити будь-який елемент прямокутний( простіше всього Graphics), на якому намалювати свою кнопку, а там вже у обробці кліку визначати чи у зоні миша. Формально це буде прямокутник, фактично - кнопка потрібної форми з єдиним мінусом - неможливістю розміщення чогось іншого у межах цього ж прямокутника - тобто ще один такий овал по діагоналі впритул не вийде розмістити.

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

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


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

И эт... его доставка сюда обойдется в $5.91 :D
 
И да, я не в С, я в 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);
}
}
 
Останнє редагування:
Сенк кеп, але шарп мс для свого дотнету й вигадали. Да й які класи в С?
Ну в билдере вообще плюсы, а не С - то я так сократил, но ты, как всегда, доебался до слов.

Регіон "живиться" об'єктами 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 на машине нет, а ноут свой я по морозу не потащил).
 
Чё она не светит? Конструктор это виртуальное понятие. Нет там ни какого конструктора, конструктор это кусок кода, где написано чего сделать при создании объекта с этим объектом. Можешь туда руками дописывать что угодно, и чего в нем не светит свойство регион?
Студия или билдер или моно сделают только простейшие действия, которые ты в панели свойств выбрал. Ни кто не мешает им руками помочь.
Я конструктор форм іде мав на увазі.
 
Рискну выдвинуть идею здесь (поскольку у мну Вася в игноре, да и не пишет давно сюда) - трансформатор тока+мост+активная нагрузка, заведеная на транзистор. А далее - в зависимости от фантазии - либо с собственным питанием (тогда можно и на компаратор), либо на симистор в схему отпирания, чтобы её блокировать и он сам закроется. ...

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

Вот поэтому и интересно, чем же закончилось. :)
 
А, та не, тот умеет только впихивать в конструктор установки, заданные в поле свойств панели инструментов, ну и хедеры создавать.

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


Але це всеодно напівмера. Взагалі властивість 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 КБ · Перегляди: 34
Останнє редагування:
Да чого ж, не лише. Часом дуже допомагає, хоча скоріше як загальний шаблон та джерело шаблонів для купи модулів.


Але це всеодно напівмера. Взагалі властивість 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. А почему для обратного? Это, как раз, прямое и есть - ограничить контур компонента. Только особенностью его использования является то, что контур может быть любой формы. А ориентация на картинко - просто упрощает проектирование своих контролов, так как можно и в кореле и в гимпе и в пэйнте зазырить какое оно будет. И оно именно такое и будет :)
 
Чого не працює? Овальна кнопка є? Є = працює.
Немає бордеру нормального - ну так ми його й не змінювали, він прямокутний та поза еліпсом. Тому й напівмера.
 
Останнє редагування:
Чого не працює? Овальна кнопка є? Є = працює.
Немає бордеру нормального - ну так ми його й не змінювали, він прямокутний та поза еліпсом. Тому й напівмера.

Где овал? :D Там надпись и всё. Я понял, допилю своё - на соурсфорж выкину :)
 
Невже повилазило? Навіть на твоєму скрині видно той "овал", хоча різниця кольорів і невелика.

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

Вкладення

  • RoundButton.rar
    3.5 КБ · Перегляди: 46
Останнє редагування:
Невже повилазило? Навіть на твоєму скрині видно той "овал", хоча різниця кольорів і невелика.

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

ниданивосичас. я в глагнэ срусь :D
 
Фуф, от глагнэ уже тошнит. Возвращаюсь к C# :D
 
Назад
Зверху Знизу