本人新手一只
最近写个程序,想把程序设置成多个大小图标的样式
将MAINICON替换为多个大小的图标后还算正常
只是,当我添加上vista之后支持的256*256的超大图标后,编译总是显示out of memory
然后又将曾经在vb中用过的设置程序图标的一个小过程移植了过去,seticon,在资源中另外设置一个图标,结果……开始第一次编译倒是成功了,但是重新打开工程后还是内存溢出。
好想用vista的超大图标啊……附上咱的过程procedure TfrmMain.SetIcon(hwnd:THandle; sIconResName:string; bSetAsAppIcon:boolean);
var
lhWndTop:longint;
lhWnd:THandle;
cx:longint;
cy:longint;
hIconLarge:longint;
hIconSmall:longint;
begin
if (bSetAsAppIcon) then
begin
lhWnd := hwnd;
lhWndTop := lhWnd;
While Not (lhWnd = 0) do
begin
lhWnd := GetWindow(lhWnd, GW_OWNER);
If Not (lhWnd = 0) Then
lhWndTop := lhWnd;
end;
end;
cx := GetSystemMetrics(SM_CXICON);
cy := GetSystemMetrics(SM_CYICON);
hIconLarge := LoadImageAsString(application.InstanceSize, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED);
If (bSetAsAppIcon) Then SendMessageLong (lhWndTop, WM_SETICON, ICON_BIG, hIconLarge);
SendMessageLong (hwnd, WM_SETICON, ICON_BIG, hIconLarge); cx := GetSystemMetrics(SM_CXSMICON);
cy := GetSystemMetrics(SM_CYSMICON);
hIconSmall := LoadImageAsString(Application.InstanceSize, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED); If (bSetAsAppIcon) Then SendMessageLong (lhWndTop, WM_SETICON, ICON_SMALL, hIconSmall);
SendMessageLong (hwnd, WM_SETICON, ICON_SMALL, hIconSmall);end;里面有些东西是不懂装懂弄上的……不过编译倒是没报错
最近写个程序,想把程序设置成多个大小图标的样式
将MAINICON替换为多个大小的图标后还算正常
只是,当我添加上vista之后支持的256*256的超大图标后,编译总是显示out of memory
然后又将曾经在vb中用过的设置程序图标的一个小过程移植了过去,seticon,在资源中另外设置一个图标,结果……开始第一次编译倒是成功了,但是重新打开工程后还是内存溢出。
好想用vista的超大图标啊……附上咱的过程procedure TfrmMain.SetIcon(hwnd:THandle; sIconResName:string; bSetAsAppIcon:boolean);
var
lhWndTop:longint;
lhWnd:THandle;
cx:longint;
cy:longint;
hIconLarge:longint;
hIconSmall:longint;
begin
if (bSetAsAppIcon) then
begin
lhWnd := hwnd;
lhWndTop := lhWnd;
While Not (lhWnd = 0) do
begin
lhWnd := GetWindow(lhWnd, GW_OWNER);
If Not (lhWnd = 0) Then
lhWndTop := lhWnd;
end;
end;
cx := GetSystemMetrics(SM_CXICON);
cy := GetSystemMetrics(SM_CYICON);
hIconLarge := LoadImageAsString(application.InstanceSize, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED);
If (bSetAsAppIcon) Then SendMessageLong (lhWndTop, WM_SETICON, ICON_BIG, hIconLarge);
SendMessageLong (hwnd, WM_SETICON, ICON_BIG, hIconLarge); cx := GetSystemMetrics(SM_CXSMICON);
cy := GetSystemMetrics(SM_CYSMICON);
hIconSmall := LoadImageAsString(Application.InstanceSize, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED); If (bSetAsAppIcon) Then SendMessageLong (lhWndTop, WM_SETICON, ICON_SMALL, hIconSmall);
SendMessageLong (hwnd, WM_SETICON, ICON_SMALL, hIconSmall);end;里面有些东西是不懂装懂弄上的……不过编译倒是没报错
xp下应该会自动选择小一号的……