如何建立无窗体程序(缩小文件)?(100分)

  • 主题发起人 主题发起人 wjshh
  • 开始时间 开始时间
W

wjshh

Unregistered / Unconfirmed
GUEST, unregistred user!
用DELPHI编写程序在窗体中不放任何控件直接编译
其程序有300多K,能否将其缩小到10几K?并且在任何一台
机器上都能用。
 
把窗体文件从项目里面删除就行
 
直接在项目文件(*.dpr)中application.Initialize;与Application.Run;语句中间
书写代码。或者写成控制台程序(new|console application)
 
win32 SDK 方式
就象用C写Windows程序,是C不是VC
 

看来100分又要到手了,后面回答的人有抄袭的嫌疑!!!哈哈哈!!!

1. 在Delphi的“文件”菜单上选“New Application”。
2. 按Ctrl_F12,选Project1。
3. 在Delphi的菜单“Project”的下面选“Remove From Project”,选择Form1,按
“OK”按钮。
4. 在Project1.DPR中,把Uses Forms改为Uses Windows。
5. 如果程序不不要图标,把{$R *.RES}也删除。
6. 把 Application.Initialize
和 Application.Run;删除。
7. 可以编写你的具体程序了,下面给你一个例子:
program Project1;

uses
Windows;

begin
MessageBox(
GetActiveWindow(),
PChar('大家好!这是一个不足16K的程序!哈哈哈!!!'),
PChar('提示信息'),
MB_OK);
end.

喔!最后给我加分吧!哈哈哈!!!
 
如果要添加图标呢?
 

Re: 如果要添加图标呢?

1.
2.
3.
4.
5. 如果程序要图标,不把{$R *.RES}删除。
6.
7.
 
根本不行,编译出来的 EXE 文件无图标。
 
我可以E-mail给你.*.ico,*.res

*.dpr
program TEST;

uses
windows,messages;

{$R *.RES}

const
exename:pchar='TEST';
var
wClass: TWndClass
//窗口类变量
Msg: TMSG
//消息变量
hInst, //程序实例
Handle, //主窗口句柄
hFont:integer
//字体句柄

procedure ShutDown;
begin
DeleteObject(hFont);
//取消窗口类的注册
UnRegisterClass(wClass.lpszClassName,hInst);
//结束主进程
ExitProcess(hInst);
end;
//这是主窗口的消息处理函数
function WindowProc(hWnd,Msg,wParam,lParam:integer):Longint
stdcall;
begin
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
case Msg of
WM_DESTROY: ShutDown;
end;
end;
//定义几个窗口创建函数
function CreateMain(name:pchar;x1,y1,x2,y2:integer):hwnd;
begin
//取得应用程序实例句柄
hInst:=GetModuleHandle(nil);
//初使化窗口类的信息
with wClass do
begin
Style:= CS_PARENTDC;
hIcon:= LoadIcon(hInst,'MAINICON');
lpfnWndProc:= @WindowProc;
hInstance:= hInst;
hbrBackground:= COLOR_BTNFACE+1;
lpszClassName:= 'MainClass';
hCursor:= LoadCursor(0,IDC_ARROW);
end;
// 注册窗口类
RegisterClass(wClass);
// 建立主窗口
Result:=CreateWindow(wClass.lpszClassName,name,WS_OVERLAPPEDWINDOW or WS_VISIBLE,x1,y1,x2,y2,0,0,hInst,nil);
end;

//---------主过程,类似于 C语言 中的 WinMain()
begin
//建立主窗口
handle:=CreateMain(exename,10,10,320,135);
while(GetMessage(Msg,Handle,0,0))do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
 
你说的是控制台应用程序吗?

在delphi 5 中可以直接建立
 
X-MAX:E-mail*.ico,*.res给我好吗?我的E_mail zjd_sg@21cn.com
 
to tom12345:

编译出来的程序没有图标???你搞错没有?!
Delphi的缺少省图标就是了。

如果你需要该为自己的图标:

1.Delphi菜单的"Tools"的"Image Editor".
2. 打开你的资源文件,例如Project1.RES。
3. 打开ICON,再打开MAINICON,现在可以用粘贴的方法把你的图标加入并保存。
4. 重心编译Project1,再看看Project1.EXE,你发现已经变了图标了。
5. 给你个建议:多试试,再发言!!!
 
WQL:
谢谢你。
能使用不可视控件吗?
 
WQL:谢谢你。
 

当然可以,但是有两点说明:

1. 如果是TWinControl类的继承,例如TEdit,TButton,必须要有主Form。
2. 给TWinControl类的继承,直接建立即可,例如要使用TFileStream,可以在Uses中
加入Uses Classes,但是编译出来的程序有点份量。

// 举个例子,文件拷贝。
program Project1;
uses
Windows, Classes, Sysutils;

Var
sFl,tFl: TFileStream;
begin
sFl:=TFileStream.Create('c:/autoexec.bat',fmOpenRead);
tFl:=TFileStream.Create('c:/autoexec.bak',fmCreate Or fmOpenWrite);
try
tFl.CopyFrom(sFl,sFl.Size);
MessageBox(
GetActiveWindow(),
PChar('文件c:/autoexec.bat备份成功 !'),
PChar('提示信息'),
MB_OK);
finally
sFl.free;
tFl.free;
end;
end.
 
接受答案了.
 
后退
顶部