Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Формирование квадратных матриц




квадратная 5x5 Alt+A

произвольная

диагональная

треугольная

симметрическая

ортогональная

Отметим, что головные разделы Формирование квадратных матриц, Операции с матрицей вводятся точно так же, как и названия разделов. В разделе квадратная 5x5 Alt+A свойство Default следует установить в true, а в свойство ShortCut («горячие» клавиши) – вписать Alt+A.

4. В указанные ниже разделы введите следующие подразделы:

произвольная | неособенная диагональная | единичная

| особенная | трехдиагональная

| ленточная

треугольная | нижняя | квазидиагональная

| верхняя

симметрическая | общего вида

| положительно определенная

| кососимметрическая

Для этого, не выходя из Конструктора Меню, после выделения нужного раздела щелчком правой кнопкой вызовите контекстное меню и выберите пункт Создать подменю.

Операции с матрицей

вычисление определителя Ctrl+A обращение | вычисление m - нормы

вычисление ранга Ctrl+B | вычисление k – нормы

вычисление следа Ctrl+C | вычисление l - нормы

––––––––––––––––––––––––––––––

транспонирование Ctrl+D

«Горячие» клавиши в разделах под головным разделом Операции с матрицей выбираются в свойстве ShortCut из выпадающего списка. В свойство Caption раздела, следующего за разделом вычисление следа Ctrl+C, введите символ '–‘, чтобы вместо раздела появился разделитель. Для раздела обращение свойство Break установите в mbBreak, а для раздела вычисление m–нормы – в mbBarBreak.

5. Со страницы Стандарт перенесите на форму компонент Memo1. Установите шрифт (Font) Courier, полужирный. С этой же страницы перенесите на форму кнопку Button1, назовите ее ПЕРЕХОД НА 1-Ю ВСПОМОГАТЕЛЬНУЮ ФОРМУ, а в обработчик щелчка на кнопке впишите оператор: Form2->Show();

Этот оператор покажет пользователю окно 1-й вспомогательной формы Form2.

6. В файле Unit1.cpp после определения конструктора поместите следующие объявления и определения (курсив):

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

extern int r[50][50],a[50][50],n,m;

extern AnsiString s[50][50],s1[50];

//---------------------------------------------------------------------------

void form()

{ int i,j;

for(i=0;i<n;i++)

for(j=0;j<m;j++)

r[i][j]=random(10);

Form1->Memo1->SetFocus();

Form1->Memo1->Clear();

for(i=0;i<n;i++){

s1[i]="";

for(j=0;j<m;j++){

s[i][j]=" "+IntToStr(r[i][j]);

s1[i]+=s[i][j];}

Form1->Memo1->Lines->Add(s1[i]);}

}

//---------------------------------------------------------------------------

void transp()

{

int i,j;

for(i=0;i<n;i++)

for(j=0;j<m;j++)

a[j][i]=r[i][j];

i=n;n=m;m=i;

Form1->Memo1->SetFocus();

Form1->Memo1->Clear();

for(i=0;i<n;i++){

s1[i]="";

for(j=0;j<m;j++){

s[i][j]=" "+IntToStr(a[i][j]);

s1[i]+=s[i][j];}

Form1->Memo1->Lines->Add(s1[i]);}

}

7. В обработчик щелчка на разделе квадратная 5x5 Alt+A впишите:

n=m=5;

form();

8. В обработчик щелчка на подразделе единичная впишите:

n=m=5;

int i,j;

for(i=0;i<n;i++)

for(j=0;j<m;j++)

if(i==j)r[i][j]=1;

else r[i][j]=0;

Memo1->SetFocus();

Memo1->Clear();

for(i=0;i<n;i++){

s1[i]="";

for(j=0;j<m;j++){

s[i][j]=" "+IntToStr(r[i][j]);

s1[i]+=s[i][j];}

Memo1->Lines->Add(s1[i]);}

9. В обработчик щелчка на разделе транспонирование Ctrl+D впишите:

transp();

10. Командой Файл | Новый | Форма добавьте в проект первую вспомогательную форму Form2 и назовите ее 1-Я ВСПОМОГАТЕЛЬНАЯ ФОРМА. Сохраните файл модуля под именем по умолчанию Unit2. Со страницы Стандарт на форму перенесите компонент MainMenu1, двойным щелчком на нем перейдите в Конструктор Меню (окно Form2-> MainMenu1) и сконструируйте следующее меню:

