一个在image上Textout的问题(100分)

  • 主题发起人 主题发起人 pogoo
  • 开始时间 开始时间
P

pogoo

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在Delphi的Image控件的bmp图片上输出字符串,我用的是TextOut(),但是
这样会在字符串下留下一个白底,请问我应如何去掉这个白底,而使字符串透
明地写在bmp图片上呢?谢谢!
 
Image.Canvas.Brush.Style := bsClear;
然后再 TextOut
 
SetBkColor or SetBkMode,然后在WIN32HELP中查找,包你满意。
 
不对,记得有个函数可以无底色的文本输出,是什么现在记不起来了,等我找找!
 
setbkmode(handle,transparent)
 
尝试修改TCanvas.TextFlags属性。
 
我好象回答过这个问题
setbkmode(canvas.handle,windows.transparent);
canvas.textout(1,1,'adsfdsf');
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Timer1: TTimer;
Image2: TImage;//背景图片
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
J: Integer;//保存Image1的高度

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
J:=Image1.Height;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
Image1.Canvas.Lock;
Image1.Canvas.Brush.Style := bsSolid ;
Image1.Canvas.Font.Color := clBlack;
Image1.Canvas.Font.Size:=10;
For i:=0 to Memo1.Lines.Count-1 do
Image1.Canvas.TextOut(1,J+i*2*Image1.Canvas.Font.Size,Memo1.Lines.Strings);
Dec(j);
Image1.Canvas.Unlock;
end;

end.

以上程序在 Delphi 5.0+Win98下通过,效果自认为还不错
 
To LeonSu:

你的程序似乎与本题无关,纵观整个程序也看不到任何有效的语句以满足题意。
况且程序中存在如下问题:
1)Image2既然作为背景图应该使用TBitmap以减少內存的开销。
2)Image2似乎没有使用过。
3)使用Timer加大了內存开销。
 
综合一下:
1、如果是用Delphi的函数,那么,就是设Brush.Style := bsClear就可以了。
Canvas.Brush.Style := bsClear;
Canvas.TextOut(10,10,"Hello World!");

2、如果是用SDK,就是SetBkMode(Canvas.Handle,Transparent)
SetBkMode(Canvas.Handle,Transparent);
Canvas.TextOut(10,10,"Hello World!");

试一试,然后把分分了吧!

 
SetBkMode(Canvas.Handle,TRANSPARENT) 即可。
 
时间太久,强制结束。 wjiachun
 
后退
顶部