お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"RE:コモンダイアログの表示位置を変更"

この発言は
#00490 Satobe さんのコモンダイアログの表示位置を変更
に対するコメントです

この発言に対し以下のコメントが寄せられています
#00945 Satobe さん RE^2:コモンダイアログの表示位置を変更

TOpenDialog.Options プロパティで、ofOldStyleDialog が True に 設定されていた場合に、表示位置の変更が働きませんでした。m(_`_)m ----- 修正版 ----- //OpenDialog1 OnShowイベント procedure TForm1.OpenDialog1Show(Sender: TObject); begin if ofOldStyleDialog in (Sender as TOpenDialog).Options then FOpenDialog1hWnd := (Sender as TOpenDialog).Handle else FOpenDialog1hWnd := GetParent((Sender as TOpenDialog).Handle); //動的サブクラス化 FOpenDialog1MoveFlag := False; //位置調整していない FNewOpenDialog1WndProc := MakeObjectInstance(OpenDialog1WndProc); FOldOpenDialog1WndProc := Pointer(GetWindowLong(FOpenDialog1hWnd, GWL_WNDPROC)); SetWindowLong(FOpenDialog1hWnd, GWL_WNDPROC, Longint(FNewOpenDialog1WndProc)); end; //OpenDialog1の新しいウィンドウプロシージャ procedure TForm1.OpenDialog1WndProc(var Message: TMessage); var pWinPos: PWindowPos; DeskTop,rc: TRect; begin if (Message.Msg = WM_WINDOWPOSCHANGING) and (FOpenDialog1MoveFlag = False) then begin pWinPos := PWindowPos(Message.LParam); pWinPos^.flags := pWinPos^.flags and not(SWP_NOMOVE); FOpenDialog1MoveFlag := True; //位置調整を行った //↓ここで表示位置(ダイアログの左上)を // スクリーン座標で設定する //(右下に表示する例) SystemParametersInfo(SPI_GETWORKAREA, 0, @DeskTop, 0); GetWindowRect(FOpenDialog1hWnd, rc); pWinPos^.x := DeskTop.Right - (rc.Right - rc.Left); pWinPos^.y := DeskTop.Bottom- (rc.Bottom- rc.Top); //(↓左上に表示するなら) //pWinPos^.x := DeskTop.Left; //pWinPos^.y := DeskTop.Top; end; Message.Result := CallWindowProc(FOldOpenDialog1WndProc, FOpenDialog1hWnd, Message.Msg, Message.WParam, Message.LParam); end; 上記、OpenDialog1Show と OpenDialog1WndProc 以外は、前回のまま でokです。 98/04/12(日) 01:33 Satobe(JCG00336) Original document by Satobe 氏 ID:(JCG00336)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum