Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 917
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
textBlockl.FontSize = 20;
// textBlock1.Background = Brushes .Gray;
// Создаем горизонтальный линейный градиент
LinearGradientBrush Градиент = new LinearGradientBrush();
// Задаем область для закрашивания линейным градиентом:
Градиент.StartPoint = new Point(0, 0.5);
Градиент.EndPoint = new Point(1, 0.5);
// Четыре точки t=0.0; t=0.25; t=0.75 и t=1.0
// образуют три подобласти с переходом цвета
//от желтого к красному, далее синему и затем зеленому
Градиент.GradientStops.Add(new GradientStop(Colors.Yellow, 0.0));
Градиент.GradientStops.Add(new GradientStop(Colors.Red, 0.25));
Градиент.GradientStops.Add(new GradientStop(Colors.Blue, 0.75));
Градиент.GradientStops.Add(new GradientStop)Colors.LimeGreen, 1.0));
// Закрашиваем текст горизонтальным линейным градиентом:
textBlock1.Foreground = Градиент;
}
}
}
Как видно из программного кода, сразу после вызова процедуры InitiaiizeConponent задаем шуточный афоризм Игоря Губермана для свойства текстового блока TextBlock1.Text. Далее создаем горизонтальный линейный градиент между четырех точек, соответственно желтого, красного, синего и зеленого цветов. Градиент обеспечивает постепенный переход от одного цвета к другому (рис. 16.4). Убедиться в работоспособности программы можно, открыв решение в папке WpfGradientText.
Рис. 16.4. Закрашивание текстового блока горизональным линейным градинентом
Пример 123. Проверка орфографии в элементе управления редактирования текста
Если читатель помнит, в примере 54 главы 9 мы рассматривали возможность проверки орфографии (правописания) в текстовом поле и при этом использовали объектную библиотеку MS Word. Платформа .NET Framework 4 WPF позволяет обойтись без обращения к библиотеке MS Word, поскольку содержит в себе возможность проверки орфографии в редактируемом элементе управления, таком как TextBox или RichTextBox. При этом варианты проверки орфографии отображаются в виде контекстного меню. Например, когда пользователь щелкает правой кнопкой мыши по слову с ошибкой, он получает набор орфографических вариантов или вариант Ignore Аll(Пропустить все).
Создадим автономное настольное WPF-приложение, включающее в себе текстовое поле с возможностью проверки орфографии. Для этого запустим Visual Studio 2010, выберем среди шаблонов Windows шаблон WPF Application, т. е. автономное WPF-приложение, и назовем его WpfTextBoxOpфoгpaфия. Далее, перейдя на вкладку дизайна MainWindows.xaml, на панели элементов Toolbox дважды щелкнем по элементу
TextBox. Его расположение, размеры и другие свойства будем задавать в программном коде, поэтому сразу перейдем на вкладку кода MainWindows.xaml.cs (листинг 16.6).
Листинг 16.6. Включение проверки орфографии в элементе управления редактирования текста TextBox
// Автономное WPF-приложение содержит элемент управления TextBox с включенной проверкой правописания
// англоязычного текста. Технология .NET Framework 4 WPF обеспечивает только английский, французский, немецкий
// и испанский словари. Чтобы появилась возможность проверять русскоязычный текст, следует в коллекцию
// CustomDictionaries добавить пользовательский словарь русскоязычной лексики *.lex
using System;
using System.Windows;
using System.Windows.Controls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace WpfTextBoxOpфoгpaфия
{
///
/// Interaction logic for MainWindow.xaml
///< / summary>
public partial class MainWindow : Window
{
publiс MainWindow()
{
InitializeComponent();
this.Title = "Проверка орфографии";
// Размеры окна:
this.Width = 300; this.Height = 150;
// Расстояния от краев текстового поля до краев окна:
textBox1.Margin = new Thickness(10, 10, 0, 0);
// Размеры текстового поля:
textBox1.Width = 270; textBox1.Height = 95; textBox1.Focus();
// Включить проверку орфографии:
textBox1.SpellCheck.IsEnabled = true;
// Можно включить проверку орфографии также таким образом:
// SpellCheck.SetIsEnabled(textBoxl, true);
// Разрешить перенос слов на другую строку:
textBox1.TextWrapping = TextWrapping.Wrap;
// При нажатии клавиши
textBox1.AcceptsReturn = true;
// Коллекция словарей для проверки орфографии:
System.Collections.IList Словари = SpellCheck.
GetCustomDictionaries(textBoxl);
// Добавить в коллекцию словарей словарь, созданный нами:
Словари.Add(new Uri(@"С://dic.lex"));
// Software is like sex, it's better when it's free
}
}
}
Как видно из текста программы, чтобы включить средство проверки правописания, свойству SpellCheck.IsEnabled присвоим значение true в элементе управления редактирования текста. При включении этого средства проверки орфографии слова с ошибками подчеркиваются красной волнистой линией. Технология .NET Framework 4 WPF обеспечивает только английский, французский, немецкий и испанский словари.
Рис. 16.5. Пользовательский словарь разрешенной лексики
Чтобы появилась возможность проверять русскоязычный текст, следует в коллекцию CustomDictionaries добавить пользовательский словарь русскоязычной лекcики. Пользовательские словари используют файлы лексики, которые представляют собой текстовые файлы с расширением lex. Автор не нашел такого готового файла, возможно, читатель найдет его самостоятельно. Текстовый lex-файл лексики имеет следующую структуру (рис. 16.5).
В этом файле показаны первые несколько строк файла лексики. Каждая строка файла лексики содержит отдельное слово, утвержденное для проверки орфографии. Первая строка файла может указывать код языка и региональных параметров (LCTD), к которым применяется словарь. Если языковой стандарт не указан, словарь применяется для всех языков. Как видно, файл diс.lex содержит фамилию автора на английском языке, поэтому при проверке орфографии слово "Ziborov" не было подчеркнуто красной волнистой линией (рис. 16.6), а английское слово "free" написано с ошибкой, контекстное меню приводит варианты проверки орфографии.
Рис. 16.6. Слова с ошибками подчеркиваются красной волнистой линией
Убедиться в работоспособности программы можно, открыв решение в папке WpfTextBoxOpфoгpaфия.
Пример 124. Программирование WPF-проигрывателя. Компоновка элементов управления с помощью панели StackPanel
Среди элементов управления WPF на панели Toolbox можно найти элемент воспроизведения файлов мультимедиа MediaElement. На основе этого элемента в данном примере создадим автономное настольное WPF-приложение, реализующее проигрыватель мультимедиа с возможностями включения паузы, остановки и регулировки уровня громкости.
Для этой цели запустим среду Visual С#2010, выберем среди шаблонов Windows шаблон WPF Application, т. е. автономное WPF-приложение, и назовем eго WpfПроигрыватель. Далее перейдем на вкладку дизайна MainWindows.xaml. В этом примере для компоновки элементов управления мы будем использовать элемент StackPanel. Элемент StackPanel используется для расположения элементов по вертикали (по умолчинию) или горизонтали. Эти элементы, перенесенные нa вкладку дизайна после "стек-панели", называют дочерними по отношению к элементу StackPanel. Поэтому переключим вкладку MainWindows.xaml в состояние Design, а затем на панели элементов Toolbox (эту панель можно вызвать, как обычно, комбинацией клавиш <Ctrl>+<Alt>+<X>) дважды щелкнем на элементе StackPanel. Далее на пенели Toolbox дважды щелкнем последовательно на элементах MediaElement и StackPanel, т. е. вторая "стек-панель" будет вложена в первую. Иными словами, первый элемент StackPanel будет содержать в себе (будет иметь в качестве дочерних) элементы MediaElement и вторую StackPanel. Эти дочерние элементы будут располагаться по вертикали. Теперь, чтобы для второй "стек-панели" перенести три кнопки (Play, Pause и Stop), текстовый блок и элемент выбора из диапазона значений Slider (так называемый "ползунок"), дважды целкнем по ним последовательно на пенели Toolbox. Мы хотим расположить их горизонтально (см. рис. 16.7), но об этом и о многом другом мы позаботимся в программном коде. Хотя часто это делают на языке XAML (это оказывается более удобным), но не забываем, что мы пишем книгу о языке С#. Перед тем, как перейти нa вкладку программного кода, посмотрим содержимое файла разметки МainWindows.xaml (листинг 16.7).
Листинг 16.7. Разметка дизайна интерфейса WPF-проигрывателя
xmlns="http://schemas.microsoft.com/winfx/2 00 6/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
Из XAML-разметки видно, что внешний элемент StackPanel включает в себя элементы MediaElement и StackPanel, и эта вторая StackPanel в свою очередь содержит три кнопки Button, текстовый блок TextBlock и "ползунок" Slider.
Теперь перейдем на вкладку MainWindows.xaml.cs и напишем программный код, представленный в листинге 16.8. При этом не забываем, что для каждого программируемого события, например button1_ciick, следует его создать, скажем, используя окно Properties. При этом эти события отобразяться в XAML-разметке.
Листинг 16.8. Использование элемента управления MediaElementпри граммировании WFF-проигрывателя
// WPF-проигрыватель, позволяющий воспроизводить мультимедиа, включать паузу, остановку, а также настраивать
// громкость с помощью "ползунка"
using System;
using System. Windows;
using System.Windows .Controls;
using System. Windows .Media;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace WpfПpoигpывaтeль
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Строка заголовка Web-страницы:
this.Title = "Мадиа проигрыватель";
this.Width = 430; this.Height = 430;
// Компонуем элементы управления с помощью панели StackPanel:
stackPanel1.Width = 410; stackPanel1.Height = 400;
stackPanel2.Width = 410; stackPanel2.Height = 50;
// При отладке удобно задать фоновый цвет панели:
// stackPanel1-Background = Brushes.LightGray;
stackPanel1.Orientation = Orientation.Vertical;
stackPanel2.Orientation = Orientation.Horizontal;
button1. Focus () ; button1.Content = " Play";
button2.Content = "Pause"; button3.Content = "Stop";
// Расстояния от краев текстового блока до краев окна:
textBlock1.Margin = new Thickness(10, 13, 10, 0);
textBlock1.Text = "Громкость:"; textBlock1.FontSize = 12;
// Элемент выбора из диапазона значений "Ползунок" (Slider):
Slider1.Minimum = 0; slider1.Maximum = 1; slider1.Value = 0.5;
// MediaElement представляет элемент, содержащий аудио и/или видео:
mediaElement1.Source = new Uri(@"С://ВысшийПилотаж.mр4");
// или mediaElement1.Source = new Uri(@"C:\ВысшийПилотаж.mр4");
mediaElement1.Width = 400; mediaElement1.Height = 340;
mediaElement1.HorizontalAlignment = System. Windows.HorizontalAlignment.Left;
// Manual - состояние, используемое для управления элементом
// MediaElement вручную, при этом можно использовать интерактивные
// методы, такие как Play и Pause:
mediaElement1.LoadedBehavior = MediaState.Manual;
mediaElement1.UnloadedBehavior = MediaState.Stop;
mediaElement1.Stretch = Stretch.Fill;
}
private void button1_Click(object sender, RoutedEventArgs e)
{ // Чтобы начать просмотр ролика, следует подать команду Play.
// Если MediaElement пребывает в состоянии Pause, то команда Play
// продолжит воспроизведение ролика с текущего положения.
// Метод Play начинает воспроизведение файла мультимедиа:
mediaElement1.Play();
// Задаем громкость воспроизведения файла мультимедиа в
// зависимости от состояния элемента "ползунок":
mediaElement1.Volume = (double)slider1.Value;
}
private void mediaElement1_MediaEnded(object sender, RoutedEventArgs e)
{ // При завершении воспроизведения мультимедийного файла переводим
// элемент MediaElement в состояние Stop:
mediaElement1.Stop();
}
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs
{ // Если значение свойства Value элемента "ползунок" изменяется,
//то изменяем громкость вопроизведения мультимедиа Volume:
mediaElement1.Volume = (double)slider1.Value;
}
private void button2_Click(object sender, RoutedEventArgs e)
{ // Приостанавливаем воспроизведение файла мультимедиа:
mediaElement1.Pause();
}
private void button3_Click(object sender, RoutedEventArgs e)
{ // Останавливаем и возвращаем воспроизведение мультмедийного файла на начало: mediaElementl.Stop();
}
}
}
Как видно из программного кода, сразу после завершения процедуры InitializeComponent мы задаем размеры окна и размеры обоих элементов StackPanel и указываем, как будут ориентированы дочерние к ним элементы. Далее после очевидных установок переводим элемент MediaElement в "ручное" управление Manual, что позволит использовать интерактивные методы Play, Pause и Stop. Затем обрабатываем каждое из событий нажатия кнопок, регулировки звука и завершения воспроизведения. Фрагмент работы программы представлен на рис. 16.7.
Рис. 16.7. Интерфейс созданного WPF-проигрывателя
Убедиться в работоспособности программы можно, открыв решение в папке WPFПроигрыватель.
Пример 125. Наложение текста на видео
Вспомним видеоролик из предыдущего примера. Тихая морская гавань, размеренная, неторопливая летняя атмосфера. И вдруг в эту умиротворенность врывается рев самолета. Мы видим очень быстро летящий военный истребитель, неведомо как залетевший в эту мирную спящую гавань. Его крылья вот-вот коснутся воды. Будем считать, что этот ролик — начало большого фильма. Наша задача — наложить на это видео одно слово огромными буквами на весь экран: "ПОЛЕТ".
Для реализации поставленной задачи запустим Visual С#2010, выберем среди шаблонов Windows шаблон WPF Application, т. е. автономное WPF-приложение, и назовем его WpfTeкстНаВидео. Далее перейдем на вкладку дизайна MainWindows.xainl. Здесь в панели Toolbox найдем элемент управления MediaElement и двойным щелчком перенесем его на вкладку дизайна проектируемого окна. Размеры элемента и прочие параметры будем устанавливать в программном коде. Таким образом, перейдем на вкладку MainWindows.xaml.cs и введем текст, представленный в листинге 16.9.
Листинг 16.9. Использование элемента управления MediaElementпри программировании WPF-проигрывателя
// Программа воспроизводит видеоролик с помощью элемента MediaElement
//и накладывает на него форматированный текст "ПОЛЕТ"
using System;
using System.Windows;
using System.Windows.Media;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace WpfТекстНаВидео
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Title = "Высший пилотаж";
// Размеры окна:
this.Width = 420; this.Height = 355;
mediaElement1.Width = 400; mediaElement1.Height = 300;
mediaElement1.Source = new Uri(@"C://ВысшийПилотаж.mр4");
// или mediaElementl.Source = new Uri(@"C:\ВысшийЛилотаж.mр4");
// Создаем форматированный текст:
FormattedText ФорматированныйТекст = new FormattedText("ПОЛЕТ", System.Globalization.Culturelnfо.CurrentCulture, FlowDirection.LeftToRight,
new Typeface(this.FontFamily, FontStyles.Normal,
FontWeights.ExtraBold, FontStretches.Normal), 111, Brushes.Red);
// Создаем объект класса Geometry для отрисовки
// форматированного текста
Geometry ГеометрическаяФигура = new PathGeometry();
// Строим геометрическую фигуру с отрисованным форматированным текстом:
ГеометрическаяФигура = ФорматированныйТекст.BuildGeometry(new Point(0, -28));
// Масштабируем геометрическую фигуру, растягивая ее по вертикали:
ScaleTransform Масштаб = new ScaleTransform();
// Указываем коэффициент растяжения по вертикали:
Масштаб.ScaleY = 3.55;
ГеометрическаяФигура.Transform = Масштаб;
// Задаем геометрию в пределах контура медиаэлемента:
mediaElement1.Clip = ГеометрическаяФигура;
}
}
}
Рис. 16.8. Наложение текста на видео в WPF-приложении
Как видно из текста программы, после выполнения процедуры InitializeComponent задаем очевидные параметры для элемента воспроизведения файлов мультимедиа: его размеры и путь к медиафайлу. Далее создаем форматированный текст класса FormattedText. Объекты этого класса предназначены для рисования многострочного текста, в котором каждый символ можно форматировать отдельно. Объект FormattedText считается низкоуровневым, поскольку обрабатывает текст как графические элементы. Технология WPF применяет визуализацию на субпиксельном уровне, которая позволяет отображать текст с повышенной точностью формы, выравнивая символы до дробной части пиксела. Далее создаем объект класса Geometry для отрисовки форматированного текста, затем, масштабируя его, определяем место (Clip) объекта в пределах контура медиаэлемента. Кстати, свойство Clip часто используется для отсечения ("обрезания") от построенной геометрической фигуры некоторой области, предназначенной для визуализации. Фрагмент работы программы показан на рис. 16.8. Убедиться в работоспособности программы можно, открыв решение в папке WpfТекстНаВидео.
Пример 126. Переходы в WPF-приложениях
Приложения WPF часто состоят из набора страниц. По мере работы пользователя с приложением он переходит со страницы на страницу, как в Web-приложении. Windows Presentation Foundation поддерживает переходы в стиле браузера, которые могут использоваться в приложениях обоих типов: автономных приложениях и ХВАР-приложениях Web-браузера. Для демонстрации возможности перехода от страницы к странице создадим WPF-приложние, выполняемое в браузере. Это приложение будет содержать в себе две Web-страницы. Первая Web-страница имеет кнопку для перехода на вторую Web-страницу и гиперссылку для перехода на почтовый сервер www.ukr.net. Вторая Web-страница содержит только гиперссылку для перехода назад на первую Web-страницу. Таким образом, мы продемонстрируем возможность перехода с одной страницы на другую с помощью oбъекта NavigationService и гиперссылки Hyperlink.
Итак, запустим Visual Studio 2010, закажем новый проект шаблона WPF Browser Application С# (из инсталлированных шаблонов Windows), назовем новый проект WpfXpabnepexoды. После щелчка на кнопке ОК попадем на вкладку Рage1.xaml. Вызвав панель элементов Toolbox (например, с помощью комбинации клавиш <Ctrl>+<Alt>+<X>), дважды щелкнем на элементе Button, а затем на элементе TextBlock. Таким образом, на вкладке дизайна Page1.xaml появятся один элемент над другим: командная кнопка и текстовый блок. На вкладке программного кода Page1.xaml.cs введем программный код, представленный в листинге 16.10.
Листинг 16.10. Организация переходов на другие ресурсы, страница 1
// Данное WPF-приложение содержит в себе две Web-страницы: Page1.xaml и Page2.xaml. На первой мы разместили
// командную кнопку и текстовый блок. В программном коде первой страницы мы создали объект Hyperlink,
// чтобы обеспечить переход на почтовый сервер www.ukr.net. Щелчок мышью на кнопке реализует переход
// на вторую Web-страницу Page2.xaml. Возврат со второй страницы на первую организован также с помощью
// гиперссылки Hyperlink
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows .Documents ;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace WpfXpabnepexoды
{
///
/// Interaction logic for Page1.xaml
///
public partial class Page1: Page
{
public Page1()
{
InitializeComponent();
this.WindowTitle = "Первая WPF-страница";
button1.Width = 170; button1.Focus();
button1.Content = "Перейти на вторую страницу";
textBlock1.Text = "Перейти ";
// Создаем объект класса Hyperlink для размещения гиперссылки:
Hyperlink Ссылка = new Hyperlink();
// Задаем ссылку для перехода на нужный ресурс:
Ссылка.NavigateUri = new Uri("http://www.ukr.net");
// Задаем текст, отображаемый в элементе управления Hyperlink:
Ссылка.Inlines.Add("на почтовый сервер www.ukr.net");
// Добавляем ссылку в текстовый блок:
textBlock1.Inlines.Add(Ссылка);
}
private void button1_Click(object sender, RoutedEventArgs e)
{ // Объект NavigationService обеспечивает навигацию на другой ресурс:
this.NavigationService.Navigate(new Uri("Page2.xaml", I UriKind.Relative));
}
}
}
Текст программы очевиден из его содержания и приведенных комментариев. Единственное, поясним Hyperlink. Такого элемента нет в панели Toolbox, поскольку он создается внутри других элементов, например TextBlock. Поэтому мы создали объект класса Hyperlink в программном коде, задали его некоторые параметры и добавили к элементу TextBlock командой Inlines.Add. Фрагмент работы Web-страницы Page1xaml показан на рис. 16.9.
Рис. 16.9. Интерфейс первой Web-страницы WPF-приложения
Теперь создадим вторую Web-страницу, на которую будем переходить, щелкнув по командной кнопке. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Page(WPF). На вкладку Page2.xaml перенесем из панели элементов Toolbox метку Label и текстовый блок TextBlock. Теперь перейдем на вкладку программного кода Page2.xaml.cs и введем текст, представленный в листинге 16.11.
Листинг 16.11. Организация переходов на двугие ресурсы, страница 2
using System;
using System.Windows.Controls;
using System.Windows.Documents;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace WpfXpabnepexoды
{
///
/// Interaction logic for Page2.xaml
///
public partial class Page2 : Page
{
public Page2()
{
InitializeComponent();
this.WindowTitle = "Вторая WPF-страница";
label1.Content = "Вы першли на вторую страницу";
textBlock1.Text = "Щелкните ";
// Создаем объект класса Hyperlink для размещения гиперссылки:
Hyperlink Ссылка = new Hyperlink();
// Задаем ссылку для перехода на нужный ресурс:
Ссылка.NavigateUri = new Uri("Pagel.xaml", UriKind.Relative);
// Задаем текст, отображаемый в элементе управления Hyperlink:
Ссылка.Inlines.Add("здесь");
// Добавляем ссылку в текстовый блок:
textBlock1.Inlines.Add(Ссылка) ;
// Добавляем текст в текстовый блок:
textBlock1.Inlines.Add(" для перехода назад на первую страницу.");
}
}
}
Как видно из текста программы, использованный подход аналогичен программной поддержке для первой Web-страницы. Фрагмент работы второй Web-страницы Page2.xaml показан на рис. 16.10.
Рис. 16.10. Интерфейс второй Web-страницы WPF-приложения
Убедиться в работоспособности программы можно, открыв решение в папке WpfXpabПepexoды.
Желаю вам, уважаемые читатели, получить не только удовольствие от процесса программирования на Visual С#, но и зарабатывать достойные вас деньги.
Извините, все.
Приложение Описание компакт-диска Таблица П1. Содержимое компакт-диска
Название папки | Описание программы | Номер примера |
ComboBox_Calc | Программа, реализующая функции калькулятора. Здесь для отображения вариантов выбора арифметических действий используется комбинированный список ComboBox | 9 |
Unico | Программа демонстрирует возможность вывода в текстовую метку, а также в диалоговое окно MessageBox греческих букв. Программа приглашает пользователя ввести радиус R, чтобы вычислить длину окружности | 10 |
Сумма | Консольное приложение складывает два числа и выводит сумму на консоль | 11 |
ТаблКорней | Консольное приложение задает цвета и заголовок консоли, а затем выводит таблицу извлечения квадратного корня от нуля до десяти | 12 |
ConsoleMessageBox | Консольное приложение выводит в окно MessageBox текущую дату и время в различных форматах, используя String.Format | 13 |
CcылкaHaVisualBasic | В данном консольном приложении Visual С# используем функции Visual Basic. Приложение приглашает пользователя ввести два числа, анализирует, числа ли ввел пользователь, и выводит результат суммирования на экран. При этом используются функции Visual Basic: inputBox, isNumeric (для контроля, число ли ввел пользователь) и MsgBox | 14 |
Monitoring | Программа отображает координаты курсора мыши относительно экрана и элемента управления. Программа содержит форму, список элементов ListBox и два текстовых поля. Программа заполняет список ListBox данными о местоположении и изменении положения курсора мыши. Кроме того, в текстовых полях отображаются координаты положения курсора мыши относительно экрана и элемента управления ListBox | 15 |
NewButton | Программа создает командную кнопку в форме "программным" способом, т. е. с помощью написания непосредственно программного кода, не используя при этом панель элементов управления Toolbox. Программа задает свойства кнопки: ее видимость, размеры, положение, надпись на кнопке и подключает событие "щелчок на кнопке" | 16 |