Delphi过去常常包含一个用于Web服务的demos文件夹,但似乎不再包含这个.
我刚刚尝试了Delphi 7演示项目(SOAPDMServerWAD
一个几乎没有UI的服务器,并且SOAPDMClient
)并且无法让它们运行,即使在Delphi 7中也是如此.
如果有人在Delphi XE或Delphi 2010中做过类似的演示工作,与旧版SOAPDMServerWAD+SoapDMClient
演示相同,在Delphi XE中工作,并且至少具有来自Delphi SOAP Server应用程序向导的最小UI,那将是完美的.
更新:该演示一直出现在Delphi 2010上,但使用现已废弃的WAD(web-app-debugger),我试图将它移植到新的Indy runtime/web-app-development-harnessing-code
,但我似乎无法让它工作.演示运行,但服务器没有用户界面,并且似乎没有运行任何HTTP服务器(使用常规Web浏览器,通过http://localhost:port/
网址测试.顺便说一下,尝试使用Google搜索演示,此网址出现,并且我问不到一个小时前.那可怕,谷歌.
Update2请参阅下面的我自己的答案,工作代码即将推出一个链接.
在XCode中,通过将这些方法添加到NSView子类可以防止窗口在单击时变为活动状态:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
Run Code Online (Sandbox Code Playgroud)
在Windows平台中,这是通过以下简单代码完成的:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
Run Code Online (Sandbox Code Playgroud)
我怎样才能将NSView子类化以防止我的FMX TForm在点击时变为活动状态?
如何在firemonkey中创建" No Activate "表单?
我在Delphi XE2中使用XML数据绑定向导.架构需要此类型的标记:
<xs:element name="MyReport" type="MyReportType" />
<xs:complexType name="MyReportType">
<xs:all>
<xs:element name="Header" type="HeaderType" />
<xs:element name="Values" type="ValuesType" />
<xs:element name="Events" type="EventsType" />
</xs:all>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
问题是,如果我没有向Values-group添加任何元素,则不会有<Values>
-tag,并且XML文件将无法针对XSD进行验证.如果接口提供"添加"Values-tag的方法,这可能不会成为问题.
有没有一种标准的处理方法,或者我是否正确使用生成的代码?
简而言之,使用数据绑定向导中的代码,有没有办法,解决方法或其他方式产生以下XML(这是在没有子节点时使用上述模式进行验证所需的),给定HeaderType ,ValuesType和EventsType属于complexType:
<MyReport>
<Header />
<Values />
<Events />
</MyReport>
Run Code Online (Sandbox Code Playgroud)
(我知道还有其他类似的问题,比如<xs:sequence>
在最终的XML文件中没有强制执行正确的顺序而生成的代码,但至少对于那个问题,只需要按照正确的顺序插入子代就可以解决这个问题.我仍然如果Embarcadero提供一个完整的界面,考虑到更多的这些功能,那将会很好.)
我已经开始转换要在Delphi中使用的Webview接口.我已设法加载webkit库,并且调用的接口方法似乎正常工作,但是,我似乎无法在主窗体上显示Webview.
下面是我声明的接口
WebFrameClass = interface(NSObjectClass)
['{7BE750C8-DFEC-4870-851A-12DBCB0B78F6}']
end;
WebFrame = interface(NSObject)
['{BCFA04BE-41AB-4B78-89C0-3330F12C7695}']
procedure loadRequest(request: NSURLRequest); cdecl;
end;
TWebFrame = class(TOCGenericImport<WebFrameClass, WebFrame>) end;
WebViewClass = interface(NSViewClass)
['{0D9F44B7-09FD-4E35-B96E-8DB71B9A2537}']
{class} function canShowMIMEType(MIMEType: NSString): Boolean; cdecl;
end;
WebView = interface(NSView)
['{C36D8016-2FCB-49F0-BA1C-C9913A37F9AC}']
procedure clos; cdecl;
procedure setHostWindow(hostWindow: NSWindow); cdecl;
function initWithFrame(frame: NSRect; frameName: NSString; groupName: NSString): Pointer; cdecl;
function mainFrame: WebFrame; cdecl;
end;
TWebView = class(TOCGenericImport<WebViewClass, WebView>) end;
Run Code Online (Sandbox Code Playgroud)
以下是构建WebView的代码:
procedure TForm2.Button1Click(Sender: TObject);
var
PWebView: Pointer;
FwkMod: HMODULE;
MyWebView: WebView;
urlStr: NSURL;
urlreq: NSURLRequest;
const
WebKitFWK: string …
Run Code Online (Sandbox Code Playgroud) FmtBcd.pas
已经在Delphi XE2中进行了大量修改.在我的一个项目中,我有一个案例对两个Bcd
值使用除法运算,但这两个版本产生不同的结果.在最坏的情况下,Delphi XE2可能会抛出一个Bcd overflow error
.
示例:在Delphi XE2控制台应用程序中运行以下代码:
var A, B, C, D: TBcd;
begin
A := StrToBcd('1');
B := StrToBcd('3');
BcdDivide(A, B, C);
WriteLn(BcdToStr(C));
try
BcdMultiply(C, C, D);
WriteLn(BcdToStr(D));
except
on E: Exception do
WriteLn(E.Message);
end;
ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)
以上输出将是:
0.333333333333333333333333333333333333333333333333333333333333333
BCD overflow
Run Code Online (Sandbox Code Playgroud)
该变量C
包含一个Bcd值,具有63个小数位的特异性.BcdMultiply
对变量执行第二次操作C
将导致a Bcd overflow error
.
但是,要在Delphi XE中运行相同的代码,会产生以下结果,而不会出现任何异常提示:
0.3333333333
0.11111111108888888889
Run Code Online (Sandbox Code Playgroud)
有人可以建议一个解决这个问题的最佳实践方法吗?
我正在远程调试DElphi XE2(更新#4)和Windows XP目标之间的大型应用程序.PAServer正在目标上运行,应用程序正常工作并在断点处停止(您不会相信这个成就有多么难 - 提示 - 删除您的DPROJ并在XE之前通过任何IDE时再次启动).
我注意到局部变量和监视器的显示以一种奇怪的格式显示我的字符串,而在本地调试时通常会显示"某些字符串"格式.我知道了:
任何人都可以告诉我为什么字符串以这种方式显示?我还得到{NULL}和{}之间的垃圾和未分配的输出变量之间的垃圾.谢谢.
.我看到这种格式表示宽字符串.我在Windows 7上尝试了一个简单的应用程序并获得了以下结果.我的应用程序在一个断点:
显示的本地字符串变量:
注意截断的'Hello'.似乎XE2有时会遇到远程unicode字符串的问题.我的PaServer是版本1.0.2.任何人都可以检查这是最新的吗?'来自更新#4的Twas ......
我来自使用MSC*MidiSequencer进行Delphi XE2项目的背景,并且本周末一直在玩DelphiASIOVST,因为MIDI可能足够稳定,可以用作我的核心MIDI引擎,同时也允许我支持VST插件插件.我将D16主干从SVN上拉下来,经过一些路径调整后毫不费力地编译.
我理解了很多我所看到的内容,但我想知道其他人是否在MiniHost示例应用程序中遇到MIDI文件播放问题.特别是在一个音轨旋律演奏的情况下,听起来音符会被跳过和/或稍后播放其他正在播放的音符.基本上,如果甚至根本没有播放音符,它就会被击中或错过.
我的机器上有很多专业音序器,MIDI文件很好.他们也支持VST几乎没有问题.我也知道MIDI最低级别的文件格式,并且知道文件结构是合理的.
TMidiFile可以直接播放到计算机中的标准MIDI合成器吗?我试图通过获得内置合成器的直接管道来排除VST问题.除此之外,任何人都可以使用组件集看到这些问题或者知道更多/更好的MIDI文件示例到VST?
更新: XE2 Update 2修复了下面描述的错误.
下面的程序,从真实程序中减少,在XE2中失败.这是从2010年开始的回归.我没有XE可以测试,但我希望程序在XE上运行正常(感谢Primož确认代码在XE上正常运行).
program COMbug;
{$APPTYPE CONSOLE}
uses
SysUtils, Variants, Windows, Excel2000;
var
Excel: TExcelApplication;
Book: ExcelWorkbook;
Sheet: ExcelWorksheet;
UsedRange: ExcelRange;
Row, Col: Integer;
v: Variant;
begin
Excel := TExcelApplication.Create(nil);
try
Excel.Visible[LOCALE_USER_DEFAULT] := True;
Book := Excel.Workbooks.Add(EmptyParam, LOCALE_USER_DEFAULT) as ExcelWorkbook;
Sheet := Book.Worksheets.Add(EmptyParam, EmptyParam, 1, EmptyParam, LOCALE_USER_DEFAULT) as ExcelWorksheet;
Sheet.Cells.Item[1,1].Value := 1.0;
Sheet.Cells.Item[2,2].Value := 1.0;
UsedRange := Sheet.UsedRange[LOCALE_USER_DEFAULT] as ExcelRange;
for Row := 1 to UsedRange.Rows.Count do begin
for Col := 1 to UsedRange.Columns.Count do begin
v := …
Run Code Online (Sandbox Code Playgroud) 我开始使用Delphi 2010项目,然后迁移到XE,现在我尝试迁移到XE2.在XE2(Update 4 Hotfix 1)中进行编译后,单元测试开始失败.经过一些调试后,很明显以下代码未正确编译:
program ForwardDeclaration;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
type
TEntityBase = class(TObject)
protected
FModel: Integer;
public
constructor Create(const AModel: Integer);
end;
TEntity<TKey> = class(TEntityBase)
end;
TMyEntity2 = class;
TMyEntity1 = class(TEntity<Integer>)
FData: Integer;
end;
TMyEntity2 = class(TMyEntity1)
end;
constructor TEntityBase.Create(const AModel: Integer);
begin
inherited Create;
FModel := AModel;
end;
var
MyEntity: TMyEntity1;
begin
try
Writeln(TEntityBase.ClassName, ': ', TEntityBase.InstanceSize, ' bytes');
Writeln(TMyEntity1.ClassName, ': ', TMyEntity1.InstanceSize, ' bytes');
MyEntity := TMyEntity1.Create(100);
Assert(MyEntity.FData = 0);
except
on E: Exception do …
Run Code Online (Sandbox Code Playgroud) 尝试在单个生产者多个消费者方案中使用TThreadedQueue(Generics.Collections).(DELPHI-XE).我们的想法是将对象推入队列,让几个工作线程排空队列.
但它没有按预期工作.当两个或多个工作线程调用PopItem时,将从TThreadedQueue抛出访问冲突.
如果对PopItem的调用是使用临界区序列化的,那么一切都很好.
当然,TThreadedQueue应该能够处理多个消费者,所以我错过了什么或者这是TThreadedQueue中的一个纯粹的错误?
这是一个产生错误的简单示例.
program TestThreadedQueue;
{$APPTYPE CONSOLE}
uses
// FastMM4 in '..\..\..\FastMM4\FastMM4.pas',
Windows,
Messages,
Classes,
SysUtils,
SyncObjs,
Generics.Collections;
type TThreadTaskMsg =
class(TObject)
private
threadID : integer;
threadMsg : string;
public
Constructor Create( ID : integer; const msg : string);
end;
type TThreadReader =
class(TThread)
private
fPopQueue : TThreadedQueue<TObject>;
fSync : TCriticalSection;
fMsg : TThreadTaskMsg;
fException : Exception;
procedure DoSync;
procedure DoHandleException;
public
Constructor Create( popQueue : TThreadedQueue<TObject>;
sync : TCriticalSection);
procedure Execute; override;
end;
Constructor TThreadReader.Create( popQueue : …
Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-xe2 ×10
delphi-xe ×3
macos ×2
c++builder ×1
com ×1
debugging ×1
firemonkey ×1
freepascal ×1
midi ×1
queue ×1
soap ×1
string ×1
vst ×1
web-services ×1
webkit ×1
xml ×1
xsd ×1