Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
.NET 4.x

Border в WPF - изменение размеров и перемещение

22.09.2015, 13:00. Показов 9097. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Подскажите, пожалуйста, как правильно реализовать следующий вариант визуализации при изменении размеров и перемещении элемента Border, размещённого в Canvas:
1.1. При попадании курсора (с любого направления движения) на границу Border возникают соответствующие стрелки направления изменения границы (Cursors.SizeWE или Cursors.SizeNS). Если при наличии вышеуказанных курсоров нажимается левая кнопка мыши и начинается движение мыши (изменение размеров), то:
a) блокируется возможность перемещения курсора мыши в направлении, перпендикулярном стрелке курсора;
b) курсор не изменяется до момента отпускания левой кнопки мыши, после чего он меняется на Cursors.Arrow.
1.2. Если левая кнопка мыши не нажата, при выходе курсора за границы Border, курсор изменяется на стандартный Cursors.Arrow.
1.3. Если курсор находится внутри границ Border, курсор заменяется на Cursors.Hand. Если после этого нажимается левая кнопка мыши и начинается движение мыши (перетаскивание), вид курсора не изменяется даже после отпускания кнопки мыши.
Из того, что удалось найти, ближе всего пример http://denismorozov.blogspot.r... ntime.html.

Основная проблема, что в этом примере во многом некорректно работает 1.1 и совсем не работает функционал 1.2.
Сейчас решаю это следующим образом:
a) Записал обработчик MouseMove в <Window x:Class="ExampleResize.MainWindow" MouseMove="mainwindows_MouseMove" …> и запоминаю координаты курсора через Mouse.GetPosition
b) Отлавливаю у Border события MouseEnter и MouseLeave и запоминаю координаты курсора в момент этих событий. Наверное, вместо MouseEnter и MouseLeave можно в пункте а) определить элемент, находящийся под курсором и координаты его границ.
c) Сравниваю координаты, полученные в a) и b) и определяю попадание курсора на границу/внутрь/вне Border и соответственно меняю вид курсора.
Полагаю, что в моём решении крайне негативным является то, что при любом движении мыши запускается пункт а), поэтому прошу помочь найти другое решение.

2. Подскажите, пожалуйста, может быть есть какой-нибудь бесплатный компонент для WPF, который:
2.1. Можно настроить внешний вид как у Border.
2.2. Может выступать в качестве контейнера для других элементов.
2.3. «Из коробки» обладает большинством возможностей из описанного выше функционала.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2015, 13:00
Ответы с готовыми решениями:

Анимация фигуры - изменение размеров и перемещение
Помогите пожалуйста анимировать фигуру. Сначала она должна уменьшаться, а потом двигаться по диагонали к каждому углу экрана. program...

Изменение цвета, размеров и перемещение графических элементов
Вывести на экран монитора квадрат желтого цвета таким образом, чтобы он плавно вращался вокруг своего центра против часовой стрелки.

Перемещение и изменение размеров UserControl в Window посредством мышки
Есть UserControl, который необходимо, как перемещать, так и изменять его размеры в другом контроле, например Canvas, который расположен в...

16
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
22.09.2015, 17:10
Ну например модно тупо сделать свой контрол, вот небольшой примерчик (не контрол) как это реализовать:

