スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Try&Error 付箋アプリを作ってみる stickies (2)

やるといってから結構な時間が立ちましたけど、結果的には辿り着く前に飽きたっぽい。
原因は、そうだバージョン情報の画面作ってみようそうしよう。というわけでして、ウロウロしてる間に勢いが削げました。

でも少しは得るところがあったので、タイトルとの食い違いはこの際無視して書いておきます。
目標は(と呼ぶのも変か...)、Delphiで作った時に必ずつけてた奴です。
こんなの。



で、できたのがこんなの。



ま、どうでもいいことですね。ちょっとだけ悩んだところだけ書いておきます。

画面の左上に表示しているアプリケーションのアイコン。Delphi版の時は
Image1.Picture.Icon := Application.Icon;

でいけてましたが、Lazarusだと16x16のちっさめのアイコンになってしまいます。

TApplicationとかTCustomApplicationのプロパティを眺めて見ること数分。

BigIconHandle: HICON;

それっぽい。でもなぁ。Windows7って異常にでっかいアイコンあるしなぁ。あれかもな。
と思いつつ、
Image1.Picture.Icon.Handle := Application.BigIconHandle;

とやってみた。その結果が、上の画面です。

Image1.Picture.Icon.Handleに代入していいかどうかは別として動いてるのでこれで。

あとは、Windowsのバージョン情報関係なんですが

@IT:.NET TIPS Windows OSの種類やバージョンを判別するには? - C# VB.NET:[2012/04/22]
Windows OSのエディションまで細かく判別するには?【Vista対応】[2.0のみ、C#、VB] - @IT:[2012/04/22]
Windowsのバージョン情報:[2012/04/22]
OSVERSIONINFOEX structure:[2012/04/26]

前と同じ内容でやりかけて、Windows95とかサポートしてどうする?とか思ったり、WindowsNTなんてほぼ出会わねぇよ、ServerEditionをなぜ気にする?等々色々端折って、あっさり処置にしました。
usesは、余計なものも入ってると思います。GlobalMemoryStatusとか使うのに必要なユニットが混ざってそうです。

uses
ShlObj, ActiveX, ComObj, jwapsapi, dateutils, LCLVersion;

//---------------------------------------------------------
//TOSVersionInfoEx
type
TOSVersionInfoEx = record
dwOSVersionInfoSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwBuildNumber: DWORD;
dwPlatformId: DWORD;
szCSDVersion: array[0..127] of AnsiChar;
wServicePackMajor: word; //Ex only
wServicePackMinor: word; //Ex only
wSuiteMask: word; //Ex only
wProductType: byte; //Ex only
wReserved: byte; //Ex only
end;

//---------------------------------------------------------
//Windows.pas
function GetVersionEx(var lpVersionInformation: TOSVersionInfoEx): BOOL; stdcall;
external kernel32
name 'GetVersionExA';

//---------------------------------------------------------
//http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx
const
VER_NT_WORKSTATION = $0000001;

//---------------------------------------------------------
//Windows Version (2000 and later only)
//http://www.atmarkit.co.jp/fdotnet/dotnettips/553winver2deep/winver2deep.html
//http://msdn.microsoft.com/en-us/library/ms724834.aspx
//http://msdn.microsoft.com/ja-jp/library/cc429812.aspx
function GetWindowsVer(): string;
var
Losvi: TOSVersionInfoEx;
LResEx: Boolean;
LVer: Integer;
begin
Result := '';

//1. TOSVersionInfoEx 2. TOSVersionInfo
FillChar(Losvi, SizeOf(TOSVersionInfoEx), #0);
Losvi.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
LResEx := GetVersionEx(Losvi);

if (not LResEx) then
begin
Losvi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if not GetVersionEx(Losvi) then Exit;
end;

case Losvi.dwPlatformId of
VER_PLATFORM_WIN32s, VER_PLATFORM_WIN32_WINDOWS:
Result := Format('Windows %d.%d',
[Losvi.dwMajorVersion, Losvi.dwMinorVersion]);
VER_PLATFORM_WIN32_NT:
begin
LVer := Losvi.dwMajorVersion * 10
+ Losvi.dwMinorVersion;
case LVer of
40..49:
Result := 'Windows NT';
50: Result := 'Windows 2000';
51: Result := 'Windows XP';
52: if (GetSystemMetrics(SM_SERVERR2) <> 0) then
Result := 'Windows Server 2003 R2'
else
Result := 'Windows Server 2003';
60: if (LResEx and (Losvi.wProductType
<> VER_NT_WORKSTATION)) then
Result := 'Windows Server 2008'
else
Result := 'Windows Vista';
61: if (LResEx and (Losvi.wProductType
<> VER_NT_WORKSTATION)) then
Result := 'Windows Server 2008 R2'
else
Result := 'Windows 7';
62: Result := 'Windows 8?';
else
Result := 'Windows X';
end;
end;
end;

Result := Result + Format(' %s (Build %d)',
[Losvi.szCSDVersion, Losvi.dwBuildNumber and $FFFF]);
end;


あとは、自分の作ったアプリが浪費しているメモリの使用状況がわかるような何かとかです。

Show memory usage of application:[2012/04/26]
プロセスのメモリ情報を取得 - プログラミングのメモ帳:[2012/04/26]

そんなところで。
関連記事
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。