// Hiermit wird
Text ausgegeben, der mit einer Textur
(Bitmap) gefüllt ist. TexturSchrift( procedure TexturSchrift(c: TCanvas; x, y, fontsize: integer; txt, fontname: string; bitmap: TBitmap; hintergrund: TColor; transparenz: boolean); var rgn: HRGN; bmp: TBitmap; i, j: integer; begin bmp := TBitmap.Create; BeginPath(c.handle); SetBkMode(c.handle, TRANSPARENT); c.font.name := fontname; c.font.size := fontsize; c.font.style := [fsbold]; bmp.width := c.textwidth(txt); bmp.height := c.textheight(txt); bmp.canvas.brush.color := hintergrund; bmp.canvas.fillrect(bmp.canvas.cliprect); TextOut(c.handle, 0, 0, pchar(txt), length(txt)); EndPath(c.handle); rgn := PathToRegion(c.handle); SelectClipRgn(bmp.canvas.handle, rgn); for i := 0 to bmp.width div bitmap.width do for j := 0 to bmp.height div bitmap.height do bmp.canvas.draw(i * bitmap.width, j * bitmap.height, bitmap); SelectClipRgn(bmp.canvas.handle, 0); bmp.transparent := transparenz; c.Draw(x, y, bmp); DeleteObject(rgn); bmp.Free; end; // Beispielaufruf var b: TBitmap; const transp: boolean = true; procedure TForm1.FormCreate(Sender: TObject); begin b := TBitmap.create; b.loadfromfile('d:\texturen\flower.bmp'); end; procedure TForm1.FormDestroy(Sender: TObject); begin b.free; end; procedure TForm1.FormPaint(Sender: TObject); begin texturschrift(canvas, 75, 150, 60, 'Das ist ein Test', 'Arial', b, clblue, transp); end; procedure TForm1.Button1Click(Sender: TObject); begin transp := not transp; repaint; end; |