Разметка (тут сделана в окне, но можно все перенести в usercontrol унаследованный от Border):
Кликните здесь для просмотра всего текста
XML
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
<Window x:Class="BORDER_D.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BORDER_D"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas>
            <TextBlock FontSize="28" Text="TEXT !!!" Canvas.Left="179" Canvas.Top="146"/>
            
            <Border x:Name="BORDER222" Width="200" Height="200" BorderThickness="3" BorderBrush="Black" CornerRadius="10" SnapsToDevicePixels="True" Margin="25" Cursor="Hand" Background="#CCFF4C0A">
 
                <Grid Rectangle.MouseDown="Rectangle_MouseDown" Rectangle.MouseUp="Rectangle_MouseUp" >
                    <Rectangle Width="5" Fill="Transparent" VerticalAlignment="Stretch" HorizontalAlignment="Left" Margin="-3,5" Cursor="SizeWE"/>
                    <Rectangle Width="5" Fill="Transparent" VerticalAlignment="Stretch" HorizontalAlignment="Right" Margin="-3,5" Cursor="SizeWE"/>
                    <Rectangle Height="5" Fill="Transparent" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="5,-3"  Cursor="SizeNS"/>
                    <Rectangle Height="5" Fill="Transparent" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Margin="5,-3"  Cursor="SizeNS"/>
 
                    <Rectangle Height="10" Width="15" Fill="Transparent" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="-3"  Cursor="SizeNWSE" Panel.ZIndex="50"/>
                    <Rectangle Height="10" Width="15" Fill="Transparent" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="-3"  Cursor="SizeNWSE" Panel.ZIndex="50"/>
 
                    <Rectangle Height="10" Width="15" Fill="Transparent" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="-3"  Cursor="SizeNESW" Panel.ZIndex="50"/>
                    <Rectangle Height="10" Width="15" Fill="Transparent" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="-3"  Cursor="SizeNESW" Panel.ZIndex="50"/>
                </Grid>
 
            </Border>
        </Canvas>
    </Grid>
</Window>


Код обработки событий:
Кликните здесь для просмотра всего текста
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Shapes;
 
namespace BORDER_D
{
    public partial class MainWindow : Window
    {
        FrameworkElement ELEMENT;
        double MinWH = 6;
 
        double X;
        double Y;
 
        double cLeft;
        double cTop;
 
        public MainWindow()
        {
            InitializeComponent();
            ELEMENT = BORDER222;
        }
 
        private void Rectangle_MouseDown(object sender, RoutedEventArgs e)
        {
            var R = e.OriginalSource as Rectangle;
            if (R!=null)
            {
                X = Mouse.GetPosition(R).X;
                Y = Mouse.GetPosition(R).Y;
                cLeft = Canvas.GetLeft(ELEMENT) > 0 ? Canvas.GetLeft(ELEMENT) : 0 ;
                cTop = Canvas.GetTop(ELEMENT) > 0 ? Canvas.GetTop(ELEMENT) : 0;
 
 
                R.MouseMove += R_MouseMove;
                R.CaptureMouse();
            }
        }
 
        private void Rectangle_MouseUp(object sender, RoutedEventArgs e)
        {
            var R = e.OriginalSource as Rectangle;
            if (R != null)
            {
                R.MouseMove -= R_MouseMove;
                R.ReleaseMouseCapture();
            }
        }
 
        private void R_MouseMove(object sender, MouseEventArgs e)
        {
            var R = sender as FrameworkElement;
 
            var deltsX = e.GetPosition(R).X - X; 
            var deltsY =  e.GetPosition(R).Y - Y;
 
             if (R.VerticalAlignment == VerticalAlignment.Top && R.HorizontalAlignment == HorizontalAlignment.Left)
                {
                    ToTop(ELEMENT, deltsX, deltsY);
                    ToLeft(ELEMENT, deltsX, deltsY);
                }
                else if (R.VerticalAlignment == VerticalAlignment.Top && R.HorizontalAlignment == HorizontalAlignment.Right)
                {
                    ToTop(ELEMENT, deltsX, deltsY);
                    ToRight(ELEMENT, deltsX, deltsY);
                }
                else if (R.VerticalAlignment == VerticalAlignment.Bottom && R.HorizontalAlignment == HorizontalAlignment.Right)
                {
                    ToBotton(ELEMENT, deltsX, deltsY);
                    ToRight(ELEMENT, deltsX, deltsY);
                }
                else if (R.VerticalAlignment == VerticalAlignment.Bottom && R.HorizontalAlignment == HorizontalAlignment.Left)
                {
                    ToBotton(ELEMENT, deltsX, deltsY);
                    ToLeft(ELEMENT, deltsX, deltsY);
                }
 
            else if(R.VerticalAlignment == VerticalAlignment.Stretch && R.HorizontalAlignment == HorizontalAlignment.Left)
                    ToLeft(ELEMENT, deltsX, deltsY);
                else if (R.VerticalAlignment == VerticalAlignment.Stretch && R.HorizontalAlignment == HorizontalAlignment.Right)
                    ToRight(ELEMENT, deltsX, deltsY);
 
 
            else if(R.VerticalAlignment == VerticalAlignment.Top && R.HorizontalAlignment == HorizontalAlignment.Stretch)
                    ToTop(ELEMENT, deltsX, deltsY);
                else if (R.VerticalAlignment == VerticalAlignment.Bottom && R.HorizontalAlignment == HorizontalAlignment.Stretch)
                    ToBotton(ELEMENT, deltsX, deltsY);
           
        }
 
