Delphi Ders6 Aslı Ergün
TImage Picture özelliği resim dosyasını gösterir. Image1.Picture.LoadFromFile(‘resim.bmp’); SaveToFile resimleri kaydetmek için kullanılır. Image1.Picture.SaveToFile(‘resim.bmp’); Stretch özelliği pencereye tam yerleştirme yapar. Image1.Stretch := True; Transparent arkaplanı transparan yapar. Image1.Transparent := True; Visible resmi görünmez yapar. Image1.Visible := True;
Color (Renk) özelliği ve TColor kullanımı Renkler “cl” (color) harfleri ile başlar . Label1.Color := clblue; {MAVİ} Label1.Color := RGB(0, 0, 255); {MAVİ} Label1.Color := RGB(255, 0, 0); {KIRMIZI} Label1.Color := $000000FF; {KIRMIZI} Label1.Color := RGB(0, 255, 0); {YEŞİL} Label1.Color := RGB(0, 0, 0); {SİYAH} Label1.Color := RGB(255, 255, 255); {BEYAZ}
var r,g,b : Byte; color : TColor; begin r := StrToInt(ledRed.Text) ; g := StrToInt(ledGreen.Text) ; b := StrToInt(ledBlue.Text) ; color := RGB(r, g, b) ; Shape1.Brush.Color := color; end;
Delphide Çizim Ortamı ve Koordinat Sistemi Canvas(tuval) grafik çizim amacıyla kullanılırlar. Canvas çizim için pen (kalem), brush (fırça) ve font (yazıtipi) gibi araçları kullanır.
Canvas’ta Pen özelliği ve kullanımı: Form1.Canvas.Pen.Color := clblue; Form1.Canvas.Pen.Width := 5; Form1.Canvas.Pen.Style := psDash;
Canvas’ta Brush özelliği ve kullanımı: Form1.Canvas.Brush.Color := clblue; Form1.Canvas.Brush.Style := bsHorizontal;
Resim Üstüne Çizim var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; try Bitmap.LoadFromFile('Dolgu.bmp'); Form1.Canvas.Brush.Bitmap := Bitmap; Form1.Canvas.FillRect(Rect(0, 0, 100, 100)); finally Form1.Canvas.Brush.Bitmap := nil; Bitmap.Free; end;
Pixels özelliği ve kullanımı Pixels ile canvas üzerinde istenilen pikselin (nokta) rengi istenilen renge ayarlanabilir. Pixels, TColor tipindedir. Pixels, canvas üzerinde piksel cinsinden x ve y konumu, TColor cinsinden renk bilgisi olmak üzere üç parametre ile kullanılır Form1.Canvas.Pixels[10, 30] := clblue; {Canvas üzerindeki x=10, y=30 pikseli mavi ayarlanıyor}
MoveTo ve LineTo prosedürleri ve kullanımları: MoveTo ve LineTo, canvas’ta çizgi çizmek için kullanılan iki prosedürdür. MoveTo prosedürü canvas üzerinde bir nokta belirlenmesini sağlar. Kullanımı: Canvas.MoveTo(Başlangıç x, Başlangıç y); şeklindedir. LineTo prosedürü ise MoveTo ile belirlenmiş başlangıç noktasından başlayacak olan çizgini bitiş noktasını belirler ve çizgiyi çizer. Kullanımı: Canvas.LineTo(Bitiş x, Bitiş y); şeklindedir. Form1.Canvas.MoveTo(0, 0); {Canvas üzerindeki x=0, y=0 başlangıç noktası alınıyor} Form1.Canvas.LineTo(50, 70); {Canvas üzerindeki x=50, y=70 bitiş noktası belirlenip çizgi çiziliyor}
TPoint ve TRect tipleri ve kullanımları: TPoint Tipi: type TPoint = packed record X: Longint; Y: Longint; end; TRect Tipi: TRect = packed record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end;
Tpoint Kullanımı TPoint, delphide tanımlanmış olan bir tipdir. Genelikle grafik komutlarında kullanılır. Bir nokta için gerekli olan x, y konumları için iki adet değişken gerekir. Tpoint kullanmadan: Var x, y: Longint;// Bir nokta için iki değişken tanımlanıyor Begin x := 100; y := 200; // Değişkenlere değer saklanıyor Tpoint kullanarak // TPoint ile aynı tanımlama: Var k: TPoint; // Bir nokta için bir değişken tanımlanıyor k.X := 100; k.Y := 200; // Bir değişkene iki ayrı değer saklanıyor
Trect kullanımı TRect ise iki ayrı nokta için gereken dört ayrı (başlangıç ve bitiş) konumunu saklamak için tanımlanmış bir tiptir. Dört ayrı değişken kullanmak yerine TRect ile dört konum bir değişkende saklanabilir. TRect iki adet TPoint şeklinde kullanılabildiği gibi TPoint’in dörtlüsü gibi de kullanılabilir. Trect kullanmadan: Var x, y, x1, y1 : Longint; // İki nokta için dört değişken tanımlanıyor Begin x := 100; y := 200; x1 := 110; y1 := 210; Trect kullnarak: / TRect ile aynı tanımlama: Var k: TRect; // İki nokta için bir değişken tanımlanıyor k.Left := 100; k.Top := 200; k.Right := 110; k.Bottom := 210; // Değişkene dört ayrı değer saklanıyor veya k.Topleft.X := 100; k.TopLeft.Y := 200; k.BottomRight.X := 110; k.BottomRight.Y := 210;
Ellipse prosedürü ve kullanımları: Ellipse prosedürü ile başlangıç ve bitiş noktaları verilen elips veya daire çizilir. Daire ve elips çizerken dikkat edilmesi gereken husus koordinatların görünmez dörtgen çizermiş gibi verilmesi gerektiğidir. Daire veya elips bu görünmez dörtgene göre ve dörtgenin içine uyacak şekilde çizilir. Daire için başlangıç ve bitiş noktaları arasındaki fark x ve y için eşit olmalıdır. Kullanımı: Canvas.Ellipse(Başlangıç x, Başlangıç y, Bitiş x, Bitiş y); veya Canvas.Ellipse(const Rect: TRect); şeklindedir. Form1.Canvas.Ellipse (0, 0, 50, 70); // Canvas üzerine elips çiziliyor veya Var k: TRect; // k değişkeni TRect şeklinde tanımlanıyor Begin k.Left := 0; k.Top := 0; k.Right := 50; k.Bottom := 70; // k değişkenine değerler veriliyor Form1.Canvas.Ellipse (k);
Rectangle prosedürü ve kullanımları: Rectangle prosedürü ile başlangıç ve bitiş noktaları verilen dikdörtgen veya kare çizilir. Kare için başlangıç ve bitiş noktaları arasındaki fark x ve y için eşit olmalıdır. Kullanımı: Canvas.Rectangle(Başlangıç x, Başlangıç y, Bitiş x, Bitiş y) veya Canvas.Rectangle(const Rect: TRect); şeklindedir. Form1.Canvas.Rectangle (0, 0, 50, 70); // Canvas üzerine dikdörtgen çiziliyor veya Var k: TRect; // k değişkeni TRect şeklinde tanımlanıyor Begin k.Left := 0; k.Top := 0; k.Right := 50; k.Bottom := 70; {k değişkenine değerler veriliyor} Form1.Canvas.Rectangle (k); //Canvas üzerine aynı dikdörtgen farklı şekilde çiziliyor
RoundRect prosedürü ve kullanımı: RoundRect, canvas’ta köşeleri yuvarlaklaştırılmış dikdörtgen veya kare çizmek için kullanılan prosedürdür. Rectangle prosedürü ile başlangıç, bitiş noktaları ve köşelerdeki yuvarlaklık oranı verilen dikdörtgen veya kare çizilir. Kare için başlangıç ve bitiş noktaları arasındaki fark x ve y için eşit olmalıdır. Kullanımı: Canvas.Rectangle(Başlangıç x, Başlangıç y, Bitiş x, Bitiş y, Yuvarlaklık Oranı x, Yuvarlaklık Oranı y); şeklindedir. Form1.Canvas.RoundRect (0, 0, 30, 30, 5, 5); {Canvas üzerine köşeleri yuvarlak kare çiziliyor} Form1.Canvas.RoundRect (0, 0, 50, 70, 5, 7); {Canvas üzerine köşeleri yuvarlak dikdörtgen çiziliyor} bmp1.Canvas.FillRect(0,0,screen.Width,screen.Height);
Arc prosedürü ve kullanımı: Arc, canvas’ta yay çizmek için kullanılan prosedürdür. Arc prosedürü ile köşe koordinatları, başlangıç ve bitiş noktaları verilen yay çizilir. Kullanımı: Canvas.Arc(Sol-üst x, Sol-üst y, Sağ-alt x, Sağ-alt y, Başlangıç x, Başlangıç y, Bitiş x, Bitiş y); şeklindedir. Aşağıda canvas üzerinde yay çizen kod görülmektedir: Form1.Canvas.Arc(10, 10, 200, 150, 30, 30, 150, 100); {Canvas üzerine yay çiziliyor}
Pie prosedürü ve kullanımı: Pie, canvas’ta dolu yay (pasta dilimi) çizmek için kullanılan prosedürdür.Pie prosedürü ile köşe koordinatları, başlangıç ve bitiş noktaları verilen dolu yay çizilir. Kullanımı: Canvas.Pie(Sol-üst x, Sol-üst y, Sağ-alt x, Sağ-alt y, Başlangıç x, Başlangıç y, Bitiş x, Bitiş y); şeklindedir. Aşağıda canvas üzerinde dolu yay çizen kod görülmektedir: Form1.Canvas.Pie(10, 10, 200, 150, 30, 30, 150, 70); {Canvas üzerine dolu yay çiziliyor}
Chord prosedürü ve kullanımı: Chord, canvas’ta uçları birleştirilmiş yay çizmek için kullanılan prosedürdür. Chord prosedürü ile köşe koordinatları, başlangıç ve bitiş noktaları verilen uçları birleştirilmiş yay çizilir. Kullanımı: Canvas.Chord(Sol-üst x, Sol-üst y, Sağ-alt x, Sağ-alt y, Başlangıç x, Başlangıç y, Bitiş x, Bitiş y); şeklindedir. Aşağıda canvas üzerinde uçları birleştirilmiş yay çizen kod görülmektedir: Form1.Canvas.Chord(10, 10, 200, 150, 30, 30, 150, 70); {Canvas üzerine uçları birleştirilmiş yay çiziliyor}
Polyline prosedürü ve kullanımı: Polyline, canvas üzerine birleşik çizgi dizisi çizmek için kullanılır. Kullanımı: Canvas.Polyline([Point(x,y),…]); şelindedir. Noktalar TPoint tipinde girilir. İstenilen sayıda konum (x,y noktaları) tanımlanabilir. Aşağıda canvas üzerinde polyline çizen kod görülmektedir: Form1.Canvas.Polyline([Point(40, 10), Point(20, 60), Point(70, 30), Point(10, 30), Point(60, 60), Point(40, 10)]);
Polygon prosedürü ve kullanımı: Polygon, canvas üzerine başlangıç ve bitiş noktaları bitişik olan birleşik çizgi dizisi çizmek için kullanılır. Kullanımı: Canvas.Polygon([Point(x,y),…]); şelindedir. Noktalar TPoint tipinde girilir. İstenilen sayıda konum (x,y noktaları) tanımlanabilir. Başlangıç ile bitiş otomatik birleştirilecektir. Aşağıda canvas üzerinde poligon çizen kod görülmektedir: Form1.Canvas.Polygon([Point(10, 10), Point(30, 10), Point(130, 30), Point(240, 120)]);
Canvasta Font kullanımı Canvas.TextOut(0,0,'Hello'); Canvas.TextOut(80,60,'Hello'); Canvas.Brush.Color:=RGBToColor(0,166,81); Canvas.Font.Color:=RGBToColor(255,255,255); Canvas.TextOut(80,60,'Hello World'); Canvas.Font.Size:=28; canvas.Font.Color:=clred; canvas.Font.Style:=[fsBold,fsItalic]; canvas.Font.Name:='script'; canvas.TextOut(80,60 , ‘Hello');
Bitmap Kullanımı procedure TForm9.Button2Click(Sender: TObject); var Bitmap : TBitMap; begin Bitmap := TBitmap.Create; try with Bitmap do begin LoadFromFile('araba3.bmp'); Form9.Canvas.Draw(50,50,BitMap); end; finally Bitmap.Free; end.
Paintbox Kontrolü procedure TForm1.PaintBox1Paint(Sender: TObject); begin with PaintBox1, canvas do Brush.Color := clRed; Pie(12,100,140,280,12,100,140,280); Pen.Width := 4; Pen.Color := clGreen; Pen.Style := psDash; Rectangle(120,60,Width,Height); Pen.Width := 1; Pen.Color := clRed; Polyline([Point(40, 10), Point(20, 60), Point(70, 30), Point(10, 30), Point(60, 60), Point(40, 10)]); TextOut(75,20,‘Merhaba!'); end;
PaintBox Kontrolü procedure RenderRow1; begin with PaintBox1.Canvas do // Red rectangle pen.Color := clRed; rectangle(HB , VB, Col1 - HB, Row1 - VB); // Yellow filled rectangle brush.Color := clYellow; rectangle(Col1 + HB, VB, Col2 - HB, Row1 - VB); // Green circle needs bounding square pen.Color := clGreen; brush.Color := clBtnFace; CentreX := (Col2 + Col3) div 2; CentreY := Row1 div 2; ellipse(CentreX - Radius, CentreY - Radius, CentreX + Radius, CentreY + Radius); // Blue filled ellipse needs bounding rectangle pen.Color := clBlue; brush.Color := clBlue; ellipse(Col3 + 2 * HB, VB, MaxX - 2 * HB, Row1 - VB); end;
procedure RenderRow2; begin with PaintBox1 procedure RenderRow2; begin with PaintBox1.Canvas do // Aqua line (solid) pen.Color := clAqua; pen.width := 4; moveTo(HB, Row1 + VB); lineTo (Col1 - HB, Row2 - VB); // Teal dashed line moveTo( Col1 + HB, Row2 - VB); pen.Width := 1; pen.Style := psDash; pen.Color := clTeal; lineTo(Col2 - HB, Row1 + VB); // BtnFace ellipse with light grey outline pen.Color := clLtGray; pen.Style := psSolid; brush.Color := clBtnFace; Ellipse(Col2 + 2 * HB, Row1 + VB, Col3 - 2 * HB, Row2 - VB); // Purple filled circle pen.Color := clPurple; brush.Color := clPurple; CentreX := (Col3 + MaxX) div 2; CentreY := (Row1 + Row2) div 2; ellipse(CentreX - Radius, CentreY - Radius, CentreX + Radius, CentreY + Radius); end;
procedure RenderRow3; begin with PaintBox1 procedure RenderRow3; begin with PaintBox1.Canvas do // Three quarters of lime ellipse pen.Color := clLime; brush.Color := clLime; pie(HB, Row2 + VB, Col1-HB, Row3 - VB, HB + Row1 div 2, Row2 + VB, Row2 + VB + Row1 div 2, Row2 + VB + Row1 div 2); //Dark grey rounded rectangle pen.Color := clDkGray; brush.Color := clDkGray; roundRect(Col1 + 2 * HB, Row2 + VB, Col2 - 2 * HB, Row3 - VB, 20, 20); // Fuchsia pentagon pen.color := clFuchsia; PentagonPoints[1] := Point((Col3 + Col2) DIV 2,Row2 + VB); PentagonPoints[2] := Point(Col3 - HB,(Row2 + Row3) DIV 2); PentagonPoints[3] := Point(Col3 - (Col1 DIV 3), Row3 - VB); PentagonPoints[4] := Point(Col2 + (Col1 DIV 3), Row3 - VB); PentagonPoints[5] := Point(Col2 + HB,(Row2 + Row3) DIV 2); PentagonPoints[6] := PentagonPoints[1]; polyline(PentagonPoints); // Red filled triangle pen.Color := clRed; brush.Color := clRed; TrianglePoints[1] := Point((Col3 + MaxX) DIV 2, Row2 + VB); TrianglePoints[2] := Point(MaxX - HB, Row3 - VB); TrianglePoints[3] := Point(Col3 + HB, Row3 - VB); TrianglePoints[4] := TrianglePoints[1]; polygon(TrianglePoints ); end;
procedure RenderRow4; var Count: integer; begin with PaintBox1 procedure RenderRow4; var Count: integer; begin with PaintBox1.Canvas do // Navy arc of ellipse pen.Color := clNavy; arc(HB, Row3 + VB, Col1 - HB, MaxY - VB, HB + Row1 div 2, Row3 + VB, HB, Row3 + VB + Row1 div 2); //Blue text font.Color := clBlue; font.Size := 10; TextOut(col1 + HB, (Row3 + MaxY) DIV 2, 'pp4s.co.uk'); // Maroon curve pen.Color := clMaroon; brush.Color := clMaroon; Count := 0; X := Col2 + HB; Y := Row3 + VB; while (X <= Col3) and (Y <= MaxY) do Rectangle(X - 1, Y - 1, X + 1, Y + 1); inc(Count); X := Col2 + HB + (Count * MaxX ) DIV 40; Y := Row3 + VB + (Count * Count * MaxY) DIV 150; end; brush.Color := clSilver; Chord(HB + Col3, VB + Row3, MaxX - HB, MaxY - VB, HB + Col3, VB + Row3, MaxX - HB, MaxY - VB);
Resim Negatif Filtreleme procedure grayscaleimage(const bmp: TBitmap; depth: Integer); var color,color2:longint; r,g,b,rr,gg:byte; h,w:integer; begin for h := 0 to bmp.height do for w := 0 to bmp.width do color:=colortorgb(bmp.Canvas.pixels[w,h]); r:=getrvalue(color); g:=getgvalue(color); b:=getbvalue(color); color2:=(r+g+b) div 3; bmp.canvas.Pixels[w,h]:=RGB(color2,color2,color2); rr:=r+(depth*2); gg:=g+depth; if rr <= ((depth*2)-1) then rr:=255; if gg <= (depth-1) then gg:=255; bmp.canvas.Pixels[w,h]:=RGB(rr,gg,b); end;
Chart
Chart Türleri With Series1 do begin Add (3, 'Pears', clRed); Add (4, 'Apples', clBlue); Add (2, 'Oranges', clGreen); end;
Chart’a Veri Eklemek Chart1.Series[0].AddXY(10, 20, '', clTeeColor); With Chart1.Series[0] Do Begin AddXY(10, 20, '', clTeeColor); AddXY(15, 50, '', clTeeColor); AddXY(20, 30, '', clTeeColor); AddXY(25, 70, '', clTeeColor); AddXY(30, 10, '', clTeeColor); AddXY(35, 50, '', clTeeColor); AddXY(40, 45, '', clTeeColor); AddXY(45, 10, '', clTeeColor); End;
Bar Chart type TForm1 = class(TForm) Chart1: TChart; Bars : TBarSeries; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.lfm} procedure TForm1.FormCreate(Sender: TObject); Values: array[1..10] of double = (17, 9, 6, 5, 4, 3, 3, 2, 2, 2); Colours: array[1..10] of TColor = (clRed, clYellow, clFuchsia, clGreen, clBlue, clMaroon, clOlive, clBlack, clGray, clAqua); Labels: array[1..10] of string = ('UK', 'US','Germany', 'India', 'Brazil', 'Indonesia', 'Russia', 'Netherlands', 'Italy', 'France'); Count: integer; begin Form1.Caption := 'Bar Chart Demo'; Bars := TBarSeries.Create(Chart1); Chart1.Title.Text.Strings[0] := 'Percentage of Sessions on PPS (Sept 2014)'; Chart1.Title.Font.Size := 16;; Chart1.Title.Visible := true; Bars.Marks.Style := TSeriesMarksStyle(smsValue); //or smsLabelValue Bars.Marks.Distance:= 5; for Count := 1 to 10 do Bars.AddXY(count, Values[count], Labels[Count], Colours[Count]); Chart1.AddSeries(Bars); Chart1.AxisList.BottomAxis.Marks.Source := Bars.Source; Chart1.AxisList.BottomAxis.Marks.Style := smsLabel; end.
Not Defteri Yapma
Kayıt Tanımlama type // Declare a customer record TCustomer = Record firstName : string[20]; lastName : string[20]; address1 : string[100]; address2 : string[100]; address3 : string[100]; city : string[20]; postCode : string[8]; end; var customers : array[1..3] of TCustomer; i : Integer; customers[2].firstName := 'Sarah'; customers[3].firstName := 'Henry';
for i := 1 to 3 do with customers[i] do ShowCustomer([firstName, lastName, address1, address2, address3, city, postCode]); end; // A procedure that displays a variable number of strings procedure TForm1.ShowCustomer(const fields: array of string); var i : Integer; begin // Display all fields passed - note : arrays start at 0 for i := 0 to Length(fields)-1 do ShowMessage(fields[i]); ShowMessage(''); end; end.
Inputbox procedure TForm1.Button7Click(Sender: TObject); var sehir: String; begin sehir:=inputbox('Bilgi','Oturduğunuz şehri girin?',''); if sehir='Ankara' then showmessage('Ankarada oturuyorsunuz') else if sehir='İstanbul' then showmessage ('İstanbulda oturuyorsunuz') else if sehir='İzmir' then showmessage ('İzmirde oturuyorsunuz') else showmessage ('Başka şehirlerde oturuyorsunuz ! '); end; Form1.Caption:=InputBox(' Bilgi' , ' Şehir adı girişi ' ,'');
MessageDlgPos Verilen bir koordinatta mesajbox gösterir. var buttonSelected : Integer; begin // Show a confirmation dialog at 20,100 buttonSelected := MessageDlgPos('Confirmation',mtError, mbOKCancel, 0, 20, 100); // Show the button type selected if buttonSelected = mrOK then ShowMessage('OK pressed'); if buttonSelected = mrCancel then ShowMessage('Cancel pressed'); end; Verilen bir koordinatta mesajbox gösterir.