УМК ВП. казПОС. Пніні Оу программасы syllabus оытушы жнінде мліметтер
Скачать 6.17 Mb.
|
Лабораториялық жұмыс № 4. Көпқұжатты қосымшаны құру (MDI) Жұмыстың мақсаты: көпқұжатты қосымшалы формалар іс-әрекетін және олардлың жалпы принциптерімен танысу.
Көпқұжаты қосымша бір ған форманфы иемдене алады. Оның ішінде бірнеше дочерлің терезелер орналасуы мүмкін. Бас форма басқару элементтерінсіз болады. Оларға – жазбалар, кестелер, жолдар, өйткені олар дочерлік терезелерде көрінеді. Ал қалған клиенттік аймаз дочерлік терезелерде орын алады. FormStyle терезе түрін анықтайды. Бас формада FormStyle fsMDIForm мәніне ие. Ал дочерлік терезелер fsMDIChild мәніне ие.
Текстік файлдармен жұмыс жасайтын көпқұжаттық қосымша құрамыз. Алгоритмдер және қосымшаны құру этаптары
А) тышқанның көмегімен формада компонентті таңдау; Б) объект инспекторына көшу, онда компоненттін құрамы көрінеді; В) тышқан арқылы жолды таңдап, оны жойып оынң орнына жаңа мәтін беру; Form1 – FormStyle құрылымы үшін fsMDIForm беру. Window (MainMenu1) – GroupIndex құрылымы үшін 5-ті беру
Form2 – FormStyle құрылымы үшін fsMDIForm. RichEdit - Align үшін alClient Edit (MainMenu) - GroupIndex құрылымы үшін 1-ді орнату Format (MainMenu) -GroupIndex құрылымы үшін 1-ді орнату
Компоненталардың оқиғаларсын өңдеуішті орнату үшін келесі операцияларды жүзеге асыру керек: А) компонентті таңдау; Б) объект инспекторына көшу (Events)-ті таңдау; В) таңдалған оқиғана үшін тышқанды 2 рет шерту. Г) шыққан процедураға код мәтінін жазу: type Tform1 = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; New1: TMenuItem; Open1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; Window1: TMenuItem; Tile1: TMenuItem; Cascade1: TMenuItem; Arrangeicons1: TMenuItem; OpenFileDialog: TOpenDialog; procedure Exit1Click(Sender: TObject); procedure New1Click(Sender: TObject); procedure Tile1Click(Sender: TObject); procedure Cascade1Click(Sender: TObject); procedure Arrangeicons1Click(Sender: TObject); procedure Open1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: Tform1; implementation uses unit2; {$R *.dfm} procedure Tform1.Exit1Click(Sender: TObject); begin Close; end; procedure Tform1.New1Click(Sender: TObject); var n:integer; begin form2:=Tform2.Create(self); for n:=0 to form1.MDIChildCount-1 do form1.MDIChildren[n].Caption:='Документ'+IntToStr(n); end; procedure Tform1.Tile1Click(Sender: TObject); begin Tile; end; procedure Tform1.Cascade1Click(Sender: TObject); begin Cascade; end; procedure Tform1.Arrangeicons1Click(Sender: TObject); begin ArrangeIcons; end; procedure TForm1.Open1Click(Sender: TObject); begin if OpenDialog1.Execute then form2.RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); end; end. Добавление обработчикoв событий для второй формы: type Tform2 = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; New1: TMenuItem; Open1: TMenuItem; Save1: TMenuItem; Saveas1: TMenuItem; Exit1: TMenuItem; Edit1: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; Delete1: TMenuItem; N3: TMenuItem; Selectall1: TMenuItem; Format1: TMenuItem; Left1: TMenuItem; Right1: TMenuItem; Center1: TMenuItem; N4: TMenuItem; Wordwrap1: TMenuItem; N5: TMenuItem; Font1: TMenuItem; Editor: TRichEdit; PopupMenu1: TPopupMenu; Cut2: TMenuItem; Copy2: TMenuItem; Paste2: TMenuItem; SaveFileDialog: TSaveDialog; FontDialog1: TFontDialog; Close1: TMenuItem; procedure Exit1Click(Sender: TObject); procedure New1Click(Sender: TObject); procedure AlignClick(Sender: TObject); procedure Wordwrap1Click(Sender: TObject); procedure Cut1Click(Sender: TObject); procedure Copy1Click(Sender: TObject); procedure Paste1Click(Sender: TObject); procedure Selectall1Click(Sender: TObject); procedure Delete1Click(Sender: TObject); procedure Edit1Click(Sender: TObject); procedure Saveas1Click(Sender: TObject); procedure Save1Click(Sender: TObject); procedure Font1Click(Sender: TObject); procedure Close1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); procedure Open1Click(Sender: TObject); private { Private declarations } PathName: string; public { Public declarations } procedure Open(const AFileName: string); end; var Form2: Tform2; const DefaultFileName = 'Документ'; implementation uses Clipbrd, unit1; {$R *.dfm} procedure Tform2.Exit1Click(Sender: TObject); begin Form1.Exit1Click(Sender); end; procedure Tform2.New1Click(Sender: TObject); begin Form1.New1Click(Sender); end; procedure Tform2.Open1Click(Sender: TObject); begin Form1.Open1Click(Sender); end; procedure Tform2.AlignClick(Sender: TObject); begin Left1.Checked := False; Right1.Checked := False; Center1.Checked := False; with Sender as TMenuItem do Checked := True; with Editor.Paragraph do if Left1.Checked then Alignment := taLeftJustify else if Right1.Checked then Alignment := taRightJustify else if Center1.Checked then Alignment := taCenter; end; procedure Tform2.Wordwrap1Click(Sender: TObject); begin with Editor do begin WordWrap := not WordWrap; { toggle word wrapping } if WordWrap then ScrollBars := ssVertical else ScrollBars := ssBoth; WordWrap1.Checked := WordWrap; { set menu item check } end; end; procedure Tform2.Cut1Click(Sender: TObject); begin Editor.CutToClipboard; end; procedure Tform2.Copy1Click(Sender: TObject); begin Editor.CopyToClipboard; end; procedure Tform2.Paste1Click(Sender: TObject); begin Editor.PasteFromClipboard; end; procedure Tform2.Selectall1Click(Sender: TObject); begin Editor.SelectAll; end; procedure Tform2.Delete1Click(Sender: TObject); begin Editor.ClearSelection; end; procedure Tform2.Edit1Click(Sender: TObject); var HasSelection: Boolean; begin Paste1.Enabled := Clipboard.HasFormat(CF_TEXT); Paste2.Enabled := Paste1.Enabled; HasSelection := Editor.SelLength > 0; Cut1.Enabled := HasSelection; Cut2.Enabled := HasSelection; Copy1.Enabled := HasSelection; Copy2.Enabled := HasSelection; Delete1.Enabled := HasSelection; end; procedure Tform2.Open(const AFileName: string); begin PathName := AFileName; Caption := ExtractFileName(AFileName); with Editor do begin Lines.LoadFromFile(PathName); SelStart := 0; Modified := False; end; end; procedure Tform2.Saveas1Click(Sender: TObject); begin SaveFileDialog.FileName := PathName; if SaveFileDialog.Execute then begin PathName := SaveFileDialog.FileName; Caption := ExtractFileName(PathName); Save1Click(Sender); end; end; procedure Tform2.Save1Click(Sender: TObject); begin if PathName = DefaultFileName then SaveAs1Click(Sender) else begin Editor.Lines.SaveToFile(PathName); Editor.Modified := False; end; end; procedure Tform2.Font1Click(Sender: TObject); begin FontDialog1.Font := Editor.Font; if FontDialog1.Execute then Editor.SelAttributes.Assign(FontDialog1.Font); end; procedure Tform2.Close1Click(Sender: TObject); begin Close; end; procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure Tform2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); const SWarningText = 'Save changes to %s?'; begin if Editor.Modified then begin case MessageDlg(Format(SWarningText, [PathName]), mtConfirmation, [mbYes, mbNo, mbCancel], 0) of idYes: Save1Click(Self); idCancel: CanClose := False; end; end; end; procedure Tform2.FormCreate(Sender: TObject); begin PathName := DefaultFileName; end; end. Лабораториялық жұмыс № 5. ГРАФИКАЛЫҚ РЕДАКТОР Жұмыс мақсаты: графикалық ақппараттарды енгізу процессі кезінде қолданылатын маңызды құрылғыларды және графикалық редактор жұмыстарына арналған компоненттерді оқып үйрену. 1.НЕГІЗГІ БӨЛІМ Берілген Лабораториялық жұмыста, барлық Қосымшаң күрделі жұмыстарын қамтамасыз ететін Delphi программалау ортасының, графикалық үстемелерді құруды жеңілдететін мүмкіншіліктері бар. Графикалық редактор құрудың негізгі компоненттерін қарастырайық. TСanvas класы графикалық ақпараттарды бейнелнудің барлық мүмкіндіктерін иеленеді. Графикалық объектілерді түрлендіру,сақтау және құру кеңістіктерін қамтамасыз етеді. TСanvas Delfi-дің негізгі графикалықжүйесі болып табылады. TСanvas келесілерді қамтамасыз етеді: - графикалық бейнелерді сақтау және жүктеу; - жаңа бейнені құрастыру және сақталынған бейнелерді қалам,бояу жаққыш және қаріп көмегімен өзгертеді; - әртүрлі фигуралар,жолақтар және мәтіндерді бояу және суреттеу; - әртүрлі бенелерді құрамдастыру; TСanvas класының метафайлды объект құрастыруға және басқарушы элементтерді бейнелеуге көмектесетін екі Tcontrol Canvas және T Metafile Canvas кластары бар. Кластардың негізгі әдістерін атап шығайық: Draw әдісі (x,y; Integer; Graphic, TGraphic) жоғарғы сол жақ бөлігі x,y анықталатын Graphic парметрімен көрсетілген,объектіге кіретін бейненің суретін салады және бейненің бастапқы көлемін сақтайды. Line To (x,y: Integer) әдісі Den Pos қаламның ағымдағы позициясынан басталып, (x,y) нүктесімен аяқталатын тік жолақты сызады. Move To әдісі (x,y: Integer) берілген (x,y) нүктесінде Den Pos қаламының ағымдағы позициясын өзгертеді. Бұл Den Pos құрылғысына эквивалентті. Move To әдісімен қозғалған қалам сурет салмайды. TPicture класы –қолданушымен анықталынған графикалық объект типіндегі метафайлдық пиктограмма және битті матрица типіндегі графиалық объектілердің контейнері болып табылатын объекті жүйелеп көрсетеді,яғни типі Graphic құрылғысымен көрсетілетін кез-келген TGraphic графикалық объектінің контейнері болып табылады. T Picture объектісі объект типіне қарай автоматты түрде сәйкестендірілетін, Load From File және Save To File–ды жазбаланатын және файлдық оқытылатын әдістер бар. Сақталатын объектінің типіне байланысты битті матрицалар,пиктограммалар және метфайлдар Bitmap,Icon немесе Meta fileқұрылғыларына сәйкес анықталады. Бұл құрылғыларды қате қарастырғанда алдыңғы объект өшіріліп,жаңа бос объект ашылады. Бұл құрылғылардың орнына Graphic құрылғысы арқылы графикалық объектке рұқсат алуға болады. Егер,графикалық объект битті матрица болса,Image,Picture,Graphic және Image 1Picture Bitmap-на эквивалентті болады. TPicture объектісінің Clipboard буферіне ауысуы Assign әдісімен іске асады. T Clipboard класы-берілгендерді буфер арқылы ауыстыруға арналған операцияны орындайды. Объект буферін айырбастайтын модулі Clipboard сілтейді. Буфер айырбасы берілген шамаға әртүрлі форматты ұсынады,оған кіретін формат тізімі –Formats Index (Index: Integer) құрылғысы,форматтың жалпы саны-Format Count құрылғысы. Has Format Boolear функциясы Format параметрін сілтейтін, буфер алмасуына,сақталған форматты ажыратуға болатын не болмайтындығы туралы сауал жібереді. Clear әдісі –құрамындағы буферді тазартуға арналған. Copy To Clip Board және Cut To Clip Board әдісі буфер айырбасына берілген шаманы орналастырып,көшірме жасап бастапқы түрінен пішіндейді,ал Paste From Clip Board буферден мәтіндік фрагментті алып шығады. Assign (Sourse: TPersistent) буферден графикалық объектілерді ажыратып,буфер көшірме жасайды. Tgraphic класы – қолданушымен анықталынған, метафайлды, пиктограммалы, битті матрицалы типтегі графикалық объектілер үшін абстрактілі базалы класс. Өзінен тараған өзге кластарды сақтайды және графикалық объектілерді визуальдайды. Clip Board буфер айырбасымен және T Picture типті оюъектілер әдісімен жұмыс істейді. Tgraphic класының құрылғысы бейненің көлемі және күйі туралы ақпарат береді. Жұмыс жасалатын графиктің типі белгілі болғанда битті матрицаны,пиктограмма және метафайлды TMetafile немесе TCom,Bitmap кластарынан тараған объектілерге қолданады. Егер графика форматы белгісіз болса, Tgraphic-тен тарайтын кез-келген типті графикалық объектімен жұмыс істеуге қабілетті, T Picture класын қолдануға болады. Кез-кеген суретке TPen объектісінің қаламы,TPresh-тың қылбояғышы және TFont қаріпі кіреді. TPen типінің Pen объектісі сурет салу барысында жолақтар мен географиялық фигураларды қолдана отырып,қалам атрибуттарын анықтайды. Негізгі құрылымына: Color-қалам түсін басқару үшін, Style-салынатын жолақтың стилін нұсқайды; Келесі көрсетілімдерді қолдана алады: Ps Solid- біртегіс жолақ Ps Pash- Сызықша белгісіндегі жолақ Ps Pot- нүктелік жолақ Ps Dash Pot- қайталанатын нүкте мен сызықша жолақтары Ps Clear-көрінбейтін жолақтар Ps Inside Frame- тікбұрыштың ішкі жолақтары Width- салынатын жолақтың қалыңдығын пиксельде береді Mode - сурет салу барысындағы қаламның өзге пиксельдегі жолақтарын әсеріне сәйкес келктін әдісті көрсетеді Tb rush типінің B rush объектісі геометриялық фиграларды толтыруға арналған өрнектерді анықтайды. Толтырылған фигураларды қылбояғыштардың көмегімен басқаруға болады. Олардың негізгілеріне келесілер жатады: Color- қылбояғыштың түсін басқарады; Style- қылбояғышқа стиль беріп,келесі мәндерді қабылдайды: bs Solid- біртұтас бояу bs Clear- бояу кіріскен bs Horizontal- параллель көлденең жолақтар bs Vertical- параллель тік жолақтар bs FDiagonal- параллель,жоғары бағытталған диагональді жолақтар bs Cros- тік торша bs Diag Cross- қисық торша Bitmap- қылбояғыштың сапалы стилін қолданатын бейнені көрсетеді TFont типті объект, бейнеленетін мәтіндегі қаріп биіктігі,оның аты,атрибуттары т.б қолданып,көптеген сипаттамаларды анықтайды. Жұмыстың орындалу реті және тапсырмалар Қарапайым графикалық редактор құрастырайық. Қосымша екі формадан құралады: бірінші форма-жеке меншік редактор, екінші форма сурет көлемін қолданушымен шығару. Қосымша құрудың кезеңдері мен алгоритмі :
Standard бетінен- Main Menu 1, Edit1, Panel 1- Panel 3. Additiond бетінен- Scroll Box 1, Image 1, Speed Button 1-Speed Button 22 Win бетінен- Up Down 1. Dialogs бетінен- Open Dialog 1, Color Dialog 1,Save Dialog 1; Меню пункті- File(опция: New Open Save. Save As Exit) және Edit (опция: Cut Copy Paste). Меню астындағы формаға үш құрал- сайманды панелін орналастырыңыз: Panel 1- 6 Speed Button-(тікбұрышты дөңгелек жолақ) Panel 2- 7 Speed Button-(түс қалыңдықты жолақ түрлері) (Edit 1+ Up Down 1)) Panel 3- 9 Speed Button-(бояу түстерінің түрлері) Панелдермен қоса 5 Croll Box 1 және Image 1 орналастырылады.
Барлық компоненттер үшін әрекеттердің бірінен соң бірінің орындалуы бірдей: а) тышқан көмегімен формаға компонент таңдау; б) берілген құрылғының компоненттері пайда болатын инспектор объектісіне өту; в) тышқан көмегімен қажет құрылғылы жолды таңдау, ағымдағы мәнді өшіріп жаңа мәнін енгізу. Scroll Bo1 үшін – al Client-қа Align құрылғысы Panel үшін al Top- қа Align құрылғысы Барлық Speed Button үшін Name құрылғысын сәйкесінше ауыстыру; Glyph құрылғысы батырмаға сәйкес бейнені орнатады.
Standard бетінен- Button 1, Button 2, Edit 1, Edit 2, Label 1, Label 2.
Button 1 үшін- Caption құрылғысының Ok-ді басыңыз Button 2 үшін- Caption құрылғысына Cancel-ді Label 1 үшін- Caption құрылғысына & енгізу Label 2 үшін- Caption құрылғысына & биіктік Edit 1, Edit 2 үшін- Text құрылғысын тазарту
а) тышқан көмегімен формаға компонент таңдау; б) инспектор объектісіне өту және берілген комноненттің (Events) оқиға қосқышын таңдау; в) тышқанмен таңдалған оқиғадан сол жақ бағананы екі рет шерту; г) пайда болған кодтар редакторына begin мен end сөздерінің арасында процедура денесінің кодын енгізу. Программа листингі: Unit unit1; Interface Uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ExtCtrls, ComCtrls, Menus; Type TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect); TForm1 = class ( TForm) Panel1: TPanel; LineButton: TSpeedButton; RectangleButton: TSpeedButton; EllipseButton: TSpeedButton; RoundRectButton: TSpeedButton; PenButton: TSpeedButton; BrushButton: TSpeedButton; PenBar: TPanel; BrushBar: TPanel; SolidPen: TSpeedButton; DashPen: TSpeedButton; DotPen: TSpeedButton; DashDotPen: TSpeedButton; DashDotDotPen: TSpeedButton; ClearPen: TSpeedButton; PenWidth: TUpDown; PenSize: TEdit; ScrollBox1: TScrollBox; Image: TImage; SolidBrush: TSpeedButton; ClearBrush: TSpeedButton; HorizontalBrush: TSpeedButton; VerticalBrush: TSpeedButton; FDiagonalBrush: TSpeedButton; BDiagonalBrush: TSpeedButton; CrossBrush: TSpeedButton; DiagCrossBrush: TSpeedButton; PenColor: TSpeedButton; BrushColor: TSpeedButton; ColorDialog1: TColorDialog; MainMenu1: TMainMenu; File1: TMenuItem; New1: TMenuItem; Open1: TMenuItem; Save1: TMenuItem; Saveas1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; Edit1: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure LineButtonClick(Sender: TObject); procedure RectangleButtonClick(Sender: TObject); procedure EllipseButtonClick(Sender: TObject); procedure RoundRectButtonClick(Sender: TObject); procedure PenButtonClick(Sender: TObject); procedure BrushButtonClick(Sender: TObject); procedure SetPenStyle(Sender: TObject); procedure PenSizeChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SetBrushStyle(Sender: TObject); procedure PenColorClick(Sender: TObject); procedure BrushColorClick(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Open1Click(Sender: TObject); procedure Save1Click(Sender: TObject); procedure Saveas1Click(Sender: TObject); procedure New1Click(Sender: TObject); procedure Copy1Click(Sender: TObject); procedure Cut1Click(Sender: TObject); procedure Paste1Click(Sender: TObject); private { Private declarations } public { Public declarations } BrushStyle: TBrushStyle; PenStyle: TPenStyle; PenWide: Integer; Drawing: Boolean; Origin, MovePt: TPoint; DrawingTool: TDrawingTool; CurrentFile: string; procedure SaveStyles; procedure RestoreStyles; procedure DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode); end; var Form1: TForm1; implementation uses unit2, Clipbrd; {$R *.dfm} procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Drawing := True; Image.Canvas.MoveTo(X, Y); Origin := Point(X, Y); MovePt := Origin; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Drawing then begin DrawShape(Origin, Point(X, Y), pmCopy); Drawing := False; end; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Drawing then begin DrawShape(Origin, MovePt, pmNotXor); MovePt := Point(X, Y); DrawShape(Origin, MovePt, pmNotXor); end; end; procedure TForm1.LineButtonClick(Sender: TObject); begin DrawingTool := dtLine; end; procedure TForm1.RectangleButtonClick(Sender: TObject); begin DrawingTool := dtRectangle; end; procedure TForm1.EllipseButtonClick(Sender: TObject); begin DrawingTool := dtEllipse; end; procedure TForm1.RoundRectButtonClick(Sender: TObject); begin DrawingTool := dtRoundRect; end; procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode); begin with Image.Canvas do begin Pen.Mode := AMode; case DrawingTool of dtLine: begin Image.Canvas.MoveTo(TopLeft.X, TopLeft.Y); Image.Canvas.LineTo(BottomRight.X, BottomRight.Y); end; dtRectangle: Image.Canvas.Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y); dtEllipse: Image.Canvas.Ellipse(Topleft.X, TopLeft.Y, BottomRight.X, BottomRight.Y); dtRoundRect: Image.Canvas.RoundRect(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y, (TopLeft.X - BottomRight.X) div 2, (TopLeft.Y - BottomRight.Y) div 2); end; end; end; procedure TForm1.PenButtonClick(Sender: TObject); begin PenBar.Visible := PenButton.Down; end; procedure TForm1.BrushButtonClick(Sender: TObject); begin BrushBar.Visible := BrushButton.Down; end; procedure TForm1.SetPenStyle(Sender: TObject); begin with Image.Canvas.Pen do begin if Sender = SolidPen then Style := psSolid else if Sender = DashPen then Style := psDash else if Sender = DotPen then Style := psDot else if Sender = DashDotPen then Style := psDashDot else if Sender = DashDotDotPen then Style := psDashDotDot else if Sender = ClearPen then Style := psClear; end; end; procedure TForm1.PenSizeChange(Sender: TObject); begin Image.Canvas.Pen.Width := PenWidth.Position; end; procedure TForm1.FormCreate(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := nil; try Bitmap := TBitmap.Create; Bitmap.Width := 200; Bitmap.Height := 200; Image.Picture.Graphic := Bitmap; finally Bitmap.Free; end; end; procedure TForm1.SetBrushStyle(Sender: TObject); begin with Image.Canvas.Brush do begin if Sender = SolidBrush then Style := bsSolid else if Sender = ClearBrush then Style := bsClear else if Sender = HorizontalBrush then Style := bsHorizontal else if Sender = VerticalBrush then Style := bsVertical else if Sender = FDiagonalBrush then Style := bsFDiagonal else if Sender = BDiagonalBrush then Style := bsBDiagonal else if Sender = CrossBrush then Style := bsCross else if Sender = DiagCrossBrush then Style := bsDiagCross; end; end; procedure TForm1.PenColorClick(Sender: TObject); begin ColorDialog1.Color := Image.Canvas.Pen.Color; if ColorDialog1.Execute then Image.Canvas.Pen.Color := ColorDialog1.Color; end; procedure TForm1.BrushColorClick(Sender: TObject); begin ColorDialog1.Color := Image.Canvas.Brush.Color; if ColorDialog1.Execute then Image.Canvas.Brush.Color := ColorDialog1.Color; end; procedure TForm1.Exit1Click(Sender: TObject); begin Close; end; procedure TForm1.Open1Click(Sender: TObject); begin if OpenDialog1.Execute then begin CurrentFile := OpenDialog1.FileName; SaveStyles; Image.Picture.LoadFromFile(CurrentFile); RestoreStyles; end; end; procedure TForm1.Save1Click(Sender: TObject); begin if CurrentFile <> EmptyStr then Image.Picture.SaveToFile(CurrentFile) else SaveAs1Click(Sender); end; procedure TForm1.Saveas1Click(Sender: TObject); begin if SaveDialog1.Execute then begin CurrentFile := SaveDialog1.FileName; Save1Click(Sender); end; end; procedure TForm1.New1Click(Sender: TObject); var Bitmap: TBitmap; begin with Form2 do begin ActiveControl := WidthEdit; WidthEdit.Text := IntToStr(Image.Picture.Graphic.Width); HeightEdit.Text := IntToStr(Image.Picture.Graphic.Height); if ShowModal <> idCancel then begin Bitmap := nil; try Bitmap := TBitmap.Create; Bitmap.Width := StrToInt(WidthEdit.Text); Bitmap.Height := StrToInt(HeightEdit.Text); SaveStyles; Image.Picture.Graphic := Bitmap; RestoreStyles; CurrentFile := EmptyStr; finally Bitmap.Free; end; end; end; end; procedure TForm1.Copy1Click(Sender: TObject); begin Clipboard.Assign(Image.Picture); end; procedure TForm1.Cut1Click(Sender: TObject); var ARect: TRect; begin Copy1Click(Sender); with Image.Canvas do begin CopyMode := cmWhiteness; ARect := Rect(0, 0, Image.Width, Image.Height); CopyRect(ARect, Image.Canvas, ARect); CopyMode := cmSrcCopy; end; end; procedure TForm1.Paste1Click(Sender: TObject); var Bitmap: TBitmap; begin if Clipboard.HasFormat(CF_BITMAP) then begin Bitmap := TBitmap.Create; try Bitmap.Assign(Clipboard); Image.Canvas.Draw(0, 0, Bitmap); finally Bitmap.Free; end; end; end; procedure TForm1.SaveStyles; begin with Image.Canvas do begin BrushStyle := Brush.Style; PenStyle := Pen.Style; PenWide := Pen.Width; end; end; procedure TForm1.RestoreStyles; begin with Image.Canvas do begin Brush.Style := BrushStyle; Pen.Style := PenStyle; Pen.Width := PenWide; end; end; end. Unit unit2; Interface Uses Windows, Classes, Graphics, Controls, Forms, Buttons, ExtCtrls, StdCtrls; Type TForm2 = class (TForm) Ok :Tbutton; Cansel:Tbutton; Bevel1:Tbevel; Label1,label2: Tlabel; WidttEdit, HeightEdit:Tedit; End; Var Form2: TForm2; Implementation {$R *.DFM} end. 2.36-сурет Тапсырма: қосымшаны тағы бір Form 3 формасына ауыстырыңыз, бұл үшін Border Style құрылғысын bs Size Tool Win немесе bs Tool Window-ға өзгерт. Форма түрі 1- суретте көрсетілген. Лабораториялық жұмыс № 6. Анықтамалық қосымшалар жүйесін құрастыру. Жұмыстың мақсаты: анықтамалық жүйені құру және қосымшаға анықтамалық файлды енгізу.
Кез-келген сапалы қосымша құрамына автоматты түрде Анықтамалық жүйенің өңделуі Delphi-мен емес,Windows ортасымен іске асады. Оның көрсетілуі де Windows Win Help программасымен орындалады. Delphi тек анықтамалық жүйені үстемеге құруға мүмкіндік береді. Анықтамалық жүйені ұйымдастыру келесі кезеңдерден тұрады:
Жұмыстың көрсетілген кезеңдерін қарастырайық. Microsoft Help Workshop 4 көмегімен NT және Windows 95 анықтамалығын құрудың методикасы қарастырылады. Сәйкес программалар Delphi [Help] Tools каталогында көрсетілген. Бірінші және соңғы кезеңдері Delphi ортасында орындалады. Контекст-берілген басқарушы элементтердің формасына сәйкес, анықтамалық жүйенің бөлімі анықталатын, HelpContext құрылғысының мәнімен анықталатын сан. Мәтіннің анықтамасын құруда жүйені толықтай ойластыру қажет. Терезе мен дене нұсқаушы қалай көрінетіндігін және қандай бөлімдерден тұратындығын ойластырып алу қажет. Негізгі терезеге қатысты, оның басында қандай батырма болатындығы, анықтаманың жалпы стилін ойластыру қажет. Қосымша терезелер жайында сауал шешкенде және негізгі және қосымша терезелер арасындағы функциялар таралуын көрсеткенде, қосымша терезелердің меню жолақтарының болмайтындығын көруге болады. Анықтама мәтінін құрғанда кез-келген мәтіндік редакторды, мысалы Microsoft Word-ты қолдануға болады. Әрбір тақырып басқа құрылғы қатарын және аталуын анықтайтын түсіндірмені қамтиды. Сол немесе басқа түсіндірмелерде қандай символдар қолданатынын қарастырайық. Түсіндірме # - әр түрлі тақырыптар жіберілетін тақырыпты бірегей сәйкестендіруші. Бұл сәйкестендірушіге берілген тақырыпқа қолданылатын үстеме анықтамасы жіберілетін номер қойылады. Түсіндірме К - егер тақырыптар тізімдегі “Пәндік көрсеткіш” бетіндегі анықтамалық жүйенің терезесінде жұмыспен бірге көрсетілсін десеңіз, оны кадрға қосады. ЖҰМЫСТЫҢ ОРЫНДАЛУЫ РЕТІ ЖӘНЕ ТАПСЫРМА
а) тақырыбы б) мәтін және графикалық бейнелер кіретін бірнеше бөлімдер (беттер) 2. Кез-келген мәтіндік редакторге анықтама бөлімінің мәтінін енгізіңіз (Word). 3. Бір файлға кез-келген шамада бөлімдер енгізуге болады. Әр бір бөлім басқаларынан беттері бойынша ажыратылады, яғни жаңа бетте рәсімделеді. Тақырып беріп, үш бөлімге бөліңіз. 4. Түсіндірме режимінде бөлімдерге сәйкес белгілеулер енгізіңіз ( Қою меню пункті/Түсіндірме ). Нөмірлеу (нумерация) тобындағы сұхбатты терезеге Другая қайта қосқышын қосыңыз және өріске сәйкес келетін символ атрибутын енгізіңіз: # - контексті (# IDH_001 – тақырыбы үшін, # IDH_002- бірінші бөлім үшін, # IDH_003 – екінші бөлім үшін және т.б.; $ - басы ($ Мазмұны және т.б.); K – кілттік сөздер тізімі; + - бірінен соң бірі жалғасатын көрсетілімдері нөмері; ! – макрокоманда; * - тег компиляции. 5. Белгіленген сөз- гиперсілтеу болып табылады, шерткенде басқа анықтаманың бөлімі өту орындалады. Мәтіннің көрінісін гипернұсқауы түрінде жасау үшін міндетті түрде келесі әрекеттерді орындау қажет: 1) көрініс аяқталғаннан соң еш кедергісіз идентификатор бөлімін енгізіңіз, мысалы IDH_002 программасы жайлы; 2) екі бөлімнің қаріпті рәсімдеуі екі түрліше болады (Формат меню пункті/Шрифт, Эффект терезесінің сұхбатты терезесі). Сызылған программа жөнінде (немесе қос жолақпен белгіленген). IDH_002 – жасырын. Бөлімнің қаріпін ажыратып көрсетіңіз. 6. Құжат анықтамасының барлық бөлімі дайындалғаннан соң, .RTF форматында сақталады. 7. Үстемеге анықтама мәтінін қолдануда ол .HLP форматындағы .RTF форматынан түрленуі қажет, осыны анықтамалық файлдың компиляциясы деп атайды. Компилятор– Microsoft Help Workshop – DELPHI\ HELP\TOOLS каталогындағы Hcrtf.exe орындалатын файлы компилятор терезесінде File->New (Файл.->Создать) командасы орындалады. Ашылған сұхбатты терезеде Help Proejct (Анықтамалық жүйенің проект - кеңейтілуі.HPJ) пунктін таңдаңыз. Ерте құрылған мәтіндік файлдың анықтамалық жүйе проектісіне қосылу үшін Files (Файлдар) батырмасын басады және пайда болған терезеде керекті .RTF формат файлын таңдайды. Save and Compile (Сақтау және құрастыру) батырмасын басқанда проект компиляциясы орындалады және анықтамалық файл пайда болады. Компиляция нәтижесі арнайы терезеде көрсетіледі. Қателік жөнінде хабарлама болмаса, анықтамалық файлда ақпарат болады. 8. Құрылған файл– өңделген үстемедегі каталогқа көшіру керек. Delphi жүйесінде Project-> Options (Проект -> Параметрлер) командасы орындалады және Browse (Обзор) батырмасы көмегімен Help file (Файл справки) өрісінде Application (Қосымша) файлды таңдайды. 9. Форма менюінде Help (Көмек) пунктін енгізіңіз және анықтаманы шақыру үшін келесі өңдегіштерді жазыңыз: Application.HelpCommand (Help_Contents,0) . Нәтижесінде қосылған файлдың бастапқы бөлімі шақырылады. procedure TForm1.help1Click(Sender: TObject); begin Application.HelpCommand(Help_Contents, 0); end; Лабораториялық жұмыс № 7. МӘЛІМЕТТЕР БАЗАСЫМЕН ЖҰМЫС. Жұмыс мақсаты: локальді мәліметтер базасымен ортасын және мүмкіншіліктерін оқып үйрену Delphi берілгендер фильтрациясы және іздністер жұмыстары. 1. НЕГІЗГІ БӨЛІМ Мәліметтер базасы (МБ) құрылымды ақпараттарды сақтаудың қолайлы ортасы болып табылады. МББЖ – бұл МБ құруға, енгізуге және қолдануға арналған тілдік және программалық құралдар жиынтығы. Іздестіруді ыңғайлы ұйымдастыру және ақпаратты талдау, оны қолданудың эффективтілігін арттыруға қабілетті. Берілгенді сақтаушы ақпараттың сақталуын және оның қамтамасыз етілуіне жауапты. Реляционды МБ – сы өзара қарым – қатынасты кестелерден тұрады. Бизнес логикасы, Қосымшаң құрал – саймандық аймағының анықтамасының жиынтығын өткізеді, яғни ақпаратты өзгерту және толықтыру тәртібін. Қолданбалы бағдарламалар немесе үстеме МБ – сына кіретін берілгенді өңдеуге қатысады, берілгендерді қолданушы қол жетімді формаға енгізеді және бизнес логикасымен қарым – қатынаста болу үшін интерфейсті қамтамасыз етеді. Онда МБ – сының қосылуы Borland Database Engine (процессор доступа к базам данных или BDE) ортасымен іске асады. МБ – сымен жұмыс компоненттерін келесі топтарға бөлуге болады: - локальді немесе жойылған МБ ( DataSet) – на кіруге рұқсат етілген берілгендер жиынтығы; - берілгендермен байланысқан, қолданушымен бірге интерфейс ұйымдасуына қызмет ететін басқарушы элементтер (Data Controls беттері бар палитралы компоненттер); - бірінші екі компоненттермен байланысты қамтамасыз ететін берілгендер көзі (DataSource). Элементтер пайдаланушы интерфейсі BDE DataSet Components Form Data Module BDE Local DataBase Data Module басқа формалар секілді басқа объектілерді орналастыруға арналған, бірақ формадан айырмашылығы, мұнда интерфейс элементтерімен байланысты қамтамасыз ететін көрінбейтін компоненттер орналасқан. МБ – на кіруге рұқсат етілген компоненттер Data Access палитра компоненттерінің беттерінен табылады. МБ – мен басқарылатын жүйелерді келесі белгілеріне қарай классификациялауға болады. Берілген шамаларды сақтау типіне қарай: - файлдық; - серверлік; Файлдық сақтағыштар өзімен бірге бір директорияда орныққан, МБ сның кестелік файлының жиынын көрсетеді. Клиентті Қосымшаң файлдық жүйе деңгейіндегі кестелерге кіруге рұқсат ала алады. Серверлік – сақтағыш клиенттік Қосымшаң сауалы бойынша МБ –дағы ақпараттан ажыраған программаны көрсетеді. Қабат мөлшеріне қарай: - қос деңгейлі; - көп деңгейлі; Қос деңгейлі МББЖ клиентті үстемеге бизнес логикасын және қолданбалы функцияны көрсетеді. Мысалы жұмыс мынадай сақтаушыға берілгендерді жеткізетін, бақылайтын және тексеріс функциясын өткізетін және клиенттік үстеме қолданушыға берілгендерді кескіндейтін классикалық МББЖ үстемесінің сұлбасы болып табылады. Көп деңгейлі (әдетте, 3-еу) үстемесінің клиентті программадан басқа арнайы серверлік үстемесі болады. Серверлік үстеме, сауалдың дұрыстығын тексере отырып, сұрастырылған берілгендерді клиентті программаға жіберіп, сақтаушы кіруге рұқсат етілетін функцияны қарастырады. Delphi жүйесі МБ–лы операциясы үшін келесі құрал–сайманды әдістерді ұсынады:
TDataSet класының әмбебап әдістері. TDataSet класы МБ–на кіруге рұқсат етілген функцияның базалы виртуальді компоненттер класы. Оның көп әдістері ауқымды келеді. Оның берілген шаманы іздестіретін екі әдісі бар: Locate және Lookup. Айтылған әдістер берілген шартты қанағаттандыратын жазбаларды іздейді. function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; virtual; function Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant; virtual;. Бұлардың арасындағы айырмашылық, Locate функциясы жазбаны іздестіргенде табылған жазбаға курсорды орнықтырады, ал Lookup бұлай жасамайды. Егерде іздестіруге ұсынылған өріс үдетілген болса, онда іздестіруді тездететін индекс қолданылады. Бірнеше өріске іздестіру жүргізгенде, олардың барлығы Locate функциясының параметріне түгелденіп шығады. Ttable класының әдістері. TTable әдісі МБ–ның кестелерімен жұмыс жасауға арналған. Берілеген компонент МБ–ның қос деңгейлі үстемесіне қолданылады немесе МБ–ның үшдеңгейлі үстемесінің серверіне. Ttable бірден кестедегі барлық жазбаны шығаратындықтан, TQuery–ге қарағанда, Ttable–ді МБ–ның клиент–серверлік жұмысына қолдану айтарлықтай қолайлы. Ал, TQuery тек шарт сауалын қанағаттандырады. Компоненттер берілгендерді іздестірудің бірнеше өзгеше әдістерін иеленеді. Көрсетілген әдістер тек, индексирленген өрістер бойынша іздестіруге қолданылады (dBase және Paradox үшін минимум). Барлығыда екі топқа бөлінеді: - бір жазбаны іздестіру әдісі; - диапазон жазбасындағы іздестіру әдісі. Ең бірінші, бірінші әдістер тобын қарастырайық. Оларға GotoKey, FindKey, GotoNearest, FindNearest жатады. Бірінші екі әдіс күрделі сәйкестікті іздестіруге арналған, басқалары бөлшекті сәйкестікті іздейді. Tquery қолдану. TQuery компоненті берілгендерді SQL (Structured query language) тіл көмегімен ажыратуға арналған компонент үшдеңгейлі сервер үстемесіне және МБ–мен қос деңгейлі үстемеге арналған жұмыстарда қолданылады. TQuery компонентінің жазбаларды іздестірудің арнайы әдістері болмайды, бірақ іздестіру мүмкіншіліктері SQL тіліне қойылған. Select үстемесімен алынатын қарапайым берілгендер, where үстемесі көмегімен өткізіледі. Айтылған әдіс, іс–тәжірибеде қолданғанда қиындатылатын кемшіліктерді иеленеді: 1) Қосымша қолданушы SQL тілінде талдай алуы қажет; 2) сауал синтаксисін автоматты бақылайтын құралы бар; 3) сауал мәтінін өлшегенде, ол әр уақыт сайын компилирленеді және талдау жасалынатын серверге жіберіледі; 4) қолданушыға сауал генерациялағанда кестелер атын және МБ–ның өрісін міндетті түрде білу қажет. ЖҰМЫСТЫҢ ОРЫНДАЛУ АЛГОРИТМДЕРІ Жергілікті МБ–мен (Paradox, dBase, FoxPro) жұмыста үстеме құрудың негізгі кезеңдері: 1) МБ–сын құру; 2) МББЖ құру. МБ құру 1. 1-кестеден нұсқа таңдаңыз, ұстазға МБ–ның алғашқы нұсқасынан қағаз беріңіз, онымен келісіп МБ–сын құрастырыңыз, кесте, өріс саны мен құрамы кестеде берілген, содан Қосымшаң электронды нұсқасын, яғни жұмысты МБ–сын жобалаудан бастаңыз. 2. МБ–сын тіркемесі BDE Administrator утилиті көмегімен іске асады. Екі әдіспен шақыруға болады:
Негізгі менюдегі BDE Administrator терезесінен Object/New пунктін таңдаңыз және пайда болған терезеде құрылатын МБ–ның типін атсыз қалдырдырыңыз (Standard), ОК (2 сурет). Сол жақ терезеге МБ–ның лақап атын қалдырыңыз, ал оң жақтағысына МБ–сы орнығатын РАТН каталогына дұрыс жолды таңдаңыз. 2 .37–сурет. BDE Administrator терезесі 3. Delphi жүйесінің негізгі менюіне Tools→ Database Desktop пунктін таңдаңыз, осының арқасында сіз МБ–ның кесте құруға арналған бағдарламасын шақыра аласыз (3–сурет). 2.38–сурет. Database Desktop бағдарламасы Онда File/New/ Table командасы бойынша кесте құрылымының анықиама терезесі ашылады. Кесте құру үшін интерактивті режимде өтеді, бірінен соң бірі болатын әрекеттер орындалады: кесте форматын таңдаңыз (Paradox 7.0 үнсіздік бойынша), кесте құрылымын анықтайтын терезеде өрістер аты, типі және мөлшері, белгісіз өрістермен қосымша Table properties құрылымы анықталады, кесте құрылымы анықталғаннан соң оны міндетті түрде Save as... пен сактаған жөн, содан кейін, берілген мәндермен құрылған кестені толтырыңыз File/Open/Table командасымен немесе құрал–саймандар панеліндегі Open батырмасын басу арқылы. 4. Құрылған кестеден МБ–сын құрылымдау. Міндетті түрде екінші текті индекса-цияның орындалуын орындау және «бірдің көпшілікке қатынасын» онату. Мұндай байланысты Master-Detail (негізгі кесте – көмекші кесте) деп атайды. File/Open/Table командасымен көмекші кестені ашыңыз, кесте құрылымын өзгертуде Table/Restructure командасын таңдаңыз. Төмен түсетін Table properties тізімінен Referential Integrity элементін танданыз және Define батырмасын басыңыз. Пайда болған сұхбатты Referential Integrity (3–сурет) терезесіне көмекші кестелер арасына байланыс орнатыңыз. Update rule қайта қосқышы негізгі кестедегі байланыс өрісінің мәні өзгергендегі кестенің сарқылмас әсерін анықтайды. - сascade – каскадты сарқылмас өзгеріс және бағыныңқы жазбаның көмекші кестелердегі жойылуы; - рrohibit –жазба жойылуы немесе байланыс аймағының өзгерісіне жол бермеу. 2.39-сурет. МББЖ құру 1. МББЖ проектін құру, яғни форма, құрамы, компоненттер тіркелуі және арасындағы байланыс тізімі. 2. Жаңа үстеме құрудан бастаңыз. Негізгі менюден File/New Data Module пунктін таңдап, оған берілгендер модулін орнатыңыз. Онда барлық формалы үстемелер базасына кіруге рұқсат етілетін компоненттер орналасады. Егер үстеме бір ғана формадан тұрса, онда тікелей формаға қолданушының визуальды компоненттер интерфейсін орнатуға болады, сонымен қатар, МБ-на кіруге рұқсат етілетін визуальды емес компоненттер. 3. МБ-на кіруге рұқсат етілетін компоненттер модуліне - TТable, TdataSource, олардың мөлшері жоғарыда көрсетілген МБ-сындағы кестелер мөлшерімен анықталады. Инспектор объектісінде бұл компоненттер құрылғысын реттеуге мына тізім қолданылады: Tтable – DataBaseName және TableName құрылғысы; TdataSource –DataSet құрылғысы. 4. Интерфейс ұйымы. Палитралы компоненттер бетін ашыңыз және формаға керекті компоненттерді енгізіңіз. Мысалы, МБ-сының кестелері кестелер түрінде бейнеленетін компоненттер. Оларға DataSource құрылғысын орнату қажет. Егерде төмен түсетін түсетін тізім бос болса, онда форманы берілгендер модулімен байланыстырыңыз, File →Use Unit командасымен де орындауға болады. Енді компоненттер үшін DataSource құрылғысын орнатуға болады және оны таңдап алынған кестемен байланыстыруға болады. Берілген кестеге Active True құрылғысын орнатуды ұмытпаңыз. 5. Тапсырыс берілетін форма құру QReport бетінің компоненттерін қолданып, жүйе жұмысының нәтижесін шығару үшін принтер немесе файлды сақтауға тапсырыс берілетін форма құрыңыз. Тапсырма: сіздің МБ қолданған жұмыс үшін экранды формадан тұратын, 1-ші кестеден таңдалған нұсқаға сәйкес құрылған үстеме мен жергілікті МБ-сын құрыңыз. Қарапайым тапсырысты, бір өріс бойынша құрылған мәліметтер базасының тапсырыс, анықталынған өрістегі фильтрі бар тапсырыстарды қарастыру. 2.8 кесте Тапсырмалар тақырыбының нұсқалары
|