        void ToLeft(FrameworkElement FE, double deltsX, double deltsY)
        {
            if (FE.Width - deltsX > MinWH)
            {
                cLeft = cLeft + deltsX;
                Canvas.SetLeft(FE, cLeft);
                FE.Width = FE.Width - deltsX;
            }
        }
        void ToRight(FrameworkElement FE, double deltsX, double deltsY)
        {
            if (FE.Width + deltsX > MinWH)
            {
                FE.Width = FE.Width + deltsX;
            }
        }
 
        void ToTop(FrameworkElement FE, double deltsX, double deltsY)
        {
            if (FE.Height - deltsY > MinWH)
            {
                cTop = cTop + deltsY;
                Canvas.SetTop(FE, cTop);
                FE.Height = FE.Height - deltsY;
            }
        }
 
        void ToBotton(FrameworkElement FE, double deltsX, double deltsY)
        {
            if (FE.Height + deltsY > MinWH)
            {
                FE.Height = FE.Height + deltsY;
            }
        }
    }
}
2
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
22.09.2015, 18:47  [ТС]
Спасибо amarf за интересное решение путём добавления в Border четырёх Rectangle и Grid. К нему осталось добавить только перетаскивание.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
23.09.2015, 00:28
Цитата Сообщение от NewEd Посмотреть сообщение
К нему осталось добавить только перетаскивание.
http://www.wpftutorial.net/Behaviors.html
1
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
24.09.2015, 09:10  [ТС]
kenny69, спасибо за подсказку с behaviors.
Помогите, пожалуйста, заполнить xaml для реализации класса, указанного в вашей ссылке.

Я подключил xmlns:i="clr-namespace:System.Windows.Interactivity;a ssembly=System.Windows.Interactivity".
Создал отдельным файлом класс DragInCanvasBehavior и подключил его xmlns:dar="clr-namespace: DragAndResize"
Прописываю:
XML
1
2
3
4
5
6
7
<Canvas>
            <Border x:Name="BORDER222"  ... >
                  <i:Interaction.Behaviors>
Прописывать здесь? и что необходимо записать в этом блоке, чтобы у Border заработало перемещение?
                  </i:Interaction.Behaviors>
            </Border>
</Canvas>
0
Заблокирован
24.09.2015, 10:06
NewEd, по ссылке все есть:

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
public class DragBehavior : Behavior<UIElement>
{
    private Point elementStartPosition;
    private Point mouseStartPosition;
    private TranslateTransform transform = new TranslateTransform();
 
    protected override void OnAttached()
    {
        Window parent = Application.Current.MainWindow;
        AssociatedObject.RenderTransform = transform;
 
        AssociatedObject.MouseLeftButtonDown += (sender, e) => 
        {
            elementStartPosition = AssociatedObject.TranslatePoint( new Point(), parent );
            mouseStartPosition = e.GetPosition(parent);
            AssociatedObject.CaptureMouse();
        };
 
        AssociatedObject.MouseLeftButtonUp += (sender, e) =>
        {
            AssociatedObject.ReleaseMouseCapture();
        };
 
        AssociatedObject.MouseMove += (sender, e) =>
        {
            Vector diff = e.GetPosition( parent ) - mouseStartPosition;
            if (AssociatedObject.IsMouseCaptured)
            {
                transform.X = diff.X;
                transform.Y = diff.Y;
            }
        };
    }
}
XML
1
2
3
4
5
<Border x:Name="BORDER222"  ... >
                  <i:Interaction.Behaviors>
                      <dar:DragBehavior />
                  </i:Interaction.Behaviors>
