Artikel ini menggunakan contoh untuk menjelaskan solusi Delphi untuk mewujudkan efek khusus rotasi gambar dan teks. Kontrol yang digunakan dalam program ini terutama adalah kontrol Panel, kontrol Gambar, kontrol Edit, kontrol Label dan kontrol Tombol. Kunci dari program ini adalah menggunakan fungsi bmp_rotate() Delphi untuk mewujudkan fungsi memutar gambar. Dan dengan cerdik memanggil fungsi Windows API yang relevan untuk mencapai efek rotasi teks.
Contoh kode selengkapnya adalah sebagai berikut:
unit Unit1;antarmukamenggunakanWindows, Pesan, SysUtils, Kelas, Grafik, Kontrol, Formulir, Dialog,matematika,StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Edit1: TEdit;Image1: TImage;bmrotate: TButton;Label1: TLabel;Panel1: TPanel ;Gambar2: TImage;Panel2: TPanel;Image3: TImage;Edit2: TEdit;RotatedText: TButton;Label2: TLabel;procedure bmprotateClick(Sender: TObject);procedure RotatedTextClick(Sender: TObject);procedure FormCreate(Sender: TObject);private{ Deklarasi pribadi }prosedur publik{ Deklarasi publik } bmp_rotate(src,dst:Tbitmap;angle:exended);Prosedur DrawRotatedText(TheCanvas : TCanvas; TheAngle : Integer;TheText : String);end;varForm1: TForm1;implementasi{$R *.DFM}prosedur TForm1.bmp_rotate(src,dst:Tbitmap;angle:exended);//Rotasi gambar varc1x,c1y,c2x,c2y:integer;p1x,p1y,p2x,p2y:integer;radius,n:integer;alpha:exended;c0 ,c1,c2,c3:tcolor;beginangle := (sudut / 180) * pi; //Mengubah isi kotak teks menjadi sudut c1x := src.Width div 2;c1y := src.Height div 2;c2x := dst.Width div 2;c2y := dst.Height div 2;if c2x < c2y lalun := c2yelsen := c2x;des (n,1); //buat n Nilainya dikurangi 1, n:=n-1untuk p2x := 0 hingga n lakukan mulai untuk p2y := 0 hingga n lakukan mulaijika p2x = 0 makaalpha:= pi/2elsealpha := arctan2(p2y,p2x);radius := round(sqrt ((p2x*p2x)+(p2y*p2y)));//Mengatur radius selama rotasi p1x := round(radius * cos(sudut+alfa)); //Menetapkan absis pusat lingkaran selama rotasi p1y := round(radius * sin(sudut+alfa)); //Menetapkan ordinat pusat lingkaran selama rotasi c0 := src.Canvas.pixels [c1x+p1x,c1y+p1y];//Ganti piksel c1 pada koordinat gambar yang relevan:= src.Canvas.piksel[c1x-p1x,c1y-p1y];c2 := src.Canvas.piksel[c1x+p1y,c1y-p1x];c3 := src.Canvas.piksel[c1x-p1y,c1y+p1x];dst.Canvas.piksel[c2x+p2x,c2y+p2y]:=c0; //Ganti piksel pada posisi berbeda dst.Canvas.pixels[c2x-p2x,c2y-p2y]:=c1;dst.Canvas.pixels[c2x+p2y,c2y-p2x]:=c2;dst.Canvas.pixels[ c2x -p2y,c2y+p2x]:=c3;akhir;aplikasi.pesan proses //Tanggapi permintaan pesan lainnyaend;end;prosedur TForm1.bmprotateClick(Sender: TObject);VarRAngle : Extended;beginRAngle := StrToFloat(Edit1.Text); //Atur sudut rotasi bmp_rotate(Image1.Picture.bitmap,Image2 .Picture.bitmap, RAngle);//Jalankan fungsi rotasi dan putar ujung grafis;Prosedur TForm1.DrawRotatedText(TheCanvas : TCanvas; TheAngle : Integer;TheText : String);varlf : TLogFont;tf : TFont;beginImage3.Canvas.refresh;dengan TheCanvas lakukan startFont.Name:='Arial';Font.Size:=18; Kuas.Gaya:= bsClear;tf:= TFont.Create;trytf.Assign(Font);GetObject(tf.Handle, Sizeof(lf), @lf); //Menetapkan pegangan instance saat ini ke objek Font tf lf.lfEscapement:=TheAngle*10;lf.lfOrientation := TheAngle * 10; //Buat garis absis dan garis horizontal pada input membentuk sudut tertentu tf.Handle := CreateFontIndirect(lf); //Buat objek khusus Font Font.Assign(tf); //Gunakan objek ini ke program akhirnyatf.Free; //Lepaskan akhir objek;TextOut(Image3.left, Image3.top+20, TheText); Gambar teks ke area yang ditentukanend;end;procedure TForm1.RotatedTextClick(Sender: TObject);VarTheAngle : Integer;beginTheAngle := StrToInt(Edit2.Text); //Mengubah teks dalam kotak teks menjadi sudut DrawRotatedText(Image3.Canvas, TheAngle, 'Delphi Graphics Studio'); //Panggil fungsi teks yang diputar end; ) ;vartf : TFont;theText:string;begintheText:='Delphi Graphics Studio'; //Atur teks dengan Image3.Canvas dobeginFont.Name := 'Arial'; //Mengatur font.Ukuran Font := 18; //Mengatur ukuran font Brush.Style := bsClear; //Mengatur gaya kuas tf:= TFont.Create; // Membuat objek khusus Font TextOut(Image3.left, Image3.top+20, TheText); //Gambar teks ke area yang ditentukanend;end;end.