このスレッドはロックされています。記事の閲覧のみとなります。
トップページ > 記事閲覧
輪郭文字描画&ウィンドウの変形
日時: 2005/04/08 00:18
名前: WoodyBells管理人

これもまぁ、ありふれたネタですが...
Form1にTButtonを2個貼り付けてある状態が前提です。


// Form1に輪郭文字を描画
procedure TForm1.Button1Click(Sender: TObject);
var
  Rct: TRect;
  Txt: String;
  Rgn: HRGN;
begin
  Txt := '輪郭文字';
  // 文字の種類と大きさ
  with Canvas.Font do
  begin
    Name   := 'MS P明朝';
    Height := 96;
    Style  := Style + [fsBold];
  end;
  with Canvas do
  begin
    SetBkMode(Handle, TRANSPARENT);
    // Path記録開始
    BeginPath(Handle);
    try
      DrawText(Handle, PChar(Txt), -1, Rct, 0);
    finally
      // Path記録終了
      EndPath(Handle);
    end;
    // Path から Region を作成
    Rgn := PathToRegion(Handle);
    try
      // 枠線の色
      Brush.Color := clBlue;
      // Region に沿って境界を描きます
      FrameRgn(Handle, Rgn, Brush.Handle, 1, 1 );
               // ここで枠線の幅を指定_/~~~~
    finally
      // 作成したRegionはきちんと破棄しましょう。
      DeleteObject(Rgn);
    end;
  end;
end;

// Form1を輪郭文字に変形
// 最後以外輪郭文字描画と同じ
procedure TForm1.Button2Click(Sender: TObject);
var
  Rct: TRect;
  Txt: String;
  Rgn: HRGN;
begin
  Txt := '輪郭文字';
  with Canvas.Font do
  begin
    Name   := 'MS P明朝';
    Height := 96;
    Style  := Style + [fsBold];
  end;
  with Canvas do
  begin
    SetBkMode(Handle, TRANSPARENT);
    BeginPath(Handle);
    try
      DrawText(Handle, PChar(Txt), -1, Rct, 0);
    finally
      EndPath(Handle);
    end;
    Rgn := PathToRegion(Handle);

    // WindowをRegionの形に変形
    // なお、SetWindowRgnでウィンドウに割り当てたRegionは以降、
    // OSが管理するので、DeleteObjectを ** してはいけません **。

    SetWindowRgn(Self.Handle, Rgn, True);

  end;
end;
メンテ

Page: 1 |