我可能会遗漏一些东西,但我无法在任何地方找到Delphi 2007 WSDL Importer.我已经查看了New - > Other - > Web Services,它应该是和所有其他部分一样(以防万一),但它不在那里.WSDL Importer是仅附带IDE的某些版本而不是其他版本的?它隐藏在某个地方吗?有人会什么时候写一个实际可用的Delphi手册?!;)
任何帮助赞赏.
TImage控件不支持PNG.是否会有一些第三方组件?
谢谢!
是否可以仅为 Delphi 2007 中的特定构建配置添加构建事件?
我使用 2007 年,但也对您在 2009 年可以做什么感兴趣。
干杯萨姆
Borland Pascal 7 和 Delphi 2007 都得到了过程 STR,它接受一个数字、一个长度和一个精度,并将其转换为这样的字符串:
str(9.234:5:1, s); // -> s = ' 9.2'
Run Code Online (Sandbox Code Playgroud)
如果舍入是非歧义的,一切都很好,但如果不是(0.5 -> 向上或向下?),则存在问题:它似乎取决于 BP 中的浮点数据类型,但在 Delphi 2007 中显然是一致的:
BP:
var
e: extended;
d: double;
begin
d := 2.15;
e := 2.15;
str(d:5:1, s); { -> s = ' 2.1' }
str(e:5:1, s); { -> s = ' 2.2' }
{ but: }
d := 2.25
e := 2.25
str(d:5:1, s); { -> s = ' 2.3' }
str(e:5:1, s); { -> s = ' …Run Code Online (Sandbox Code Playgroud) 是否可以在 Delphi 2007 中使用接口方法作为事件处理程序?简单版本不起作用:
type
TMyEvent = procedure of object;
IMyInterface = interface
procedure Handler;
end;
TMyClass = class(TInterfacedObject, IMyInterface)
public
procedure Handler;
end;
var
ev: TMyEvent;
obj: TMyClass;
intf: IMyInterface;
begin
obj := TMyClass.Create;
intf := obj;
ev := obj.Handler; // compiles
ev := intf.Handler; // <== Error E2010 (incompatible types)
end.
Run Code Online (Sandbox Code Playgroud)
将错误添加@或Addr更改为 E2036(需要变量)。
更新:这个
procedure IntRefToMethPtr(const IntRef; var MethPtr; MethNo: Integer);
type
TVtable = array[0..999] of Pointer;
PVtable = ^TVtable;
PPVtable = ^PVtable; …Run Code Online (Sandbox Code Playgroud) 我们有一个用 Delphi 2007 编写的遗留应用程序,并且仍在使用 BDE(是的,它需要切换到 ADO,但有超过 500K 行,这是一项艰巨的工作)。它使用 SQL SERVER ODBC 连接连接到 SQL Server 2008 DB。我正在尝试切换到 SQL Server Native Client 10.0,并且遇到了一个有趣的问题。当尝试将记录插入包含日期时间字段的表时,我们收到以下错误:
Project DateTimeParamTest.exe raised exception class EDBEngineError with message 'General SQL error.
[Microsoft][SQL Server Native Client 10.0]Datetime field overflow. Fractional second precision exceeds the scale specified in
the parameter binding.'.
Run Code Online (Sandbox Code Playgroud)
在进行一些研究时,我看到了有关 TParameter 对象的 NumericScale、Precision 和 Size 参数的评论。TADOQuery会自动将参数分别设置为3、23、16,插入没有问题。如果我在 TQuery 对象上将参数设置为相同,则会收到与上面相同的错误。
有谁有这方面的经验并知道简单的解决方法吗?我为任何想尝试的人创建了以下示例代码。您只需要更改连接和 SQL 代码。
日期时间参数测试_Main.dfm:
object Form10: TForm10
Left = 0
Top = 0
Caption = 'Form10'
ClientHeight = 111
ClientWidth = …Run Code Online (Sandbox Code Playgroud) delphi bde delphi-2007 sql-server-2008 sql-server-native-client
我需要使用 Delphi 2007 获取系统的总物理内存。在 4GB 或更大的系统上使用 GlobalMemoryStatus 似乎会给我带来错误。在 Delphi 2007 中,GlobalMemoryStatusEx 不存在,因此我手动将函数调用添加到我的程序中。它在我的 Windows 7 x64 上正确返回内存 (8GB),但在 Vista x32 系统上它仍然返回错误值(在此系统上应为 4GB,但返回 2.9GB)。知道我可能做错了什么吗?GlobalMemoryStatusEx 可以在旧操作系统上运行吗?
type
DWORDLONG = UInt64;
PMemoryStatusEx = ^TMemoryStatusEx;
TMemoryStatusEx = packed record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): BOOL; stdcall; external kernel32;
function getmemorysize:word;
var
memory: TMemoryStatusEx;
begin
FillChar(memory, SizeOf(memory), 0);
memory.dwLength := SizeOf(memory);
GlobalMemoryStatusEx(memory);
result:=memory.ullTotalPhys div (1024*1024);
end;
Run Code Online (Sandbox Code Playgroud) 我需要一种暂停函数执行几秒钟的方法.我知道我可以使用sleep方法来执行此操作,但此方法会在执行时"冻结"应用程序.我也知道我可以使用类似下面的代码来避免冻结:
// sleeps for 5 seconds without freezing
for i := 1 to 5 do
begin
sleep(1000);
application.processmessages;
end;
Run Code Online (Sandbox Code Playgroud)
这种方法存在两个问题:一个是冻结仍然每一秒发生一次,第二个问题是每秒调用'application.processmessages'.我的应用程序是CPU密集型的,每个进程消息调用做了很多不必要的工作,使用不必要的CPU功率; 我只想暂停工作流程,仅此而已.
我真正需要的是像TTimer一样暂停执行的方法,在下面的例子中:
// sleeps for 5 seconds
mytimer.interval := 5000;
mytimer.enabled := true;
// wait the timer executes
// then continue the flow
// running myfunction
myfunction;
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是'myfunction'不会等待mytimer,它会在mytimer启用后立即运行.
是否有其他方法可以实现我想要的停顿?
提前致谢.
有没有办法在delphi中缩进代码?我必须处理具有数千行代码的程序。在我以前工作过的eclipse中,我使用 CTRL + SHIFT + F通过格式化制表符/空格来格式化所有代码,并且还以一种无需水平滚动即可看到的方式划分代码行。有没有办法在德尔福做同样的事情?
所以基本上当用户点击复选框时,我想在我的列表中添加该项,我尝试使用OnChange事件,但这对我不起作用,因为即使没有点击Checkbox也会被触发.
我的代码简单明了
procedure LvUserChange(Sender: TObject; Item: TListItem;Change: TItemChange);
var
objUser : TUsers;
begin
if not assigned(objListOfChangedUsers) then
objListOfChangedUsers := TObjectList.Create;
objUser := Item.Data;
objListOfChangedUsers.Add(objUser);
end;
Run Code Online (Sandbox Code Playgroud)
我希望只有在ListView中单击复选框时才会触发此代码