Формирование прямоугольных матриц Операции с двумя матрицами

заполненная 4x5 сложение

заполненная общего вида вычитание

разреженная умножение

строка объединение по горизонтали

столбец объединение по вертикали

11. Поместите на 1-ю вспомогательную форму кнопку Button1, назовите ее ПЕРЕХОД НА ГЛАВНУЮ ФОРМУ, а в обработчик щелчка на ней впишите оператор:

Form1->Show();

Этот оператор покажет пользователю окно главной формы Form1. Чтобы компилятор понял операторы Form2->Show(); и Form1->Show();

надо в модуль главной формы Unit1.cpp вставить ссылку на заголовочный файл модуля 1-й вспомогательной формы Unit2.h #include “Unit2.h” и в модуль 1-й вспомогательной формы Unit2.cpp вставить ссылку на заголовочный файл модуля главной формы Unit1.h: #include “Unit1.h”.

Примечания. Для перехода из одного модуля в другой пользуйтесь быстрой кнопкой Вид модуля (в самом верхнем ряду кнопок первая слева) или комбинацией клавиш Ctrl+F12. Для перехода с одной формы на другую пользуйтесь быстрой кнопкой Вид формы (в самом верхнем ряду кнопок вторая слева) или комбинацией клавиш Shift+F12. Для перехода с формы на модуль пользуйтесь быстрой кнопкой Переключатель Форма | Модуль (в самом верхнем ряду кнопок третья слева) или клавишей F12.

12. В файле Unit2.cpp после определения конструктора поместите следующие объявления (курсив):

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

int r[50][50],a[50][50],n,m;

AnsiString s[50][50],s1[50];

void form();

void transp();

13. В обработчик щелчка на разделе заполненная 4x5 впишите:

n=4; m=5;

form();

14. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в том, что во время выполнения пользователю доступны обе формы.

15. В окне Form2->MainMenu1 Конструктора Меню установите для головного раздела Операции с двумя матрицами и для его разделов GroupIndex =3, RadioItem = true, AutoCheck = true. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в том, что данные разделы стали работать как радиокнопки.

16. Для головного раздела Формирование прямоугольных матриц и для его разделов установите GroupIndex =2, для головного раздела Формирование квадратных матриц и для его разделов и подразделов установите GroupIndex =2, а для головного раздела Операции с матрицей и для его разделов установите GroupIndex =4.

17. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в том, что объединения меню не происходит при переходе на 1-ю вспомогательную форму (тогда она активизируется).

18. Теперь для компонента MainMenu1 1-й вспомогательной формы установите свойство AutoMerge в true. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в том, что при переходе на 1-ю вспомогательную форму появляется объединенное меню на главной форме с заменами разделов меню главной формы разделами меню 1-й вспомогательной формы, имеющих GroupIndex =2.

19. И, наконец, для головного раздела Формирование прямоугольных матриц и для его разделов установите GroupIndex =1. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в том, что при переходе на 1-ю вспомогательную форму на главной форме появляется объединенное меню со всеми разделами объединяемых меню.

20. В заключение для компонента MainMenu1 1-й вспомогательной формы установите свойство AutoMerge в false, введите команду Сохранить все и запуском на выполнение убедитесь в работоспособности приложения.

 

Перейдем к рассмотрению контекстного всплывающего меню. Это меню привязано к конкретным компонентам. Оно всплывает, если во время, когда данный компонент в фокусе, пользователь щелкнет правой кнопкой мыши. Обычно в контекстное меню включают те команды главного меню, которые в первую очередь могут потребоваться при работе с данным компонентом.

Контекстному меню соответствует компонент PopupMenu. Поскольку в приложении могут быть несколько контекстных меню, то и компонентов PopupMenu может быть несколько. Оконные компоненты: формы, панели, окна редактирования, а также метки и др. имеют свойство PopupMenu, которое по умолчанию пусто, но куда можно поместить имя того компонента PopupMenu, с которым будет связан данный компонент.

Формирование контекстного всплывающего меню производится с помощью Конструктора Меню, вызываемого двойным щелчком на PopupMenu, что совпадает с действиями для главного меню. Однако конструирование контекстного меню можно упростить по сравнению с конструированием главного меню. Поскольку разделы контекстного меню обычно повторяют некоторые разделы уже сформированного главного меню, то можно обойтись копированием соответствующих разделов.

 

