小编Dar*_*tar的帖子

使用Delphi创建一个小而简洁的Windows服务

我创建了非常简单的Windows服务应用程序使用Delphi按时间顺序更新一些数据文件.服务应用程序编译,并且运行良好,但我对最终的exe文件大小不满意.它超过900K.服务本身不使用Forms,Dialogs,但是我看到SvcMgr正在引用Forms和我没有使用的其他大型垃圾.

Name           Size Group Package
------------ ------ ----- -------
Controls     80,224 CODE
Forms        61,204 CODE
Classes      46,081 CODE
Graphics     37,054 CODE
Run Code Online (Sandbox Code Playgroud)

有没有办法让服务应用更小?或者是否有其他服务模板我可以使用而不使用表格等?

windows delphi windows-services

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

在Delphi中的TWebBrowser中使用jQuery UI框架

我正在处理一个应用程序,许多UI元素将在TWebBrowser中.所以我想我添加了一个jQuery UI,让我很容易.

由于http://www.jasontpenny.com/blog/2008/11/21/jquery-in-a-twebbrowser-in-a-self-contained-delphi-app/,我能够插入JQuery和UI javascript文件

我被困在样式表中,我做到了

  doc2 := Web.Document as IHTMLDocument2;
  doc2.createStyleSheet(FileProtocol(AppPath( 'templates\css\' + JQueryUITheme + '\jquery-ui-1.7.1.custom.css')), 0);
  // FileProtocol and AppPath are to return a current application path and converted to FileProtocol URL format.
Run Code Online (Sandbox Code Playgroud)

Javascripts跑得很好,但我无法让图像工作.我也试过StringReplace所有图片引用,但没有结果.

 stylesheet.cssText := StringReplace(stylesheet.cssText,
    'url(images/','url(' + FileProtocol(AppPath('templates/css/' +
    JQueryUITheme + '/images/')), [rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)

有人试过类似的东西?

browser delphi jquery jquery-ui

8
推荐指数
1
解决办法
3906
查看次数

Delphi中的UDP服务器和客户端

我正在制作UDP C/S. 我遇到服务器每秒可以接收的数据数量问题.

我已经测试过向服务器发送10,100,1000批数据消息,10,100没有问题.发送1000时,只收到300~400.所有测试都在本地进行.

我尝试使用ICS的twsocket和Synapse的tudpblocksocket来实现服务器.两者都出现了同样的问题.

可以向我解释为什么会发生这种情况,以及如何改善服务器性能.

使用TUDPBlockSocket的代码

...

while not Terminated do
begin
  try
    sz := FUDPServer.WaitingData;
    if sz > 0 then
    begin
      FUDPServer.RecvBuffer(mem.Memory, sz);
      mem.Seek(0, 0);
      AMessage := fFormats.ReadFromStream(mem);
      DoMessageReceived(FUDPServer.RemoteSin.sin_addr, AMessage);
    end; 

  finally

  end;
end;
Run Code Online (Sandbox Code Playgroud)

...

使用ICS的代码

...

procedure TShapeServer.WSocketDataAvailable(Sender: TObject; ErrCode: Word);
...
begin
  SrcLen := SizeOf(Src);
  stream := TMemoryStream.Create;
  stream.SetSize(INT_BUFFER_SIZE);
  Inc(fMessageReceived);  
  try
    Len    := FUDPServer.ReceiveFrom(stream.Memory, stream.size, Src, SrcLen);
    if (FSenderAddr.S_addr = INADDR_ANY) or
       (FSenderAddr.S_addr = Src.Sin_addr.S_addr) then
    begin

      while stream.Position < Len do
      begin
        try
          AMessage := …
Run Code Online (Sandbox Code Playgroud)

sockets delphi udp

8
推荐指数
1
解决办法
6112
查看次数

不知何故COM对象实例丢失了

我有一个主应用程序和一个类型库包含2个COM对象,一个是IFile,一个是IFiles.IFiles创建IFile,并将它们存储在TLIST中,并具有标准方法,如Add,Remove等.IFile和IFiles都是TAutoObject.

IFiles中的"添加"方法工作正常,它只是创建IFile对象[代码1],并将其添加到TList.问题是IFile对象实例以一种非常奇怪的方式丢失.见[代码2]

[代码1]

function IFiles.Add(AFilename: String): IFile;
begin
  Result := CoIFile.Create;
  Result.Filename := AFilename;
  // ShowMessage(IntToStr(Result._AddRef));
  fFiles.Add(@Result);
end;
Run Code Online (Sandbox Code Playgroud)

在主应用程序中,我有这样的测试代码.[代码2]

var
  i: Integer;
  f: IFile;
  Files: IFiles;
begin
  Files := CoTIFile.Create;
  for i:= 1 to 4 do
  begin
    // Create a dummy file object
    f := Files.Add('Filename ' + IntToStr(i));
    f._AddRef; // Not sure if AddRef works like this
    // Prints out the last file
    Memo1.Lines.Add(Files.Files[i-1].Filename);
  end;

  for i:= 0 to Files.Count-1 do
  begin
    f := Files.Files[i];
    // F is nil …
Run Code Online (Sandbox Code Playgroud)

delphi com

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

标签 统计

delphi ×4

browser ×1

com ×1

jquery ×1

jquery-ui ×1

sockets ×1

udp ×1

windows ×1

windows-services ×1