</Border>
2
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
24.09.2015, 13:49  [ТС]
Спасибо Ev_Hyper.
Стыдно признаться, не до конца отработал эту часть.
Дело в том, что у меня на строке <dar: DragInCanvasBehavior/>
VisualStudio показывает в ErrorList ошибку (почему?):
C#
1
"The name "DragInCanvasBehavior" does not exist in the namespace "clr-namespace:DragAndResize"

Однако после того, как я всё же запустил код на исполнение, перемещение отлично отрабатывает.

Код в XALM
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Window
            x:Class="TestResize05.MainWindow"   
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
            xmlns:dar="clr-namespace:DragAndResize" 
                  
            Title="MainWindow" Height="350" Width="525"
        >
 
        <Canvas>
            <Border x:Name="BORDER222" Width="200" Height="200" BorderThickness="3" BorderBrush="Black" CornerRadius="10" SnapsToDevicePixels="True" Margin="25" Cursor="Hand" Background="#CCFF4C0A">
                
                <i:Interaction.Behaviors>
                    <dar:DragInCanvasBehavior/>
                </i:Interaction.Behaviors>
            </Border>
         </Canvas>
</Window>


Код класса в файле DragAndResize.cs
Кликните здесь для просмотра всего текста
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//ED
using System.Windows.Interactivity;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
 
namespace DragAndResize
{
    public class DragInCanvasBehavior : Behavior<UIElement>
    {
        private Canvas canvas;
 
        protected override void OnAttached()
        {
            base.OnAttached();
 
            // Присоединение обработчиков событий            
            this.AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;
            this.AssociatedObject.MouseMove += AssociatedObject_MouseMove;
            this.AssociatedObject.MouseLeftButtonUp += AssociatedObject_MouseLeftButtonUp;
        }
 
        protected override void OnDetaching()
        {
            base.OnDetaching();
 
            // Удаление обработчиков событий
            this.AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown;
            this.AssociatedObject.MouseMove -= AssociatedObject_MouseMove;
            this.AssociatedObject.MouseLeftButtonUp -= AssociatedObject_MouseLeftButtonUp;
        }
 
        // Отслеживание перетаскивания элемента
        private bool isDragging = false;
 
        // Запись точной позиции, в которой нажата кнопка
        private Point mouseOffset;
 
        private void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            // Поиск canvas
            if (canvas == null) canvas = VisualTreeHelper.GetParent(this.AssociatedObject) as Canvas;
 
            // Режим перетаскивания
            isDragging = true;
 
            // Получение позиции нажатия относительно элемента
            mouseOffset = e.GetPosition(AssociatedObject);
 
            // Захват мыши
            AssociatedObject.CaptureMouse();
        }
 
        private void AssociatedObject_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDragging)
            {
                // Получение позиции элемента относительно Canvas
                Point point = e.GetPosition(canvas);
 
                // Move the element.
                AssociatedObject.SetValue(Canvas.TopProperty, point.Y - mouseOffset.Y);
                AssociatedObject.SetValue(Canvas.LeftProperty, point.X - mouseOffset.X);
            }
        }
 
        private void AssociatedObject_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (isDragging)
            {
                AssociatedObject.ReleaseMouseCapture();
                isDragging = false;
            }
        }
    }
}
0
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
25.09.2015, 22:10  [ТС]
Ещё раз благодарю всех за помощь. На основе полученных советов создал и приложил архив с примером перемещения и изменения размеров элемента Border (в Reference нужно будет подключить System.Windows.Interactivity). Буду рад, если он окажется полезен таким же бегинерам как я.
Вложения
Тип файла: rar ShapeDragAndResize.rar (218.2 Кб, 63 просмотров)
0
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
25.09.2015, 22:25  [ТС]
Ещё вопрос.
В решении, которое находится в файле ShapeDragAndResize.rar, функционал перемещения элемента находится в файле класса RectDragAndResize.cs, а функционал изменения размеров в MainWindow.xaml.cs.
Наверное, более правильным было бы перенести код функционала изменения размеров тоже в файл класса RectDragAndResize.cs?