Задание. Сформировать контекстное меню из разделов квадратная 5x5 Alt+A и транспонирование Ctrl+D.

1. На главную форму сохраненного выше проекта со страницы Стандарт перенесите компонент PopupMenu1 и двойным щелчком на нем перейдите в Конструктор Меню (окно Form1-> PopupMenu1). Затем щелкните правой кнопкой мыши и во всплывшем меню выберите команду Выбор меню… В окне Выбор меню выберите MainMenu1 и нажмите ОК.

2. В появившемся главном меню выделите нужный раздел или разделы (при нажатой клавише Shift выделяют разделы в заданном диапазоне, при нажатой клавише Ctrl выделяют совокупность разделов, не являющихся соседними). Затем скопируйте выделенный раздел или разделы в буфер обмена, нажав клавиши Ctrl+C. После этого опять щелкните правой кнопкой мыши, выберите команду Выбор меню… и вернитесь в контекстное меню. Укажите курсором место, в которое нужно вставить скопированный раздел или разделы, и нажмите клавиши чтения из буфера обмена – Ctrl+V. Разделы меню вместе со всеми их свойствами (но не событиями!) будут скопированы в создаваемое контекстное меню. Если же разделы, требуемые для переноса из главного меню в контекстное, находятся под разными заголовками (как в задании), то описанные выше действия необходимо выполнять для каждого раздела.

3. В свойство PopupMenu компонентов Form1 и Memo1 внесите PopupMenu1.

4. В обработчик щелчка на разделе квадратная 5x5 Alt+A впишите: n=m=5;

form();

5. В обработчик щелчка на разделе транспонирование Ctrl+D впишите:

transp();

6. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в том, что контекстное меню появляется при щелчке правой кнопкой мыши как на главной форме, так и на компоненте Memo1.

 

Компонент HotKey, расположенный на странице Win32, является вспомогательным, обеспечивающим возможность задания самим пользователем «горячих» клавиш, определяющих быстрый доступ к разделам меню. К тому же этот компонент позволяет задать такие сочетания «горячих» клавиш, которые не предусмотрены в выпадающем списке свойства разделов меню ShortCut.

Основное свойство компонента – HotKey, равное по умолчанию комбинации клавиш Alt+A. Это свойство можно прочесть и присвоить свойству ShortCut какого-то раздела меню. Например, оператор

MOpen->ShortCut = HotKey1->HotKey;

присваивает разделу меню с именем MOpen комбинацию клавиш, заданную в компоненте HotKey1.

В заключение рассмотрим пример использования компонента HotKey и настройки «горячих» клавиш для меню на 1-й вспомогательной форме в процессе выполнения приложения.

 

1. Командой Файл | Новый | Форма добавьте в проект вторую вспомогательную форму Form3 и назовите ее 2-Я ВСПОМОГАТЕЛЬНАЯ ФОРМА – ГОРЯЧИЕ КЛАВИШИ. Сохраните файл модуля под именем по умолчанию – Unit3.

2. На 1-й вспомогательной форме добавьте в меню раздел настройка в головной раздел Формирование прямоугольных матриц. В обработчик команды настройка вставьте оператор

Form3->ShowModal();

Этот оператор покажет пользователю окно 2-й вспомогательной формы как модальное – т.е. пользователь не сможет вернуться в другую форму, пока не закроет 2-ю вспомогательную. Чтобы компилятор понял этот оператор, надо в модуль 1-й вспомогательной формы Unit2.cpp вставить ссылку на заголовочный файл модуля 2-й вспомогательной формы Unit3.h

#include “Unit3.h”.

Поскольку из модуля Unit3.cpp надо будет видеть меню модуля Unit2.cpp, то аналогичным образом введите и обратную связь – свяжите модуль Unit3 с Unit2: #include “Unit2.h”.

3. На 2-ю вспомогательную форму перенесите со страницы Стандарт два списка ListBox, разместив их по горизонтали в верхней части формы, кнопку Button1, поместив ее внизу справа, а со страницы Win32 – компонент HotKey1, поместив его внизу слева. В компоненте HotKey1 сотрите с помощью Инспектора Объектов значение по умолчанию (Alt+A) свойства HotKey. Кнопку назовите OK. Затем со страницы Стандарт перенесите три метки Label. Первую – поместите над первым списком ListBox1 и назовите МЕНЮ, вторую – поместите над вторым списком ListBox2 и назовите РАЗДЕЛ, третью – поместите над HotKey1 и назовите ГОРЯЧИЕ КЛАВИШИ.

