标签: delphi-xe3

为什么FindFirstFile/FindNextFile没有列出Windows 7上系统目录的全部内容?

我有一个小问题.API FindNextFile不会列出目录的全部内容C:\Windows\System32(仅限Windows 7).有人有任何解决方案?

代码[Delphi]:

Var
  sAtr:       String;
  sPathName:  String;
  I:          Integer;
  iCont:      Integer;
  tHnd:       THandle;
  tArrAtr:    TStringList;
  tWDF:       WIN32_FIND_DATA;
Begin
  iCont := 0;
  sAtr := '';
  Result := TStringList.Create;
  tArrAtr := TStringList.Create;
  tHnd := FindFirstFile(PChar(sPath + '*.*'), tWDF);

  If RightStr(sPath, 1) <> '\' Then
    sPath := sPath + '\';

  If tHnd = INVALID_HANDLE_VALUE Then
    Exit;

  Repeat
    If (tWDF.dwFileAttributes And FILE_ATTRIBUTE_ARCHIVE) > 0 Then
      If (String(tWDF.cFileName[0]) <> '.') Then
      Begin
        sPathName := sPath + String(tWDF.cFileName);

        Result.Add(String(tWDF.cFileName) + sDel …
Run Code Online (Sandbox Code Playgroud)

delphi winapi windows-7 delphi-xe3

3
推荐指数
1
解决办法
2280
查看次数

同步线程进行图像处理Delphi

我必须处理主要形式的一个图像,但处理速度低inc速度我使用线程...

我的线程代码:

type
  TPaintThread = class(TThread)
    Source,Mask :TBitmap ;
    image : TImage;
    public
       procedure SetAll(src,msk:TBitmap;img:TImage);
    private
     procedure  DoWritePix;
    var
       mBit : TBitmap ;

    protected
      procedure Execute; override;
  end;

implementation

procedure TPaintThread.SetAll(src: TBitmap; msk: TBitmap; img: TImage);
begin
      Source := src ;
      mask := msk ;
      img := img ;
      mBit := TBitmap.Create ;
end;

procedure TPaintThread.DoWritePix;
begin
  image.Picture.Bitmap := mBit ;
end;

procedure TPaintThread.Execute;
var
    i: Integer;
    j: Integer;
begin
  mBit.Width := Source.Width ;
  mBit.Height := Source.Height ;
  for i …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading synchronization tthread delphi-xe3

3
推荐指数
1
解决办法
990
查看次数

使用NTQuerySystemInformation/NtQueryInformationFile/NtQueryObject获取进程使用的Unicode文件名

我稍微调整了这里的代码:

Delphi - 查找从我的程序访问文件的进程

要按给定的pID返回句柄名称列表,我将每个条目添加到TStringList.问题是名称中包含垃圾"?" 在包含unicode字符的文件名中,例如"xxx★5"出现为"xxx?5"

代码有什么问题?

delphi delphi-xe3

3
推荐指数
1
解决办法
1366
查看次数

如何使列表框与Outlook 2013相同?

在Delphi XE2或XE3中,如何创建类似于Outlook 2013电子邮件列表的列表框?

或者是Outlook 2013中的列表还有其他什么?

如何在Delphi XE2或XE3中实现类似的?

谢谢

在此输入图像描述

delphi listbox listbox-control delphi-xe2 delphi-xe3

3
推荐指数
1
解决办法
2031
查看次数

Delphi XE3:Chr Ansi版本?

我有自己的带加密功能的D6 pas库.今天我尝试在XE3下使用它,并且由于unicode我在其中发现了许多错误.我试图移植到AnsiString,但是我在chr(nnn)上失败了,这在Delphi6下是8位限制.

我试图解释这个问题:

    Str := chr(hchar);
    AStr := Str;
Run Code Online (Sandbox Code Playgroud)

Str - string; AStr - ansistring.

当hchar为216(diamater)时,AStr变为"O",Ascii 79是什么......此时我失去了原始值.

Ansi Chr有什么功能吗?例如:"AChr(xxxx)"

或者我需要更改我的代码以不在内部部分使用字符串,只有字节,然后将这些字节转换为AnsiString?

感谢您的任何建议,帮助,信息!

DD

delphi unicode ansi chr delphi-xe3

3
推荐指数
1
解决办法
3303
查看次数

Delphi TStatusBar SizeGrip和VCL样式

我有TStatusBar的问题.

启用VCL样式后,即使SizeGrip属性设置为false,sizegrip也始终可见.

有办法解决吗?

delphi statusbar vcl-styles delphi-xe3

3
推荐指数
1
解决办法
1045
查看次数

为什么TButton.enable在这种情况下不会产生预期的结果?

以下内容发生在FireMonkey(Delphi XE3)应用程序中.查看以下代码(这只是一个虚拟示例,用于说明问题):

procedure TForm1.Button4Click(Sender: TObject);
var
    i: Integer;
begin
    Button4.Enabled:= false; //This should gray-out the button

    // get busy for some time
    for I := 0 to 100000000000 do
    begin

    end;

    Button4.Enabled:= true;
end;
Run Code Online (Sandbox Code Playgroud)

我希望Button4在进入由"for"循环表示的繁忙操作之前变灰.尽管如此,它没有.

在OnClick处理程序执行结束时,该按钮"似乎没有响应"Button4.Enabled:= false.为什么?

我该如何解决它?

这在VCL中运行得很好.

谢谢.

delphi firemonkey delphi-xe3

3
推荐指数
1
解决办法
196
查看次数

自定义线程行为不端

鉴于以下课程:

type

    GEvent = class(TThread)
    public
        procedure Terminate;
        procedure Call(Event : GEvent);
        constructor Create;
        procedure Execute; Override;

    end;


    TDirection = (DUp, DRight, DDown, DLeft);

    EventTitle = class(GEvent)
    private
        Index : Integer;
        Sprite : CSprite;
        Terminate : Boolean;
        procedure CreateSprite;
        procedure MoveCursor(Direction : TDirection);
        procedure RefreshCursor;
        constructor Create;
        destructor Destroy;
    public
        procedure Execute;
    end;

implementation


{ GEvent }

procedure GEvent.Call(Event: GEvent);
begin
    Suspend;
//    inherited Terminate;
    Self := GEvent(Event.ClassType.Create);
end;

constructor GEvent.Create;
begin
    inherited Create(True);
end;

destructor GEvent.Destroy;
begin
    Terminate;
    inherited; …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading delphi-xe3

3
推荐指数
1
解决办法
183
查看次数

在自己处理WM_NCPAINT时强制重新绘制TMainMenu

我是在一个相当大的应用程序中自定义绘制我的标题栏,有许多表单,并且决定尝试通过自己处理一些消息并在我处理WM_NCPAINT时填写绘图的老式方法.

这幅画本身很顺利,基本上是有效的.有一件事是行不通的是绘制TMainMenu.要么我有默认的WM_NCACTIVATE处理程序绘制整个非客户区域(我必须在我的WM_NCPAINT处理程序中执行WM_NCACTIVATE消息),然后再绘制它,这会导致看似无法帮助的闪烁.或者我可以尝试让WM_NCPAINT的默认处理程序仅绘制包含TMainMenu的Rect,这会产生平滑的结果,但不会重新绘制菜单.

我的问题是:

  • 当我自己处理WM_NCPAINT时,如何才能有TMainMenu并且只重新绘制了一个TMainmenu?

我已经给了它一些去,我想我是在正确的方式,但我撞到了一堵墙; 我对我正在做的事情知之甚少,似乎无法找到关于它的明确文档.我的代码中最重要的部分是:

RedrawWindow(Handle, nil, MenuRegion, RDW_INVALIDATE or RDW_FRAME or RDW_NOERASE or RDW_ALLCHILDREN or RDW_UPDATENOW);
Run Code Online (Sandbox Code Playgroud)

而且我认为这正是出了什么问题.(或者更确切地说,我计算'MenuRegion'的代码.我只是不知道是否出错,因为我使用了错误的坐标系,或者是因为我这样做完全是错误的.

这是我的代码的简化版本,它将在delphi(xe3)中"按原样"编译和运行:

unit Unit3;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
  TForm3 = class(TForm)
  private
    FDrawMenu: Boolean;
    function CalcFrameRegion: HRGN;
    function CalcMenuRegion: HRGN;
    procedure DrawMenu;
    procedure FormFrame(minimal: Boolean = false);
    procedure WMNCActivate(var message: TWMNCActivate); message WM_NCACTIVATE;
    procedure WMNCPaint(var message: TMessage); message WM_NCPAINT;
    procedure WMSIZE(var message : TWMSIZE); message WM_SIZE;
    constructor Create(AOwner: TComponent); override;
  public
    { Public …
Run Code Online (Sandbox Code Playgroud)

delphi vcl titlebar nonclient-area delphi-xe3

3
推荐指数
1
解决办法
1042
查看次数

类助手不会覆盖祖先的虚拟方法

我一直将类助手理解为扩展类或部分类。它们就像原始基类代码的扩展一样。如果我复制了代码的接口部分并将其添加到基类中,并且也为实现而这样做,则代码将与帮助程序完全相同地运行。这使我始终了解帮助程序中的多态性,以及为什么它们不能覆盖基类等中的方法。

但是我发现这不是完全正确的,因为如果是这样的话,为什么它们不允许覆盖基类的祖先-父方法?

这是我的意思的示例(我将只放置标头的代码而不使用实现代码):

type
  TAncestor = class
  public 
    procedure Test; virtual;
  end;

  TBase = class(TAncestor)
  public 
  end;
Run Code Online (Sandbox Code Playgroud)

那么为什么下一个代码不正确:

THelper = class helper of TBase
public 
  procedure Test; override;
end;
Run Code Online (Sandbox Code Playgroud)

我的错误是:

在基类中找不到方法“测试”!

delphi polymorphism delphi-xe3

3
推荐指数
1
解决办法
272
查看次数