Консультация № 108576
08.11.2007, 15:48
0.00 руб.
0 2 2
Здравствуйте!
Нашел в Delphi World такой примерчик (см. прил.) вывода текста (под любым углом) на Image. Предварительно там находится рисунок, но после вставки текста, фон самого текста остается белым. Как сделать, чтобы фон текста был прозрачным для рисунка?

Приложение:
Procedure DisplayText(txt:string; Cnv:TCanvas);var lf: TLogFont;beginFillChar(lf, SizeOf(lf), 0);with lf do begin lfHeight := 25; lfWidth := 20; lfEscapement := 450; lfWeight := 0; lfItalic := 0; lfUnderline := 0; lfStrikeOut := 0; lfCharSet := RUSSIAN_CharSet; StrCopy(lfFaceName, ‘Arial‘);end;with cnv do begin Font.Handle := CreateFontIndirect(lf); font.Color:=clRed; TextOut(10, 100, txt);end;end;procedure TForm1.Button1Click(Sender: TObject);beginDisplayText(‘Hello!‘,image1.Canvas);image1.Refresh;end;

Обсуждение

Неизвестный
08.11.2007, 16:01
общий
это ответ
Здравствуйте, Red Spirit!

Добавьте эту строчку перед выводом текста. Она сделает заливку на канве "никакого" стиля:

Cnv.Brush.Style := bsClear;
Неизвестный
09.11.2007, 13:21
общий
это ответ
Здравствуйте, Red Spirit!

Я немного модернизировал ваш код и первоначально пишу в битмапе,
а затем копирую в Имаже поработайте с CopyMode и у вас все получится


Приложение:
procedure DisplayText(txt: String; Cnv: TCanvas);var lf: TLogFont; bit: TBitMap; rec: TRect;begin bit:= TBitMap.Create; bit.Width:= Form1.Image1.Width; bit.Height:= Form1.Image1.Height; rec:= Rect(0, 0, bit.Width, bit.Height); FillChar(lf, SizeOf(lf), 0); with lf do begin lfHeight := 25; lfWidth := 20; lfEscapement := 450; lfWeight := 0; lfItalic := 0; lfUnderline := 0; lfStrikeOut := 0; lfCharSet := RUSSIAN_CharSet; StrCopy(lfFaceName, ‘Arial‘); end; with bit.Canvas do begin Font.Handle := CreateFontIndirect(lf); font.Color:=clRed; TextOut(10, 100, txt); end; Form1.Image1.Canvas.CopyRect(rec, bit.Canvas, rec); bit.Free;end;procedure TForm1.BitBtn1Click(Sender: TObject);begin Image1.Canvas.CopyMode:= cmSrcAnd; DisplayText(‘Hello!‘,Image1.Canvas); Image1.Refresh;end;
Форма ответа