Министерство образования и науки РФ
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Политехнический институт
Кафедра КТОМСП
Отчет по лабораторным работам по дисциплине:
«Программирование» 2 семестр
Преподаватель Головин М. П.
подпись
Студент группы МТ14-09Б 071402101 Захарин А. С.
подпись
Красноярск 2015
Содержание.
Лабораторная работа №1-3...........................................................................стр. 3.
Лабораторная работа №4..............................................................................стр. 7.
Лабораторная работа №6..............................................................................стр. 8.
Лабораторная работа №7..............................................................................стр.11.
Лабораторная работа №8..............................................................................стр.18.
Лабораторная работа №9..............................................................................стр.22.
Лабораторная работа №10............................................................................стр.25.
Используемая литература.............................................................................стр.27.
Лабораторная работа №1-3 Создание многооконного текстового редактора
Задание: Создать стандартный интерфейс MDI Windows-приложения «Текстовый редактор» создержащий меню, панель инструментов, строку состояния обеспечив следующую функциональность:
Открытие документа из файла, сохраниение документа в файле, удаление в буфер, вставка из буфера, курсивный шрифт, отображение позиции курсора + выравние текста(защита)
Интерфейс программы
Интерфейс приложения представлен на начальном этапе представлен на рисунке 1.1, а на конечном этапе представлен интерфейс с дочерним окном на рисунке 1.2.
Рисунок 1.1
Рисунок 1.2
Код программы
Исходный код материнской формы:
procedure TForm1.ACenterExecute(Sender: TObject);
begin
(ActiveMDIChild as tform2).RichEdit1.Paragraph.Alignment := taCenter;
end;
procedure TForm1.ACutExecute(Sender: TObject);
begin
(ActiveMDIChild as tform2).RichEdit1.CutToClipBoard;
end;
procedure TForm1.AExitExecute(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.AItalicExecute(Sender: TObject);
begin
With (ActiveMDIChild as tform2).RichEdit1.SelAttributes do
begin
if FsItalic in Style then
Style:=Style - [FsItalic]
else
Style:=Style + [FsItalic]
end;
end;
procedure TForm1.ALeftExecute(Sender: TObject);
begin
(ActiveMDIChild as tform2).RichEdit1.Paragraph.Alignment := taLeftJustify;
end;
procedure TForm1.AOpenExecute(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Form2:=Tform2.Create(Self);
Form2.RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
Form2.RichEdit1.Modified := false;
FileName:=OpenDialog1.FileName;
Form2.show;
Form2.Caption:='Документ - '+ExtractFileName(FileName);
end;
end;
procedure TForm1.APasteExecute(Sender: TObject);
begin
(ActiveMDIChild as tform2).RichEdit1.PasteFromClipBoard;
end;
procedure TForm1.ARightExecute(Sender: TObject);
begin
(ActiveMDIChild as tform2).RichEdit1.Paragraph.Alignment := taRightJustify;
end;
procedure TForm1.ASaveExecute(Sender: TObject);
begin
(ActiveMDIChild as tform2).RichEdit1.Lines.SaveToFile(OpenDialog1.FileName)
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Выйти из программы?',mtConfirmation,[mbYes,mbNo],0)=mrYes
then Action:=caFree
else Action:=caNone;
end;
Исходный код дочерней формы:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if RichEdit1.Modified then
begin
if MessageDlg('Файл был изменён. Перед выходом он не будет сохранён. Подтвердить выход?',
mtConfirmation,[mbYes,mbNo],0)=mrYes then
if OpenDialog1.Execute then
begin
RichEdit1.Lines.SaveToFile(OpenDialog1.FileName);
Action:=caFree;
end
else
Action:=CaFree;
end
else
Action:=CaFree;
end;
procedure TForm2.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.StatusBar1.Panels[2].Text := IntToStr(RichEdit1.Caretpos.y+1);
Form1.StatusBar1.Panels[4].Text := IntToStr(RichEdit1.Caretpos.X+1);
end;
Алгоритмы
Рисунок 1.3
Лабораторная работа №4
Использование технологий Drag&Drop
Задание: Отобразитить в редакторе Edit выделенную строчку из ListBox
Интерфейс программы
На рисунке 2.1 изображен интерфейс приложения.
Рисунок 2.1
Код программы
procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
var itemIndex: byte;
begin
Edit1.Text:=(Source as TListBox).items[(Source as TListBox).itemIndex];
end;
procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:= true;
end;
procedure TForm1.LBDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:= true;
end;
Лабораторная работа №6
Вывод графической информации на холст
Задание: Определить количество точек, попавших в заданный прямоугольник. Решение задачи отобразить на холсте.
Интерфейс программы
На изображениях 3.1 и 3.2 показана работа данной задачи в программе.
Рисунок 3.1
Рисунок 3.2
Код программы
Исходный код модуля программы:
function colpo(po:tpo):integer;
procedure postroenie(Img: TImage;var po:tpo);
procedure addPoint(x,y,countPoint:integer;var po:tpo);
var
countpoint: integer;
po:tpo;
Canvas: TCanvas;
implementation
procedure addPoint(x,y,countPoint:integer; var po:tpo);
begin
setLength(po,countPoint+1);
po[countPoint].X:=x;
po[countPoint].Y:=y;
end;
procedure postroenie(Img: TImage; var po:tpo);
begin
img.Canvas.Pen.Color:=clblack;
img.Canvas.Brush.Color:=clAqua;
img.Canvas.rectangle(po[0].X,po[0].y, po[1].X,po[1].y);
end;
function colpo(po:tpo):integer;
var i,d:integer;
begin
d:=0;
for I := 2 to length(po) - 1 do
if ((po[i].X>po[0].X) and (po[i].X<po[1].X)) then
if ((po[i].y>po[0].y) and (po[i].y<po[1].y)) then
d:=d+1;
colpo:=d;
end;
end.
Исходный код программы:
procedure TForm1.FormActivate(Sender: TObject);
begin
a:=0;
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
Form1.StatusBar1.Panels[0].Text:='Кол-во точек в прямоугольнике = '+floatTostr(colpo(po));
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
Image1.Canvas.Pen.Color:=Rgb(0,25,0);
Image1.Canvas.Brush.Color:=Rgb(0,26,0);
Image1.Canvas.Ellipse(x-2,y-2,x+2,y+2);
addpoint(X,Y,A,po);
if a=1 then
begin
postroenie(Image1,po);
end;
a:=a+1;
end;