标签: delphi-xe2

用于Delphi XE的SOAP服务器和客户端应用程序VCL + indy演示?

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请参阅下面的我自己的答案,工作代码即将推出一个链接.

delphi soap web-services delphi-xe delphi-xe2

151
推荐指数
1
解决办法
2万
查看次数

如何在Firemonkey中创建"No Activate"表单

在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 macos c++builder delphi-xe2 firemonkey

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

使用Delphi XML数据绑定向导时不存在必需的标记

我在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提供一个完整的界面,考虑到更多的这些功能,那将会很好.)

xml delphi xsd delphi-xe2

81
推荐指数
1
解决办法
1574
查看次数

Webview无法使用Delphi XE2在MacOS中显示

我已经开始转换要在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)

delphi macos webkit freepascal delphi-xe2

73
推荐指数
1
解决办法
2245
查看次数

BcdDivide函数在Delphi XE和XE2中表现不同

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 delphi-xe delphi-xe2

67
推荐指数
1
解决办法
1518
查看次数

使用XE2进行远程调试 - 显示字符串

我正在远程调试DElphi XE2(更新#4)和Windows XP目标之间的大型应用程序.PAServer正在目标上运行,应用程序正常工作并在断点处停止(您不会相信这个成就有多么难 - 提示 - 删除您的DPROJ并在XE之前通过任何IDE时再次启动).

我注意到局部变量和监视器的显示以一种奇怪的格式显示我的字符串,而在本地调试时通常会显示"某些字符串"格式.我知道了:

在此输入图像描述

任何人都可以告诉我为什么字符串以这种方式显示?我还得到{NULL}和{}之间的垃圾和未分配的输出变量之间的垃圾.谢谢.

.我看到这种格式表示宽字符串.我在Windows 7上尝试了一个简单的应用程序并获得了以下结果.我的应用程序在一个断点:

在此输入图像描述

显示的本地字符串变量:

在此输入图像描述

注意截断的'Hello'.似乎XE2有时会遇到远程unicode字符串的问题.我的PaServer是版本1.0.2.任何人都可以检查这是最新的吗?'来自更新#4的Twas ......

delphi string debugging remote-debugging delphi-xe2

58
推荐指数
1
解决办法
1786
查看次数

Delphi ASIO VST和MiniHost的Midi时序问题

我来自使用MSC*MidiSequencer进行Delphi XE2项目的背景,并且本周末一直在玩DelphiASIOVST,因为MIDI可能足够稳定,可以用作我的核心MIDI引擎,同时也允许我支持VST插件插件.我将D16主干从SVN上拉下来,经过一些路径调整后毫不费力地编译.

我理解了很多我所看到的内容,但我想知道其他人是否在MiniHost示例应用程序中遇到MIDI文件播放问题.特别是在一个音轨旋律演奏的情况下,听起来音符会被跳过和/或稍后播放其他正在播放的音符.基本上,如果甚至根本没有播放音符,它就会被击中或错过.

我的机器上有很多专业音序器,MIDI文件很好.他们也支持VST几乎没有问题.我也知道MIDI最低级别的文件格式,并且知道文件结构是合理的.

TMidiFile可以直接播放到计算机中的标准MIDI合成器吗?我试图通过获得内置合成器的直接管道来排除VST问题.除此之外,任何人都可以使用组件集看到这些问题或者知道更多/更好的MIDI文件示例到VST?

delphi midi vst delphi-xe2

54
推荐指数
1
解决办法
909
查看次数

是否在XE2中打破了COM,我该如何解决它?

更新: 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 com delphi-xe2

53
推荐指数
1
解决办法
6514
查看次数

在Delphi XE2中使用泛型和转发声明时的编译器错误

我开始使用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)

delphi delphi-xe2

45
推荐指数
1
解决办法
1264
查看次数

TThreadedQueue不具备多个消费者的能力?

尝试在单个生产者多个消费者方案中使用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 queue delphi-xe delphi-xe2

43
推荐指数
2
解决办法
5994
查看次数