掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TLabelを半透明化するには? (ID:16745)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
できませんさんを具現化した例です。 フォームに貼り付けたLabel1にオーバーラップしたLabel2でお互い色を変えて お試しあれ。 任意の背景にあわせるためにはコントロールのオーバーラップを調べないとできないですね。 コンポーネント化できたら教えてね! procedure TForm1.Button1Click(Sender: TObject); var work_bmp: TBitmap; x, y: integer; back_red, back_green, back_blue: integer; fore_red, fore_green, fore_blue: integer; back_col, fore_col, blend_col: TColor; procedure Resolution(col: TColor; var r: integer; var g: integer; var b: integer); begin b := (Col and $FF0000) div $10000; g := (Col and $FF00) div $100; r := Col and $FF; end; begin work_bmp := TBitmap.Create; try work_bmp.Width := Label2.Width; work_bmp.Height := Label2.Height; work_bmp.Canvas.Brush.Color := Label1.Color; work_bmp.Canvas.FillRect(Rect(0, 0, work_bmp.Width, work_bmp.Height)); work_bmp.Canvas.Font.Assign(Label1.Font); work_bmp.Canvas.TextOut(Label1.Left - Label2.Left, Label1.Top - Label2.Top, Label1.Caption); for y := 0 to Label2.Height do begin for x := 0 to Label2.Width do begin back_col := work_bmp.Canvas.Pixels[x, y]; Resolution(back_col, back_red, back_green, back_blue); fore_col := Label2.Canvas.Pixels[x, y]; Resolution(fore_col, fore_red, fore_green, fore_blue); blend_col := Round((back_red + fore_red) / 2) + Round((back_green + fore_green) / 2) * $100 + Round((back_blue + fore_blue) / 2) * $10000; work_bmp.Canvas.Pixels[x, y] := blend_col; end; end; Label2.Canvas.Lock; Label2.Canvas.CopyMode := cmSrcCopy; Label2.Canvas.CopyRect( Rect(0,0,Label2.Width, Label2.Height), work_bmp.Canvas, Rect(0, 0, Label2.Width, Label2.Height)); Label2.Canvas.Unlock; finally work_bmp.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.