unit Unit1;
interface
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:= 0 to 3 do
begin
StringGrid2.Cells[i,0]:= StringGrid1.Cells[i,3];
StringGrid2.Cells[i,3]:= StringGrid1.Cells[i,0];
StringGrid2.Cells[i,1]:= StringGrid1.Cells[i,1];
StringGrid2.Cells[i,2]:= StringGrid1.Cells[i,2];
end
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid2.Rows[0]:= StringGrid1.Rows[3];
StringGrid2.Rows[1]:= StringGrid1.Rows[1];
StringGrid2.Rows[2]:= StringGrid1.Rows[2];
StringGrid2.Rows[3]:= StringGrid1.Rows[0];
end;
procedure TForm1.Button3Click(Sender: TObject);
var i, j: Integer;
begin
for i:= 0 to 3 do for j:= 0 to 3 do
StringGrid2.Cells[j, i]:=‘‘
end;
end.
Создание меню. Компоненты MainMenu и PopupMenu
Создать главное меню, имеющее упрощенную структуру меню Windows: File, Edit, Run. В качестве реакции на выбор пункта меню выдавать сообщения о выборе соответствующего пункта.
Решение
1. Создадим новую папку, например D:\MyProject\MAINMENU.
2. Откроем новый проект.
3. Из страницы Standard поместим на Form1 компонент MainMenu1.
4. В Инспекторе Объектов выберем свойство Items компонента MainMenu1, а затем щелкнем по кнопке с тремя точками. После этого на экране появится окно конструктора меню.
5. С помощью конструктора меню наберем элементы меню, указанные в условии
примера.
Напомним, что подчеркнутая буква в имени пункта означает клавишу быстрого перехода. С помощью этой клавиши можно осуществить быстрый переход на данный элемент меню. Задать клавишу быстрого перехода можно с помощью символа &, помещаемого перед соответствующим символом текста. Например: &File, Cu&t.
Обратите внимание, что, вводя название элемента меню, вы задаете значение свойства Caption для этого элемента меню. Для того чтобы ввести код клавиши быстрого управления, например Ctrl+S для пункта Save, необходимо для соответствующего элемента меню выбрать свойство ShortCut в Инспекторе Объектов и в выпадающем списке выбрать нужное значение. Для того чтобы элемент меню представлял собой разделительную линию, следует его свойству Caption задать значение ‘-‘. Для создания подменю, например для пункта Reopen, следует выбрать нужный элемент меню и щелкнуть правой кнопкой мыши. В появившемся контекстном меню конструктора выберите пункт Create Submenu. Далее введите пункты подменю.
6. Если вы ввели все пункты меню, то закройте окно конструктора меню. На форме Form1 осталось созданное меню. Для определения реакции на выбор пунктов меню следует по очереди выбирать все пункты меню и щелкать по ним мышкой. В результате появится окно Редактора Кода, в котором нужно ввести программный код для обработчика события OnClick. Например, для элемента меню New обработчик события OnClick будет иметь вид:
procedure TForm1.New1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт New’);
end;
Здесь ShowMessage - это стандартная функция, выводящая на экран окно с заданным сообщением.
7. Сохраните проект и запустите его на выполнение.
Приведем полный текст сформированного модуля.
Текст модуля Unit1.pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
New1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
Close1: TMenuItem;
N1: TMenuItem;
Reopen1: TMenuItem;
Project11: TMenuItem;
Project21: TMenuItem;
Project31: TMenuItem;
Edit1: TMenuItem;
Cut1: TMenuItem;
Copy1: TMenuItem;
Past1: TMenuItem;
Delete1: TMenuItem;
Run1: TMenuItem;
Run2: TMenuItem;
N2: TMenuItem;
StepOver1: TMenuItem;
TraceInto1: TMenuItem;
procedure New1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure Close1Click(Sender: TObject);
procedure Project11Click(Sender: TObject);
procedure Project21Click(Sender: TObject);
procedure Project31Click(Sender: TObject);
procedure Cut1Click(Sender: TObject);
procedure Copy1Click(Sender: TObject);
procedure Past1Click(Sender: TObject);
procedure Delete1Click(Sender: TObject);
procedure Run2Click(Sender: TObject);
procedure StepOver1Click(Sender: TObject);
procedure TraceInto1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.New1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт New’);
end;
procedure TForm1.Open1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Open’);
end;
procedure TForm1.Save1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Save’);
end;
procedure TForm1.Close1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Close’);
end;
procedure TForm1.Project11Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Project1’);
end;
procedure TForm1.Project21Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Project2’);
end;
procedure TForm1.Project31Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Project3’);
end;
procedure TForm1.Cut1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Cut’);
end;
procedure TForm1.Copy1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Copy’);
end;
procedure TForm1.Past1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Past’);
end;
procedure TForm1.Delete1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Delete’);
end;
procedure TForm1.Run2Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Run’);
end;
procedure TForm1.StepOver1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Step Over’);
end;
procedure TForm1.TraceInto1Click(Sender: TObject);
begin
ShowMessage(‘Выбран пункт Trace Into’);
end;
end.
Пример 6.2
Создадим контекстное меню PopupMenu для проекта из примера 6.1.
Решение
1. Скопируем содержимое папки D:\MyProject\StringGrid в папку
D:\MyProject\PopupMenu.
2. При помощи команды главного меню File|Open откроем Project1 из папки
D:\MyProject\PopupMenu.
3. Со страницы Standard поместим на Form1 компонент PopupMenu1.
4. Войдем в свойство Items компонента PopupMenu1 и зададим элементы контекстного меню.
5. Не выходя из конструктора меню, двойным щелчком по каждому элементу будем
вызывать Редактор Кода. Так, для элемента меню Решение 1 обработчик события OnClick будет иметь вид:
procedure TForm1.N11Click(Sender: TObject);
Begin
Button1Click(Button1);
end;
где Button1Click - процедура, созданная ранее (см. пример 2.9). В качестве параметра процедуры можно использовать указатель на любой объект, например компонент Button1.
Аналогично из элементов меню Решение 2 и Очистить вызовем процедуры Buton2Click и Button3Click соответственно.
6. Для того чтобы локальное меню было доступным в любой точке формы Form1, установим ее свойство PopupMenu равным PopupMenu1.
7. Сохраним проект и запустим его на выполнение. Щелчок правой кнопкой мыши активизирует локальное меню.
Приведем текст модифицированного модуля Unitl.pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, Menus;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N21: TMenuItem;
N1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:= 0 to 3 do
begin
StringGrid2.Cells[i,0]:= StringGrid1.Cells[i,3];
StringGrid2.Cells[i,3]:= StringGrid1.Cells[i,0];
StringGrid2.Cells[i,1]:= StringGrid1.Cells[i,1];
StringGrid2.Cells[i,2]:= StringGrid1.Cells[i,2];
end
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid2.Rows[0]:= StringGrid1.Rows[3];
StringGrid2.Rows[1]:= StringGrid1.Rows[1];
StringGrid2.Rows[2]:= StringGrid1.Rows[2];
StringGrid2.Rows[3]:= StringGrid1.Rows[0];
end;
procedure TForm1.Button3Click(Sender: TObject);
var i, j: Integer;
begin
for i:= 0 to 3 do
for j:= 0 to 3 do
StringGrid2.Cells[j, i]:= ‘ ‘
end;
procedure TForm1.N11Click(Sender: TObject);
begin
Button1Click(Button1);
end;
procedure TForm1.N21Click(Sender: TObject);
begin
Button2Click(Button2);
end;
procedure TForm1.N1Click(Sender: TObject);
begin
Button3Click(Button3);
end;
end.
Диалоговые окна.
Создадим простой текстовый редактор, который позволил бы с помощью диалоговых окон сохранять и открывать текстовые файлы, а также изменять характеристики шрифта.
Решение
1. Создадим новую папку: D:\MyProject\DIALOG.
2. Откроем новый проект с помощью команды главного меню File| New | Application.
3. Разместим на Form1 следующие компоненты: компоненты OpenDialog1, SaveDialog1 и FontDialog1 выберем из страницы Dialogs, a Memo1, Button1, Button2, и ButtonЗ - из страницы Standard Палитры Компонентов.
4. Выберем свойство Lines компонента Memo1 и щелкнем по появившейся кнопке с тремя точками. В появившемся окне удалим текст ‘Memo1’. Нажмем ОК. Мы добились того, что при запуске программы окно редактора будет пустым.
5. Выберем свойство Filter компонента OpenDialog1 и щелкнем по появившейся кнопке с тремя точками. Появится диалоговое окно Filter Editor, с помощью которого можно задать тексты фильтров и сами фильтры.
В первой строке в окне Filter Name введем:
Текстовые файлы (*.txt,*.doc)
а в окне Filter:
*.txt; *.doc
Во второй строке в окне Filter Name введем:
Все файлы (*. *)
а в окне Filter:
*.*
Нажмем кнопку ОК.
6. Для компонента SaveDialog1 значение свойства DefaultExt установим равным txt.
Т.е., если при сохранении файла расширение не будет указано, то по умолчанию добавится расширение txt.
7. Кнопкам Button1, Button2, и Button3 установим свойство Caption равным ‘Открыть’, ‘Сохранить’ и ‘Шрифт’ соответственно.
8. В обработчик события OnClick для кнопки Button1 вставим следующие операторы:
with OpenDialog1 do
begin
if not Execute then Exit;
Memo1.Lines.LoadFromFile(FileName)
end;
9. В обработчик события OnClick для кнопки Button2 вставим следующие операторы:
with SaveDialog1 do
begin
if not Execute then Exit;
Memo1.Lines.SaveToFile(FileName)
end;
10. В обработчик события OnClick для кнопки Button3 вставим
with FontDialog1 do
begin
if not Execute then Exit;
Memo1.Font:= Font
end;
11. Сохраните проект и запустите его на выполнение. Наберите произвольный текст в окне редактора. Сохраните его в папке D:\MyProject\DIALOG.
Очистите с помощью локального меню окно редактора. Для появления локального меню следует щелкнуть правой клавишей мыши, когда ее указатель находится в пределах окна редактора. Откройте ранее созданный файл. Измените его шрифт.
Приведем полный код сформированного модуля. Unit1.pas:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
FontDialog1: TFontDialog;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
with OpenDialog1 do
begin
if not Execute then Exit;
Memo1.Lines.LoadFromFile(FileName)
end
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
with SaveDialog1 do
begin
if not Execute then Exit;
Memo1.Lines.SaveToFile(FileName)
end
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
with FontDialog1 do
begin
if not Execute then Exit;
Memo1.Font:= Font
end
end;
End.