主要目的是在显示照片时,在其底部显示一个块,并将此照片的相关信息写在上面(类似XP屏保中的“图片收藏幻灯片”那样)。由于我的图片显示控件是TPicShow(挺好用,有很多切换特效),本来我有个半透明的Panel控件也挺好用,但是它俩放在一起就是达不到半透明效果,没办法只能在TPicShow的事件在自已画了。
以下是我的Picshow中fterNewFrame事件的代码,目前只能实现显示文本(文本的背景是白色,不爽),怎样将文本的背景设成透明?且在图片的底部画一个半透明的“块”,并将文本写在上面?
procedure TMainForm.PicShowAfterNewFrame(Sender: TObject; Picture,
  Screen: TBitmap);
var
  Text: String;
begin
 if PicShow.Progress <100 then
    exit;
  Text := '这张照片是我的女友!'
  Screen.Canvas.Draw(0, 0, Picture);
  Screen.Canvas.Font.Style := [fsBold];
  Screen.Canvas.Font.Size := 14 ;
  SetTextAlign(Screen.Canvas.Handle, TA_LEFT or TA_BASELINE);
  Screen.Canvas.TextOut(10, Screen.Height - 20, Text);
end;请高手们帮忙,谢谢啦!

解决方案 »

  1.   

    SetBKMode(Screen.Canvas.Handle, TRANSPARENT);
      

  2.   

    那半透明的块怎么画呢?-----------
    说一种较简单的办法:
    需要准备一个BITMAP,假设是bmFr, 全部填充白色,把字写到这个bmFr上,然后把这个bmFr画到Screen.Canvas上:
    var
      w, h, x, y: S32;
      bf: BlendFunction;  w := bmFr.Width; h := bmFr.Height;  bf.BlendOp := AC_SRC_OVER;
      bf.BlendFlags := 0;
      bf.SourceConstantAlpha := 50;
      bf.AlphaFormat := 0;
      AlphaBlend(Screen.Canvas.Handle, 0, 0, w, h,
          bmFr.Canvas.Handle, x, y, w, h, bf);