紧急求救:小弟在2000下写的程序在98下用不了?????同样是微软出的操作系统,咱的程序执行的结果怎就那么大呢?(200分)

大毛

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟近日刚写完一段程序,是在2000server+delphi6的环境下写的,几乎没有用什么特殊控件,
就用了XML3.0类型库和TWebBrowser,用以处理一些xml文档。可是当把EXE文件拿到98及WINME下
用时,发生了一些莫名其妙的事情:
1:Treeview和ListView的背景颜色发生了变化,同时一些按钮的大小也变了,甚至在SplitterMoved
事件下调整各控件的位置时,不再是2000下预想的效果,出现了叠沓的现象。
2:点击一按钮准备打开某一窗体时(根本没打开),告知"Invalid pointer operation",在此点击
时,告知"Cannot make a visible window modal".(这个问题最致命,我大部分检索功能全在这个窗体里)
3:还有,我在About对话框中加了一幅图片,也改变了大小。
以上问题在2000下没有一点儿问题。
还有若干个问题,不一一提出,小弟是初次写程序,经验颇少,不知为何发生此种现象,
无一点头绪,而程序马上就要交付使用。请各位题点建议,不知各位在写程序时,是否也遇到
此类问题。同样是微软出的操作系统,执行的结果怎就那么大呢?
 
在98上安裝了Delphi6了嗎?要是安裝了就再將Delphi6長級一下試試吧!

要是沒有安裝的話那你的程序有沒有用到ADO控件呢,如果有那你就在98上再次安裝一下
ADO的升級程序吧,因為98上的ADO版本與二千的不同,也會出現無法使用的情況的
 
虽然同样是微软出的操作系统,98和2000的差别可大了。两个系统的核心不一样,许多API
也就不一样。
第一个和第三个问题,应该是因为98和2000对系统颜色定义有些差别造成的,最常见的就是
在2000下的8号字体在98下显示很难看。解决这种问题,通常应以98下的显示效果来设置,
这样两者都会正确显示。
第三个问题,我觉得可能还是你的代码有问题,相同的错误在98和2000下的提示可能不同,
建议贴上这部分的代码来看看。
 
98下也装了DELPHI6,可问题还是一样,我跟本没有用到ado之类的控件!
 
大部分问题应该是分辨率或是桌面设定带来的问题吧。
你的第二个问题应该跟程序有关,其它窗口可以打开。也许这个窗口用了什么98感到比较特殊的东西吧。
 
TO YoungSun:问题1和3倒是能够想解决的,我还没动手。下面是部分代码:procedure TMain.mnu_searchClick(Sender: TObject);
var
temp_path: string;
Execute: Boolean;
DomEle: IXMLDOMElement;
begin
Execute := false;
temp_path := ExtractFilePath(ldb_file);
PageControl1.ActivePage := TabSheet2;//激活查找标签卡

while not Execute do
begin
Form_search.ShowModal;//弹出组合检索对话框
if Form_search.ModalResult = mrOK then
begin
if (Trim(Form_search.user_input2.Text) = '')
and (Form_search.Rbutn2_all_law.Checked = false) then
begin
Form_input.ShowModal;
Execute := false;
Continue;
end;

Execute := true;
ListBox_f.Items.Clear;
StatusBar1.Panels[1].Text := '正在检索,请稍候... ';
Search(IXML1);
New(XmlDomDoc);
IXML3 := XmlDomDoc^.Create();
IXML3.load(temp_path + 'Search.xml');

if Form_search.Rbutn2_key.Checked then
begin
SearchKey(Trim(Form_search.user_input2.Text),IXML3);
end;

if Form_search.Rbutn2_title.Checked then
begin
SearchTitle(Trim(Form_search.user_input2.Text),IXML3);
end;

if Form_search.Rbutn2_all.Checked then
begin
SearchAll(Trim(Form_search.user_input2.Text),IXML3);
end;

if Form_search.Rbutn2_all_law.Checked then
begin
Search_AllLaw(IXML3);
end;

Label_count.Caption := IntToStr(ListBox_f.Items.Count);
AddScrollBar(ListBox_f);
StatusBar1.Panels[1].Text := '完成';

