难题。高分求解。分数不够再加没有问题(300分)

  • 主题发起人 主题发起人 gameabc
  • 开始时间 开始时间
G

gameabc

Unregistered / Unconfirmed
GUEST, unregistred user!
在win98下,如果已经运行了很多其他的程序(比如IE浏览器、office,还有photoshop等等),
然后运行用delphi写的非常简单的程序,程序只是往mainform上摆一大堆空件,没有代码。‘系统资源不足,无法正常显示屏幕’。
如何使得自己的程序在这种情况下,给个‘系统资源不足’的提示,
然后自动退出,而不是机器死机?
 
这样看看

program Project1;

uses
Windows,
SysUtils,
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
try
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
except
on E: Exception do
MessageBox(GetActiveWindow, PChar(E.Message), '警告', MB_OK);
end;
end.
 
不行。捕捉不到
 
// project

var
wOldErrorMode:Word;
begin
wOldErrorMode:=SetErrorMode(SEM_FAILCRITICALERRORS);
try
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
finally
SetErrorMode(wOldErrorMode);
end;
if not(ok) then showmessage('系统资源不足');
end;
在 主 form 中声明:
var
Ok:Boolean=false;

在主Form 的 OnShow 中设置 Ok:=true;
 
升级你的电脑,重装软件。
 
有一个不太好的办法,
对于程序可以正常运行的所需最小的硬盘空间, 内存, GDI, 窗体句柄等资源进行检测
系统启动时检测有关数据, 如果不满足则不进行Application的初始化工作, 报警
 
怎么检查?
请写出代码。
是否还没有检查出来,自己的代码已经执行不下去了?

600分啊!!!
 
为什么我回复不了?
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellApi, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FTimer : TTimer;
TmpBmp : TBitmap;
procedure Timer1Timer(Sender: TObject);
public
{ Public declarations }
end;
var Form1: TForm1;
 
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var I : Integer;
begin
FTimer := TTimer.Create(self);
FTimer.Interval := 10;
FTimer.OnTimer := Timer1Timer;
WindowState := wsMaximized;
TmpBmp := TBitmap.Create;
TmpBmp.LoadFromFile('c:/windows/Bubbles.bmp');
For I:=1 To 100 Do
ShellExecute(Application.Handle, PChar('open'),
PChar('About:blank'), PChar(0), nil, SW_NORMAL);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin TmpBmp.Destroy;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var X,Y : Integer;
begin
If (TmpBmp.Width = 0) or (TmpBmp.Height = 0) Then Exit;
For X := 0 To (Width div TmpBmp.Width) Do
For Y:= 0 To (Height div TmpBmp.Height) Do
Canvas.Draw(X*TmpBmp.Width,Y*TmpBmp.Height,TmpBmp);
end; end.
 
300分没有人要吗?
 
>>> 程序只是往mainform上摆一大堆控件。<<< 错了。
图形方面的控件用多了就会,特别是gif控件。
用程动态的生成控件,不用的控件要Free。
 
看来都是这个水平,散分了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部