他のアプリ(メモ帳)のような保存ダイアログを表示するには?

解決


4610  2006-10-05 15:50:52  No: 23481  IP: 192.*.*.*

はじめまして。Delphi5を使用しています。

SaveDialogコンポーネントで、メモ帳の「名前を付けて保存」ダイアログを表示するには、どのようにすればよいのでしょうか?

デスクトップやマイドキュメント、マイコンピュータなど、メモ帳の「名前を付けて保存」ダイアログに表示されているようにしたいのですが、SaveDialogコンポーネントで表示させることはできるのでしょうか?

ご教授よろしくお願いします。

編集 削除
cho  2006-10-05 16:37:54  No: 23482  IP: 192.*.*.*

Delphi6からだと使えるみたいですね...。

編集 削除
4610  2006-10-05 16:54:38  No: 23483  IP: 192.*.*.*

choさん、返答ありがとうございます。

Delphi6だと使えるんですね。Delphi5は無理なんですね;;

Delphi5の場合だとWindowsAPIなどで、メモ帳の「名前を付けて保存」ダイアログを表示させることは可能でしょうか?

編集 削除
果汁10%  2006-10-05 18:35:36  No: 23484  IP: 192.*.*.*

手抜きして、こんな感じ
D5でWinXPとWinNT4.0(今までと同じダイアログになることを)で確認

type
  TSaveDialog500  =class(TSaveDialog)
  protected
    function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool; override;
  end;

function TSaveDialog500.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
type
  TOpenFilename500 = packed record
    OpenFilename: TOpenFilename;
    pvReserved: Pointer;
    dwReserved: DWORD;
    FlagsEx: DWORD;
  end;
var
  dlgData: TOpenFilename;
  dlgData500: TOpenFilename500;
begin
  dlgData := TOpenFilename(DialogData);
  CopyMemory(@dlgData500, @dlgData, SizeOf(TOpenFilename));
  dlgData500.pvReserved := nil;
  dlgData500.dwReserved := 0;
  dlgData500.FlagsEx    := 0;

  { Win2k or WinME 以降}
  if (Win32MajorVersion >= 5) and
     (Win32Platform = VER_PLATFORM_WIN32_NT) or { Win2k }
     ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
      (Win32MajorVersion >= 4) and
      (Win32MinorVersion >= 90) ) then begin
    dlgData500.OpenFilename.lStructSize := SizeOf(TOpenFilename500);
  end;

  Result := inherited TaskModalDialog(DialogFunc, dlgData500);
end;

編集 削除
4610  2006-10-05 19:00:50  No: 23485  IP: 192.*.*.*

果汁10%さん、返答ありがとうございます。

教えて頂いたコードを入れてコンパイルしたのですが、
「未定義の識別子」:'EnumWndProc'などのコンパイルエラーが出てしまい
コンパイルができないんです。

勉強不足ですみませんが、ほかにも追加しなければならないものが
あるのならばご教授願います。

編集 削除
ひみつ日記  2006-10-05 22:24:42  No: 23486  IP: 192.*.*.*

果汁10%さんのコードに、EnumWndProc はありませんよ?
もともとエラーが出ていたのでは?
新しいプロジェクトを作って、それで試してみたらどうですか?

編集 削除
4610  2006-10-10 13:05:36  No: 23487  IP: 192.*.*.*

ひみつ日記さん、返答ありがとうございます。

言われたとおり、新しいプロジェクトでコンパイルをかけたら
「EnumWndProc」 は出ませんでした。

ご指摘ありがとうございます。

果汁10%さんに教えていただいたコードでやってみます。

みなさん、ありがとうございました。

編集 削除