Как правильно это сделать и как тогда нужно будет подключить Rectangle_MouseDown и Rectangle_MouseUp?, которые сейчас прописаны в MainWindow.xaml.cs и подключены в Grid.
XML
1
<Grid Rectangle.MouseDown="Rectangle_MouseDown" Rectangle.MouseUp="Rectangle_MouseUp">
0
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
26.09.2015, 08:43
NewEd, правильно это сделать свой контрол наследник бордер и использовать его в приложение, в него же это все можно поместить. Единственное что логика изменения размеров должна быть универсальное а не только для канвы.
0
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
26.09.2015, 13:58  [ТС]
amarf, спасибо за ответ.
Я изучаю и такой вариант - сделать собственный контрол.
Однако мне нужно понять, как можно сделать и тот вариант о котором я спрашивал выше (26.09.2015 в 22:25).
0
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
26.09.2015, 14:10
Цитата Сообщение от NewEd Посмотреть сообщение
Я изучаю и такой вариант - сделать собственный контрол.
Вы не с того начали изучение ... совет: изучайте сам язык а не его плюшки... Вы еще базовых вещей не знаете, а уже хотите фишечки всякие делать...

Добавлено через 50 секунд
Все что делалось в этой теме можно оформить как юзер контрол и не париться .... даже менять особо ни чего не прижется
0
4 / 4 / 2
Регистрация: 11.10.2007
Сообщений: 52
26.09.2015, 15:23  [ТС]
amarf, спасибо за ответ.
У меня получается лучше осваивать язык, когда конкретную задачу решаю параллельно с погружением в теорию. Пока читаешь академические труды кажется всё более-менее понятным. Когда переходишь к реальной задаче, возникают ньюансы и сложности.
0
0 / 0 / 0
Регистрация: 19.05.2019
Сообщений: 46
21.05.2020, 20:12
А можно пример данного пользовательского компонента?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16141 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,119
Записей в блоге: 2
22.05.2020, 11:56
Цитата Сообщение от WallentSG Посмотреть сообщение
А можно пример данного пользовательского компонента?
К кому вы обращаетесь?
Тема "мёртвая" уже пять лет.
0
0 / 0 / 0
Регистрация: 19.05.2019
Сообщений: 46
22.05.2020, 15:08
Цитата Сообщение от Элд Хасп Посмотреть сообщение
К кому вы обращаетесь?
Тема "мёртвая" уже пять лет.
Что-то я не заметил сразу...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16141 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,119
Записей в блоге: 2
22.05.2020, 15:11
Цитата Сообщение от WallentSG Посмотреть сообщение
Что-то я не заметил сразу...
Создайте свою новую тему со своим вопросом и разъяснением проблемы.
В ней может сослаться (если надо) на эту тему.

Так быстрее ответят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2020, 15:11
Помогаю со студенческими работами здесь

Как запретить перемещение по экрану и изменение размеров формы
Привет всем..вот хотел бы сделать вклад в самообразование... у меня есть парочка вопросов 1) Как на кнопку повесить условие: ...

Обеспечить изменение цвета, размеров или перемещение графических элементов
Вывести на экран монитора горизонтально расположена строка текста длиной не более десяти символов таким образом, чтобы он плавно...

Графика: Построить объемный чертеж и обеспечить изменение его размеров и перемещение
Построить объемный чертеж, согласно варианта, и обеспечить изменение его размеров и перемещение: а. объект чертежа описать через...

Изменение размеров элементов, при изменение размеров формы
Доброго времени суток, подскажите, как в VS2016 реализовать подобное, а именно: Имеются следующая форма: С нижним текстбоксом я...

Изменение размеров рисунка при изменении размеров области вывода (окна)
Нужно сделать так, что бы рисунок менял свой размер при изменении окна... unit Unit1; interface uses Windows, Messages, SysUtils,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru