|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"MDI親の中央にロゴマークを置く"
【タイトル】MDI親フォームの中央にロゴマーク(ビットマップ)を置く
(になっているはずです)
1:[ファイル(F)]、[新規作成(N)] で新規作成ダイアログを表示、
[プロジェクト]タブを選択、[MDIアプリケーション]で雛形を作ります。
2:MainForm に TImage を1個置き(Image1)、適当なビットマップを入れ
ます。
3:以下のコードを TMainForm に追加します。
type
TMainForm = class(TForm)
// ...(省略)...
private
FDefClientProc: TFarProc;
FClientInstance: TFarProc;
procedure ClientWndProc(var Message: TMessage);
procedure PutBitmap(DC: HDC);
protected
procedure CreateWnd; override;
// ここまで interface、ここから implementation
procedure TMainForm.ClientWndProc(var Message: TMessage);
procedure Default;
begin
with Message do
Result := CallWindowProc(FDefClientProc, ClientHandle, Msg, wParam,
lParam);
end;
begin
with Message do
case Msg of
WM_HSCROLL, WM_VSCROLL:
begin
Default;
InvalidateRect(ClientHandle, nil, FALSE);
end;
WM_ERASEBKGND:
begin
PutBitmap(TWMEraseBkGnd(Message).DC);
Result := 1;
end;
else
Default;
end;
end;
procedure TMainForm.PutBitmap(DC: HDC);
var
R: TRect;
w, h: Integer;
begin
Windows.GetClientRect(ClientHandle, R);
FillRect(DC, R, Brush.Handle);
w := Image1.Picture.Bitmap.Width;
h := Image1.Picture.Bitmap.Height;
BitBlt(DC, (R.Right - w)div 2, (R.Bottom - h)div 2, w, h,
Image1.Picture.Bitmap.Canvas.Handle, 0,0, SRCCOPY);
end;
procedure TMainForm.CreateWnd;
begin
inherited CreateWnd;
FClientInstance := MakeObjectInstance(ClientWndProc);
FDefClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(FClientInstance));
end;
MDI子フォームの移動によって、親フォームのスクロールバーの表示状態が
変わるとき(表示されるまたは消える場合に)、ちょっと位置がずれることが
あります。
それ以外は大丈夫...だとは思いますが、やばそうな部分や改良点があった
ら指摘してもらえると嬉しいです。
Original document by 河邦 正 氏 ID:(GCC02240)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|