3个初级问题(100分)

  • 主题发起人 主题发起人 lj.ah
  • 开始时间 开始时间
L

lj.ah

Unregistered / Unconfirmed
GUEST, unregistred user!
1. 如何调用一个外部可执行文件,如文本文件。
2. 为什么以下保存文本后,生成的文件是个windows不认识的文件,选择打开方式为notebook后,可以打开。
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
with savedialog1 do
if execute then
memo1.lines.SaveToFile(filename);
end;
3. 怎样把记事本中的数据按照行列导入stringgrid中,如:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
...
 
1、可以用WinExec()这个函数,具体看帮助
2、那是因为filename没有扩展名,可能是你的SaveDialog1的配置不对。要配好扩展名
3、可以使用AssignFile、Reset、ReadLn等函数,把文本的内容读出,写入StringGrid
或者直接AStrings.LoadFromFile()把文件读入一个Strings,然后,和和,你就会了
 
关于第三点,能否给出代码
 
twos 已经说得很明白了,我也是这样做的

Winapi Winexec( )
第二个问题用给文件该名的方法

 
1.可用shellexecute函数,见windows sdk帮助。
2.同twos
3.同twos
 
我给你一些代码,是执行外部程序的。各有特点,你可以选择用
另,你想存成什么扩展名,就存成什么扩展名,至于一个文件用什么程序打开
只有存这个文件的人知道(你知道我的意思?)。对于阵列的存取,我没有
研究过,不过可以用笨的方法,一行一列存取。如果数据多,试用循环吧。
1/执行一程序并等待其结束.

function WinExecAndWait32(FileName:String; Visibility :
integer):integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);

StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security
attributes }
nil, { pointer to thread security
attributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then Result := -1 { pointer to PROCESS_INF }

else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;

2、执行外部程序另一法.
uses ShellAPI; // 提供 ShellExecute 函数在
demos/doc/filmanex目录下,
有一FMXUtils中提供各种文件操作增强函数,
其中Function ExecuteFile(filename,params,WDir,SW_SHOW)
可运行外部程序。
3、执行外部程序.
procedure TForm1.Button1Click(Sender: TObject);
var
sCommandLine: string;
bCreateProcess: boolean;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
begin
sCommandLine := 'D:/TEMP/TEST.EXE';
// 填入 StartupInfo
FillChar(lpStartupInfo, Sizeof(TStartupInfo), #0);
lpStartupInfo.cb := Sizeof(TStartupInfo);
lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow := SW_NORMAL;
bCreateProcess := CreateProcess(nil, PChar(sCommandLine),
nil, nil, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil, nil, lpStartupInfo, lpProcessInformation);
end;
 
可以参看导入数据库的,原理一样:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1048662
 
savedialog.filename的扩展名在属性栏中已经设置,还是无法生成文本文件。
 
savedialog的DefaultExt属性设为txt,就会生成文本文件
 
对于第三个问题,讲一下思路吧:

首先把文本数据读入 memo1 中,
然后再用间隔符(空格)把每一个数据读出,然后把这个数据读入stringgrid中去就可以了。
 
首先要确定STRINGGRID的行列,文本文件数据要相应
while not f.eof
begin
READLN(buf);
for i:=x to y do
for j:= x2 to y2 do
stringgrid[i,j]:= buf;
end;
 
只是提了个思路
 
谁能不能把这个导入dbgrid的改一改
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1048662
 
最简单的 shellexecute
 
后退
顶部