IXML3.removeChild(IXML3.documentElement);
DomEle := IXML3.createElement('目录');
IXML3._Set_documentElement(DomEle);
IXML3.save(temp_path + 'Search.xml');
end
else if Form_search.ModalResult = mrCancel then
begin
Exit;
end;
end;
end;
 
你需要查看你的Form和控件的字体,特别要注意的是,
你可能选择了字体,大小,但是没有选择字符集,字符集
任然是缺省的"西方",需要改为"CHINESE_GB2312",估计
你的问题90%是这样的,我碰到过
 
设置各个form的字体属性:最好为宋体9号,字符集一定要是CHINESE_GB2312。
Form上各个控件的parentfont属性设为false时,字符集也一定要按上述设置。
设置form的scaled属性为false。
对于出现'Cannot make a visible window modal'问题的form,修改其visible属性。
 
TO 天与地:我左看右看也看不出以上的代码什么特殊来!在它自己的单元里,我就写了些
控制输入错误的一些一般代码,没别的。
 
建议在98下重新编译,应该就没有问题了
 
四库全书,你不是混分吧?!
 
问题1跟问题3如同SS2000说的可以解决,不过终究没在2000下漂亮,那是没法改变的,
一般字体选择宋体9号,字符集为CHINESE_GB2312。
问题2:Cannot make a visible window modal。你应该是从fsMDIChild继承下来的,
然后又来ShowModal。最好的方法是再编一个父类,功能跟你继承的那个差不多,
代码复制一下就可以了。窗体风格为Normal,这样应该没问题了。
 
一步步简化。
把那个窗口上的所有控件或感觉特殊的控件都删掉,只留最普通的,编译,看行不行,如果可以打开,
那就是窗口上有控件做怪。反复试试。(注意做好源程序备份。)

另外,你的FromOnCreate事件里面没有什么操作吧?
 
win200的exe在98下字体放大很正常,可以通过设置win98的系统字体为win小字体,即可
解决。别的如果没用win底层的东西应该没问题,看一下程序打包如何,或在98下装个delphi6。
 
1、应该是win2k和win98的字符集不同造成的,修改每个控件的font的字符集为"CHINESE_GB2312",
缺省为的"西方"。
2、修改此form的visible:=false;
3、和1是同一个问题。
 
谢谢大家的激情参与,呵呵!问题1和3已遵循 HunterTeam 的建议悉数解决。
 
to glbboy:对于你对第2个问题的的解释:
我的那个窗体是直接做的,只是在默认情况下,继承于TForm,应该不是你提的那种情况。
 
>>问题1和3已遵循 HunterTeam 的建议悉数解决?

呵呵,其实你已经字体属性为宋体9号了,只是
字符集是缺省的"西方",而不是"CHINESE_GB2312",
否则如果是缺省字体"MS Sans Serif",不会出现你说的情况,
所以我没有再让你设置字体为宋体9号了!
我说得是否正确呀? 大毛
 
由于确实没有多少时间让我一个个按大家的建议去做实验,我索性把我现在遇到的所有问题
整个描述一遍,分值150,另外的50分已预定给了HunterTeam 大哥。
1:在98下点打印〉取消时,出现对话框“试图激活位注册的丢弃文件”(我调用的TwebBrowser
的ExecWB,别告我加那几句OLE初始化的代码,我已经加了);此问题只在98+IE5.0出现,
WinME+IE5.5没出现,会不会是IE版本的问题,我还没试过。
2:对于PageControl控件的问题:首次打开的是TabSheet1,拖动Splitter时(我在SplitterMoved
事件里写了调整TabSheet2和TabSheet3里头各控件的位置),转到TabSheet2和3,位置根本没变.
(此问题在2000下也存在)。
3:也就是前面的第2个问题,同时在退出程序时,出现如下文字:
Exception EInvalid Pointer in modual ***.exe at **********;
程序执行非法操作;
 
新问题? 150分? 那原来的200分呢? 50分给HunterTeam?
我先于HunterTeam告诉你问题所在,没有一分?
既然这样,你就自己解决新问题吧,我失去兴趣了
 
顶部