メーラと同時進行でメーラの文章を外部から編集できるメモ帳を
一緒に作っているのですが、その時にMemoコンポーネントの
Windows9x系での32KBの制限をチェックしようとOSのバージョンと
ファイルサイズの取得をしてWindows9x系で32KB以上のファイルを
読み込もうとしたらメッセージを表示してNT(2000等)の場合は
事実上の制限がないのでそのまま読み込むと言う条件を作って
Windows2000Professionalでやってみたのですが、なぜか
何度やってもWIN32s(Windows3.1+Win32s)に条件が飛んでしまうのですが
これはどうして起こるのでしょうか?
// ファイルを読み込む
procedure TForm1.Open1Click(Sender: TObject);
var
Rec : TSearchRec;
intSize : Integer;
DataSize : Integer;
OsType : Integer;
begin
if OpenDialog1.Execute then
begin
GetVersionEx(OSver);
FindFirst(OpenDialog1.FileName, faAnyFile, Rec);
intSize := Rec.Size;
DataSize := intSize div 1024;
ShowMessage(IntToStr(DataSize));
case OSver.dwPlatformId of
VER_PLATFORM_WIN32s: OsType := 0; // Windows3.1+Win32s
VER_PLATFORM_WIN32_WINDOWS: OsType := 1; // Windows9x(95&98&Me)
VER_PLATFORM_WIN32_NT: OsType := 2; // WindowsNT(3.51&4.0&2000&XP)
else
OsType := 3;
end;
if OsType < 1 then
begin
if DataSize > 32 then
begin
ShowMessage('Windows95,98,Meでは32KB以上のファイルは開けません!!');
Exit;
end;
end;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
SaveDialog1.Filename := OpenDialog1.FileName;
Caption := ExtractFileName(OpenDialog1.FileName) + ' - NyantaPad';
bMod := False;
end;
end;
GetVersionExに失敗しているからでしょう。
if GetVersionEx(OSver) = 0 then ShowMessage('失敗');
として、失敗とダイアログが出れば失敗しています。
考えられるのは、「OSVerの構造体サイズが未設定」です。
ちゃんと設定してありますか?
構造体のサイズの設定をしないまま取得をしていたようです。
あとは32KB以上ファイルを読み込めるエディッタにファイル名を
渡してShellExecuteで呼び出してみます。
ツイート | ![]() |