标签: delphi-2007

在Delphi中检测磁盘活动

我正在使用Delphi 2007.

我正在将文件复制到远程驱动器.复制结束时,我关机/待机.可能会发生某些文件无法从缓冲区复制到磁盘,并且远程磁盘断开连接,因此备份未完成.我需要检测该磁盘上的磁盘活动,以便能够在计算机上执行关闭操作.

有没有办法在这种情况下检测磁盘活动?

delphi disk delphi-2007 activity-monitor

6
推荐指数
2
解决办法
5577
查看次数

我可以使TTreeNode不可见吗?

TTreeNode没有Visible属性,因此不存在明显的选项.有没有其他方法可以使TTreeNode及其所有子节点不可见?当然,我希望以后能够再次显示它.

这是Delphi 2007.

注意#1:我知道替代TVirtualTreeView,如果没有简单的方法可以使用TTreeView完成此操作,我会检查它.

注意#2:我只需要顶级节点的选项.我想隐藏的人通常甚至没有孩子.

delphi vcl delphi-2007

6
推荐指数
2
解决办法
4575
查看次数

如何删除D2007中的错误(红色下划线)

我在结构面板中有很多错误.该应用程序使用Delphi 2007编译并运行良好.但代码中有许多代码具有红色下划线.如果我按Ctrl +左键单击它,它会找到原始声明.但是所有这些错误仍然很烦人.

delphi delphi-2007

6
推荐指数
2
解决办法
1035
查看次数

我应该何时向Delphi项目添加文件引用?

标准VCL文件(如Dialogs,StringUtils等)的单元文件永远不会在项目DPR文件中引用.但是什么时候应该添加对DPR文件的引用?现在我有自己的源文件和自己的组件源.

那么Ravereport,Devexpress,Indy,Gnostice等的源文件呢?我希望尽可能快的codeinsight,但当然我不想在DPR文件中添加膨胀.我使用Delphi 2007

又见这个问题的一个相关的问题.

问候

delphi delphi-2007

6
推荐指数
1
解决办法
2544
查看次数

为什么我释放内存后程序的内存使用率没有恢复正常?

考虑下一个示例应用程序

program TestMemory;


{$APPTYPE CONSOLE}

uses
  PsAPI,
  Windows,
  SysUtils;

function GetUsedMemoryFastMem: cardinal;
var
    st: TMemoryManagerState;
    sb: TSmallBlockTypeState;
begin
    GetMemoryManagerState(st);
    result := st.TotalAllocatedMediumBlockSize + st.TotalAllocatedLargeBlockSize;
    for sb in st.SmallBlockTypeStates do
    begin
        result := result + sb.UseableBlockSize * sb.AllocatedBlockCount;
    end;
end;

function GetUsedMemoryWindows: longint;
var
  ProcessMemoryCounters: TProcessMemoryCounters;
begin
  Result:=0;
  ProcessMemoryCounters.cb := SizeOf(TProcessMemoryCounters);
  if GetProcessMemoryInfo(GetCurrentProcess(), @ProcessMemoryCounters, ProcessMemoryCounters.cb) then
   Result:= ProcessMemoryCounters.WorkingSetSize
  else
   RaiseLastOSError;
end;

procedure Test;
const
  Size = 1024*1024;
var
  P : Pointer;
begin
  GetMem(P,Size);

      Writeln('Inside');
      Writeln('FastMem '+FormatFloat('#,', GetUsedMemoryFastMem));
      Writeln('Windows '+FormatFloat('#,', GetUsedMemoryWindows));
      Writeln(''); …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007

6
推荐指数
1
解决办法
1351
查看次数

是否可以在打开ADOQuery时显示记录?

我有一个由DataSource链接到DBGrid的ADOQuery.
ADOQuery和DataSource位于DataModule中,连接采用另一种形式.

在查询获取记录时,有没有办法让我的应用程序显示行?
像MSSQL Management Studio一样.

选择大约需要7分钟来终止执行.

我正在使用Delphi 2007.

sql-server delphi delphi-2007 tadoquery

6
推荐指数
1
解决办法
355
查看次数

当拥有它的表单被激活/停用时,是否有一种简单的方法来调用框架中的方法?

这是关于Delphi和VCL.

