小编Jam*_*ill的帖子

Delphi中的管道用于命令提示符

如何让Delphi将字符串传递给CMD进程的输入管道.我能够得到一个错误管道和输出管道正常运行,不幸的是不是输入管道.我正在使用的代码取自管道的在线教程.原始代码中有几个错误在编译时导致问题.它们已被修复,但在尝试传递输入时仍然存在问题.

这是Form.Create事件中的代码.我还包括WritePipe和ReadPipe方法.WritePipe不起作用,ReadPipe确实有效.Pipe方法中的WriteFile和ReadFile都返回一条成功的消息,但只有ReadPipe才能正常工作.

var
    DosApp: String;
    DosSize: Integer;
    Security : TSecurityAttributes;
    start : TStartUpInfo;
    byteswritten: DWord;
    WriteString : ansistring;
  begin
    CommandText.Clear;
    // get COMSPEC variable, this is the path of the command-interpreter
    SetLength(Dosapp, 255);
    DosSize := GetEnvironmentVariable('COMSPEC', @DosApp[1], 255);
    SetLength(Dosapp, DosSize);

  // create pipes
    With Security do
      begin
        nlength := SizeOf(TSecurityAttributes) ;
        binherithandle := true;
        lpsecuritydescriptor := nil;
      end;

    CreatePipe(InputPipeRead, InputPipeWrite, @Security, 0);
    CreatePipe(OutputPipeRead, OutputPipeWrite, @Security, 0);
    CreatePipe(ErrorPipeRead, ErrorPipeWrite, @Security, 0);

    // start command-interpreter
    FillChar(Start,Sizeof(Start),#0) ;

    //start.hStdInput := InputPipeRead;
    start.hStdOutput := …
Run Code Online (Sandbox Code Playgroud)

delphi console cmd pipe command-line-arguments

5
推荐指数
1
解决办法
4203
查看次数

Delphi错误:“无法聚焦禁用或不可见的窗口”

运行我的已编译程序时出现错误。我已采取一切可能的预防措施来防止错误,例如在隐藏或集中显示表单之前启用表单。该应用程序显示一个DimmerForm(灰色渐变叠加层),然后NewFileForm在叠加层顶部。会NewFileForm执行其工作并确定要制作的文件,并tabsheet在上的页面控件中创建一个新文件,MainForm并显示新创建的标签页。到目前为止,所有这些工作正常(我可以在NewFileForm关闭之前中断,并且发生任何错误,并看到标签页已创建并成功显示)。在NewFileForm随后关闭,这是再正常工作。

如果随后尝试将焦点重新设置为,就会发生错误MainForm。隐藏DimmerForm,或单击MainForm,或将焦点设置为MainForm穿透代码都将导致错误消息的出现。在放置代码{ tryexceptend}不防止错误消息任一。我已经在代码中搜索了所有其他可能由的聚焦触发的方法,MainForm并且在错误发生之前没有输入任何方法(因此不会引起该错误)。

我在以前的应用程序版本中几乎编写了完全相同的代码,然后决定从头开始重新构建所有代码。该应用程序的先前版本在关注表单时毫不费力。

这是打开的代码NewFileForm

procedure TMainForm.NewFilesToolButtonClick(Sender: TObject);
begin

  ShowDimmer;
  NewFileForm.ShowModal;
  HideDimmer;

end;
Run Code Online (Sandbox Code Playgroud)

这是显示调光器形式的代码:

procedure ShowDimmer;
begin

  // Enable to prevent errors
  DimmerForm.Enabled := true;

  // Hide dimmer form and show mainform
  DimmerForm.Show;

end;
Run Code Online (Sandbox Code Playgroud)

这是隐藏调光器形式的代码:

procedure HideDimmer;
begin

  // Enable to prevent errors
  DimmerForm.Enabled := true;
  MainForm.Enabled := true; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

delphi ×2

cmd ×1

command-line-arguments ×1

console ×1

delphi-xe2 ×1

pipe ×1