我有一个小问题.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) 我必须处理主要形式的一个图像,但处理速度低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) 我稍微调整了这里的代码:
要按给定的pID返回句柄名称列表,我将每个条目添加到TStringList.问题是名称中包含垃圾"?" 在包含unicode字符的文件名中,例如"xxx★5"出现为"xxx?5"
代码有什么问题?
在Delphi XE2或XE3中,如何创建类似于Outlook 2013电子邮件列表的列表框?
或者是Outlook 2013中的列表还有其他什么?
如何在Delphi XE2或XE3中实现类似的?
谢谢

我有自己的带加密功能的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
我有TStatusBar的问题.
启用VCL样式后,即使SizeGrip属性设置为false,sizegrip也始终可见.
有办法解决吗?
以下内容发生在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中运行得很好.
谢谢.
鉴于以下课程:
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) 我是在一个相当大的应用程序中自定义绘制我的标题栏,有许多表单,并且决定尝试通过自己处理一些消息并在我处理WM_NCPAINT时填写绘图的老式方法.
这幅画本身很顺利,基本上是有效的.有一件事是行不通的是绘制TMainMenu.要么我有默认的WM_NCACTIVATE处理程序绘制整个非客户区域(我必须在我的WM_NCPAINT处理程序中执行WM_NCACTIVATE消息),然后再绘制它,这会导致看似无法帮助的闪烁.或者我可以尝试让WM_NCPAINT的默认处理程序仅绘制包含TMainMenu的Rect,这会产生平滑的结果,但不会重新绘制菜单.
我的问题是:
我已经给了它一些去,我想我是在正确的方式,但我撞到了一堵墙; 我对我正在做的事情知之甚少,似乎无法找到关于它的明确文档.我的代码中最重要的部分是:
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) 我一直将类助手理解为扩展类或部分类。它们就像原始基类代码的扩展一样。如果我复制了代码的接口部分并将其添加到基类中,并且也为实现而这样做,则代码将与帮助程序完全相同地运行。这使我始终了解帮助程序中的多态性,以及为什么它们不能覆盖基类等中的方法。
但是我发现这不是完全正确的,因为如果是这样的话,为什么它们不允许覆盖基类的祖先-父方法?
这是我的意思的示例(我将只放置标头的代码而不使用实现代码):
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 ×10
delphi-xe3 ×10
ansi ×1
chr ×1
delphi-xe2 ×1
firemonkey ×1
listbox ×1
polymorphism ×1
statusbar ×1
titlebar ×1
tthread ×1
unicode ×1
vcl ×1
vcl-styles ×1
winapi ×1
windows-7 ×1