我有几个框架可以用于多种形式,通常是在代码中创建并添加到表单中.表单可能包含其中几个框架.当包含它的表单被取消激活时,我需要在这些帧中执行一些代码,并在激活它时将其反转.

TMyFrame.FormActivated;
TMyFrame.FormDeactivated
Run Code Online (Sandbox Code Playgroud)

一种解决方案是在那些调用框架方法的表单中使用FormActivate/FormDeactivate事件处理程序.

procedure TMyForm.OnActivate(_Sender: TObject);
begin
  FFrame1.FormActivated;
  FFrame2.FormActivated;
end;
Run Code Online (Sandbox Code Playgroud)

这就是我现在实现它的方式,但它有几个缺点:

  • 我必须在包含这些帧的实例的每个表单中实现它
  • 表单必须知道某些帧需要此调用(紧耦合)
  • 帧需要发布在这些事件中调用的两个方法.我宁愿不公开这些方法.

另一种选择是从帧的构造函数中设置FormActivate/FormDeactivate事件.但这意味着在这些事件中不能执行其他代码,如果在同一表单上有多个这样的帧,它将无法工作.

是否有任何其他选项适用于包含其中几个框架的任何表单?

如果这很重要,我需要Delphi 2007.

delphi delphi-2007

6
推荐指数
2
解决办法
833
查看次数

将SysUtils.WrapText()与包含单引号的字符串一起使用

我正在尝试将SysUtils.WrapText()函数与包含转义的单引号字符的字符串一起使用,并且得到了意外的结果。

var
  Lines : TStrings;
begin
  Lines := TStringList.Create;
  try
    Lines.Text := WrapText('Can''t format message, message file not found', 15);
    ShowMessage(Lines.Text);
  finally
    Lines.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如果字符串包含撇号字符,则该函数似乎根本不会包装字符串。

我也尝试使用#39代码而不是单引号char,但是问题仍然存在。此外,我已经检查过Lines.Count1

图片

我试过删除单引号字符:

var
  Lines : TStrings;
begin
  Lines := TStringList.Create;
  try
    Lines.Text := WrapText('Cant format message, message file not found', 15);
    ShowMessage(Lines.Text);
  finally
    Lines.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

然后开始按预期包装字符串:

图片

我想知道为什么会发生这种情况,以及如何将WrapText()函数与此类字符串一起使用?

delphi escaping delphi-2007 word-wrap

6
推荐指数
1
解决办法
147
查看次数

在Delphi项目中更改多个表单属性的快速方法?

我认为GExperts中有一些东西可以做到这一点,但如果有的话,我看不到它.

我必须在包含大约100种不同表单的项目中的每个表单中更改SCALED属性(从默认值TRUE变为FALSE).因为SCALED的默认值为TRUE,所以它实际上并不显示为.DFM文件中的一行(当作为文本查看时),因此没有任何我可以"获得"GREP(等)的东西.

任何人都可以建议以所有这些形式设置此属性的快速方法吗?表单是各种不同类的子类,我真的不想做一些覆盖SCALED属性的中间TForm后代 - 部分是因为我尝试(简要地)这样做并发现将SCALED属性设置为false 继承的create 之后对表单没有任何区别,并在继承的create 之前设置它会导致异常.:-)

有人有什么建议吗?如果我能帮助它,我真的想避免一个接一个地打开所有这些形式,只因为我一定会错过一个!

delphi delphi-2007

5
推荐指数
2
解决办法
2524
查看次数

fmShareDenyWrite模式似乎不起作用

我正在使用TFileSteam打开日志文件.我希望能够从其他进程读取此日志文件.我认为fmShareDenyWrite模式允许这样做.

但是,如果我尝试从其他进程打开该文件,我会收到错误.例如,如果我尝试从命令行键入文件,我会得到"进程无法访问该文件,因为它正被另一个进程使用".

这是文件初始化代码:

if FileExists(AutoLogFileName) then
   _ActivityLogStream := TFileStream.Create(AutoLogFileName, 
          fmOpenReadWrite or fmShareDenyWrite)
else
   _ActivityLogStream := TFileStream.Create(AutoLogFileName, 
          fmCreate or fmShareDenyWrite);
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是Delphi版本6.

delphi delphi-2009 delphi-2007

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