В списке ListBox1 будут отображаться головные разделы меню, в ListBox2 – разделы меню, соответствующие выбранному головному разделу. В окне HotKey1 в местопредварительно помещенного туда курсора отобразится сочетание нажатых «горячих» клавиш, соответствующее выбранному разделу. При нажатии кнопки OK будет зафиксирован в меню сделанный пользователем выбор «горячих» клавиш и будет закрыта 2-я вспомогательная форма.

4. Теперь впишите обработчики событий:

void __fastcall TForm3::FormShow(TObject *Sender)

{

/*Загрузка ListBox1 головными разделами меню

при событии OnShow формы Form3 */

 

ListBox1->Clear();

for(int i=0; i<Form2->MainMenu1->Items->Count; i++)

ListBox1->Items->Add(Form2->MainMenu1->Items->Items[i]->Caption);

ListBox1->ItemIndex=0;

//Обращение к процедуре загрузки ListBox2

ListBox1Click(Sender);

}

//---------------------------------------------------------------------------

void __fastcall TForm3::ListBox1Click(TObject *Sender)

{

/* Загрузка ListBox2 разделами меню

MainMenu1->Items->Items[ListBox1->ItemIndex],

выделенного в ListBox1 пользователем и

при событии OnShow формы Form3 головного раздела меню */

ListBox2->Clear();

for(int i=0; i<Form2->MainMenu1->Items->Items[

ListBox1->ItemIndex]->Count; i++)

ListBox2->Items->Add(Form2->MainMenu1->Items->Items[

ListBox1->ItemIndex]->Items[i]->Caption);

ListBox2->ItemIndex=0;

// Обращение к процедуре ListBox2Click

ListBox2Click(Sender);

}

//---------------------------------------------------------------------------

void __fastcall TForm3::ListBox2Click(TObject *Sender)

{

/* Занесение «горячих» клавиш выделенного в ListBox2 раздела

в компонент HotKey1*/

HotKey1->HotKey= Form2->MainMenu1->Items->Items[

ListBox1->ItemIndex]->Items[

ListBox2->ItemIndex]->ShortCut;

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Button1Click(TObject *Sender)

{

/* Изменение «горячих» клавиш выбранного раздела меню

и закрытие 2-й вспомогательной формы */

Form2->MainMenu1->Items->Items[

ListBox1->ItemIndex]->Items[ListBox2->ItemIndex]->ShortCut

=HotKey1->HotKey;

Close();

}

//---------------------------------------------------------------------------

 

При событии OnShow формы Form2 происходит загрузка списка ListBox1 головными разделами меню. Цикл загрузки перебирает индексы от нуля до Form2->MainMenu1->Items->Count-1. Свойство Count равно числу головных разделов в меню.

При щелчке пользователя на списке ListBox1 происходит загрузка списка ListBox2. При этом к соответствующим разделам меню осуществляется доступ с помощью выражения Form2->MainMenu1->Items->Items[ ListBox1->ItemIndex]->Items[i]. В этом выражении Form2->MainMenu1->Items->Items[ListBox1->ItemIndex] – головной раздел меню, выбранный пользователем в ListBox1. Каждый такой раздел можно рассматривать как элемент массива меню и в то же время он сам является массивом разделов второго уровня. Поэтому его свойство Items[i] указывает на подраздел с индексом i. В конце данной процедуры вызывается процедура ListBox2Click, загружающая данные в HotKey1.

5. После ввода команды Сохранить все запустите приложение на выполнение. Убедитесь в правильной работе приложения. При щелчке на разделе настройка откроется 2-я вспомогательная форма. При щелчке пользователя на списке ListBox2 происходит загрузка компонента HotKey1 символами «горячих» клавиш выбранного пользователем раздела. Если раздел не имеет «горячих» клавиш, то в окне HotKey1 отображается текст “ Нет ”. Далее пользователь может войти в окно HotKey1 и нажать сочетание «горячих» клавиш, которое он хочет назначить выбранному им разделу меню. Обработка щелчка на кнопке OK фиксирует это сочетание в разделе меню и закрывает 2-ю вспомогательную форму.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 532 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2387 - | 2145 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.