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

Кастомная форма,не могу растянуть и сжать правильно

28.01.2014, 17:24. Показов 2004. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, сделал кастомную форму, т.е. FormBorderStyle == None. На каждую сторону кинул по панельке шириной в 3 пикселя - это будут мои новые бордеры, за которые я хочу уметь растягивать и сжимать форму.
Собствено с правым, и нижним бордерами все понятно, там легко. А вот левый и верхний, вот с ними проблемы - когда я пытаюсь сжать форму и дохожу до значения MinimumSize - форма начинает перемещаться...А мне нужно чтобы она уменьшилась до минимума и остановилась, никак не могу сделать((
Вот мой код левого бордера
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 private void borderW_MouseDown(object sender, MouseEventArgs e)
        {
            Active = true;
           
        }
 
       
        Size s = new Size(150, 50);
        private void borderW_MouseMove(object sender, MouseEventArgs e)
        {
            if (Active)
            {
                if (e.X < 0)
                {
                    this.Location = new Point(this.Left + e.X, this.Top);
                    this.Size = new Size(this.Width - e.X, this.Height);
                }
                else
                {
                    this.Size = new Size(this.Width - e.X, this.Height);
                    if (this.Size.Width == s.Width || this.Size.Width == MinimumSize.Width)
                    {
                        Debug.WriteLine("Right_zero");
                    }
                    else
                    {
                        this.Location = new Point(this.Left + e.X, this.Top);
                    }
                }
 
                IntPtr hRgn = CreateRoundRectRgn(0, 0, this.Width + 1, this.Height + 1, Radius, Radius);
                SetWindowRgn(this.Handle, hRgn, true);
            }
        }
        private void borderW_MouseUp(object sender, MouseEventArgs e)
        {
            Active = false;
        }
Добавлено через 9 минут
Извеняюсь, вот оригинал кода, выше это уже моя попытка сделать, но и так не выходит...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    private void borderW_MouseDown(object sender, MouseEventArgs e)
    {
                Active = true;
    }
            Size s = new Size(150, 50);
            private void borderW_MouseMove(object sender, MouseEventArgs e)
            {
                if (Active)
                {
                    if (e.X < 0)
                    {
                        this.Location = new Point(this.Left + e.X, this.Top);
                        this.Size = new Size(this.Width - e.X, this.Height);
                    }
                    else
                    {
                        this.Size = new Size(this.Width - e.X, this.Height);
                        this.Location = new Point(this.Left + e.X, this.Top);
                       
                    }
                }
            }
            private void borderW_MouseUp(object sender, MouseEventArgs e)
            {
                Active = false;
            }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.01.2014, 17:24
Ответы с готовыми решениями:

Растянуть/сжать битмап
Подскажите, каким образом можно качественно (как в фотошопе) растянуть/сжать Bitmap. Кажется это рэсемплингом называется.

Растянуть или сжать изображение
Как можно растянуть или сжать изображение, используя EMGU CV? То есть, например, у меня есть изображение 100*200. нужно, не сохраняя...

Кастомная форма регистрации
Сделал класс class User(AbstractUser): photo = models.ImageField(upload_to='user/%Y/%m/%d', blank=True) Зарегал его в...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
28.01.2014, 17:55
Лучший ответ Сообщение было отмечено Udjen как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ...
            if (Active)
            {
                if (e.X < 0)
                {
                    this.Location = new Point(this.Left + e.X, this.Top);
                    this.Size = new Size(this.Width - e.X, this.Height);
                }
                else
                {
                    if(this.Width - e.X > s.Width) // меньше этого размера сжиматься не будет
                    {
                        this.Size = new Size(this.Width - e.X, this.Height);
                        this.Location = new Point(this.Left + e.X, this.Top);
                    }
                }
            }
, например...
1
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 9
28.01.2014, 19:30  [ТС]
ОО, спасибо, за долгое время единственное решение которое действительно помогло))

Попробую понаглеть, т.к. не получаеться еще один бордер(верхний левый угол)
на рисунке - []

[]========
|
|
|

