小问题,如何使Delphi运行后不建立默认窗体?(50分)

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

whbell

Unregistered / Unconfirmed
GUEST, unregistred user!
另有一个问题:
在通讯程序中,发送不成功,隔一会儿再次发送。直到成功。
这样的模式怎么编程比较正规?
try
SendString
except
<later send again>
Exption.Create('no succs send!');
end;
 
1、不建立默认窗体?你可以做一个控制台的程序嘛!
Delphi菜单 -> New -> Console Application
就可以了。
2、建一个循环就是了:
procedure Form1Button1Click(Sender:TObject);
begin
While not SendString do
begin
//提示用户,让它确定是否要退出。
//当然得给人留条活口,是吧?
if Application.MessageBox('发送不成功,是否继续?','提示',
MB_ICONINFORMATION+MB_OKCANCEL+MB_DEFBUTTON1)
<> IDOK then
Break;
end;
end;
end;
假设SendString成功返回True;
 
不建立默认窗体,还有办法。
代码中有application创建form的代码,我想,
把它删了就成了
 
1、看你需要做什么样应用的程序了,若是WIN的话那么就不行(只有程序启动时将
MAINFORM隐藏)。若是像DOS那样的话可以。
2、如上所讲(2)!
 
1、我想你说的是如何在delphi启动时不加载默认的空白工程,是不是?
方法:在delphi的快捷方式的“目标”中加上 "/np"。
2、通讯程序通常都是非阻塞、异步执行的,绝对不能使用循环来做,否则会出问题。并且
网络传输的错误并不是在本机上就可以检测的。所以网络传输通常这么做:在接收方收到
信号验证正确后,发送一个“收到”信息回发送端。而发送端在一个指定的时间内如果收不
到返回的信息则重发。
 
对于问题1。远帆说对了

可是我试验了,不行
我的操作:
在开始菜单中找到delphi,右键选择“属性“
在弹出的属性对话框中,“目标“输入框中写入
"D:/Program Files/Borland/Delphi5/Bin/delphi32.exe /np"
确定后,系统说此文件名无效

是不是我的操作有问题?

2、通讯程序
有一些启动比较慢的硬件,和通讯相关,
再他们还没有初始化完成发送信息,则会抛出异常,
这是需要隔一会儿再次发送,怎么办?

我上次没有说清楚,抱歉!
 
问题1:去掉双引号就可以了。
问题2:我也不太清楚。你的意思是不是:由于某些硬件的启动速度比较慢,所以引起程序
产生异常?我想如果是这个原因,可能需要加长应用程序的等待时间,或者先行初始化。
 
第二个问题我的思路:

自己建一个消息队列,先进先出,在sendcomplete事件里为何这个队列
 
1. 在主Unit里会看到Application.CreateForm(TXXX, XXX),把它删掉就不创建默认窗体了。
你可以自己在里面增加创建窗体的代码。
2. 同上。用循环。
 
一、如果是不想Delphi开始时新建一个空白工程,只要把改:
X:/Delphi5/Bin/delphi32.exe -np
注意是“-”不是“/”!
-ns是不出现Splash的画面,-np是不新建工程,我一般是:
E:/Delphi5/Bin/delphi32.exe -ns -np
二、有必要在循环中管SendString的出错吗?
我想可能是你的程序没有划分好,必要的出错处理要到这时候才做!
简单的改一下:
fucntion DoSend:Boolean;
begin
Result := false;
try
SendString;//你的原型
if GetString then //读客户机的返回是否成功。这里你可能要加延时什么的,
//在一段时间内处理,如果读不到为失败,返回错也为失败
Result := true
Except
Result := false;
end;
end;
循环这样改:
procedure Form1Button1Click(Sender:TObject);
begin
While not DoSend do
begin
//提示用户,让它确定是否要退出。
//当然得给人留条活口,是吧?
if Application.MessageBox('发送不成功,是否继续?','提示',
MB_ICONINFORMATION+MB_OKCANCEL+MB_DEFBUTTON1)
<> IDOK then
Break;
end;
end;
end;

 
to 杜宝:
我试了一下 -np 是可以,但是 /np 也绝对可以。你不试试就发贴子吗?
 
to 远帆:
呵呵,一开始我是这样想的,别人已经试过了我就没有必要试了。
现在试了一个,/ 果然是可以的。上面的话我收回。
我查了一个Delphi的帮助,它的是/ -混用的:
You must precede all options (unless otherwise noted) with
either a dash (-) or a slash (/). The options are not case
sensitive.

 
第二个问题----
判断返回值就可以了。
 
to 杜宝:
呵呵呵~没关系的。虽然是回答问题,但我们也学到了自已未知的知识。不是吗?
:)
 
to远帆 :

我去掉了引号
可是系统提示说
“D:/Program “是无效的文件名

我在开始菜单“运行”里写
D:/Program Files/Borland/Delphi5/Bin/delphi32.exe -np

仍然不行。
我的操作没问题啊,怎么回事?帮帮我
 
我明白了

在“目标“中
写入
"D:/Program Files/Borland/Delphi5/Bin/delphi32.exe" -np -ns

-np -ns放在引号之外
解决了
花了好大的劲,起初以为delphi不能装有空格的目录下
我甚至写了个批处理:用快捷方式指向他
d:
cd D:/Program Files/Borland/Delphi5/Bin/
delphi32.exe -np
问题解决了,然而dos窗体却不能关闭,这一点谁能解释?
 
我用的是2000的系统,不要引号。加了引号也被自动取消。不知你是不是98?我在98下试
也不需要引号的呀?
dos窗口关闭的问题,你可以选取中快捷方式的“程序/运行完毕关闭窗口”就可以了。
 
佩服远帆。
 
多人接受答案了。
 
后退
顶部