вот код

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 borderNW_MouseMove(object sender, MouseEventArgs e)
        {
            if (Active)
            {
                if (e.Y < 0 || e.X < 0)
                {
                        this.Location = new Point(this.Left + e.X, this.Top + e.Y);
                        this.Size = new Size(this.Width - e.X, this.Height - e.Y);
                    
                }
                else 
                {
                        this.Size = new Size(this.Width - e.X, this.Height - e.Y);
                        this.Location = new Point(this.Left + e.X, this.Top + e.Y);
                }
 
                IntPtr hRgn = CreateRoundRectRgn(0, 0, this.Width + 1, this.Height + 1, Radius, Radius);
                SetWindowRgn(this.Handle, hRgn, true);
 
                this.Refresh();
            }
        }
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
28.01.2014, 19:49
А по аналогии:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// ...
            if (Active)
            {
                if (e.Y < 0 || e.X < 0)
                {
                        this.Location = new Point(this.Left + e.X, this.Top + e.Y);
                        this.Size = new Size(this.Width - e.X, this.Height - e.Y);
                    
                }
                else 
                {
                    if(this.Width - e.X > s.Width && this.Height - e.Y > s.Height) // <---
                    {
                        this.Size = new Size(this.Width - e.X, this.Height - e.Y);
                        this.Location = new Point(this.Left + e.X, this.Top + e.Y);
                    }
                }
 
                IntPtr hRgn = CreateRoundRectRgn(0, 0, this.Width + 1, this.Height + 1, Radius, Radius);
                SetWindowRgn(this.Handle, hRgn, true);
 
                this.Refresh();
            }
- никак нельзя догадаться?

Не забывай в OnMouseLeave панелей сбрасывать Active в false, иначе будет подглючивать...
0
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 9
29.01.2014, 13:22  [ТС]
Тут по аналогии не сложно догадаться, но предложенный вариант работает не так как хочется, т.е. если двигать влево -вниз - форма уезжает вниз...
если двигать вправо - вверх - форма уезжает вправо...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
29.01.2014, 14:05
Ты будешь смеяться, но ничего никуда не уезжает. Дошло до минимальных размеров - остановилось (я не просто так пишу, для начала коды проверяются, если что). И потом, примечание насчет OnMouseLeave было замечено?
0
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 9
29.01.2014, 14:40  [ТС]
Да, с OnMouseLeave - все ок.
Прортестируйте так, ухватитие угол и тяните по диагонали в нижний левый угол, форма начнет уезжать...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
29.01.2014, 17:19
В 4-ой строке (по нумерации 4-го поста) замени || на &&, и посмотри, что будет... Разницу чувствуешь?
1
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 9
29.01.2014, 17:55  [ТС]
Спасибо, чувствую себя глупым студентом(В такой простой штуке - потерялся((
0
77 / 77 / 42
Регистрация: 30.09.2014
Сообщений: 342
05.06.2016, 16:36
А у меня с правым проблемы

C#
1
2
3
4
5
6
7
8
9
10
            if (Active)
            {
 
 
                    this.Size = new Size(this.Width + e.X, this.Height);
                    this.Location = new Point(this.Left + e.X, this.Top);
                    
              
                
            }
Добавлено через 4 минуты
Или так если по правому
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Active)
            {
                if (e.X > 0)
                {
                    this.Location = new Point(this.Left + e.X, this.Top);
                    this.Size = new Size(this.Width + e.X, this.Height);
                }
                else
                {
                    this.Size = new Size(this.Width + e.X, this.Height);
                    this.Location = new Point(this.Left + e.X, this.Top);
 
                }
            }

окно дергается и ширину меняет странно(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2016, 16:36
Помогаю со студенческими работами здесь

Как растянуть и сжать значения диапазона для графика по X или Y по 2м крайним точкам?
Всем привет! 1. Как изменить диапазон значений графика по 2 крайним значениям (точкам) по оси X ? (при условии что значения...

RAD Studio Tokyo - распухает до 2-30 Мб форма dfm. Как сжать ?
При работе заметил, что файл .dfm главной формы приложения после каждой компиляции растет на 200 - 500 кб. Никаких изменений в форму не...

Как правильно сжать меню
Товарищи,такой вот вопрос: Делаю сейчас резиновое горизонтальное меню расчитанное на разрешение 1024-1920,но возникла проблема.Если...

Не могу сжать том
Здравствуйте! Собственно, хотел сжать том, чтобы установить рядом другую ОС. Проблема в том, что возможно сжать не более 221 мб. Это очень...

Не могу сжать том
Раньше спокойно это делал, но уже где-то год как не выходить. True Imagem пользоваться боюсь, т.к. однажды полетел диск и все данные...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru