标签: delphi-xe

创建和/或写入文件

我觉得这应该很容易,但谷歌目前完全失败了.我想打开一个文件,或者如果它不存在就创建它,并写入它.

下列

AssignFile(logFile, 'Test.txt');
Append(logFile);
Run Code Online (Sandbox Code Playgroud)

当文件不存在时,在第二行引发错误,我认为这是预期的.但我真的没有找到如何a)测试文件是否存在和b)在需要时创建它.

仅供参考,在Delphi XE工作.

delphi delphi-xe

21
推荐指数
5
解决办法
6万
查看次数

TLabel和TGroupbox Captions在调整大小时闪烁

  • 所以,我有一个应用程序加载不同的插件,并在TPageControl上为每个插件创建一个新选项卡.
  • 每个DLL都有一个与之关联的TForm.
  • 使用父hWnd创建表单作为新的TTabSheet.
  • 由于就VCL而言,TTabSheets不是表单的父级(不想使用动态RTL和其他语言的插件),我必须手动处理调整大小.我这样做如下:

    var
      ChildHandle : DWORD;
    begin
      If Assigned(pcMain.ActivePage) Then
        begin
        ChildHandle := FindWindowEx(pcMain.ActivePage.Handle, 0, 'TfrmPluginForm', nil);
        If ChildHandle > 0 Then
          begin
          SetWindowPos(ChildHandle, 0, 0, 0, pcMain.ActivePage.Width, pcMain.ActivePage.Height, SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOCOPYBITS);
        end;
      end;
    
    Run Code Online (Sandbox Code Playgroud)

现在,我的问题是当应用程序调整大小时,TGroupBox中的所有TGroupBox和TLabel都会闪烁.不在TGroupboxes内的TLabel很好,不会闪烁.

我试过的事情:

  • WM_SETREDRAW后跟一个RedrawWindow
  • TGroupBoxes和TLabels上的ParentBackground设置为False
  • DoubleBuffer:= True
  • LockWindowUpdate(是的,即使我知道这是非常错的)
  • 透明:= False(甚至覆盖create来编辑ControlState)

有任何想法吗?

delphi groupbox flicker tpagecontrol delphi-xe

21
推荐指数
2
解决办法
7247
查看次数

OmniThreadLibrary概述

有没有对Delphi的OmniThreadLibray进行介绍性概述的地方?

我在Delphi XE中安装了当前代码.这些例子很有用.我一直在查看相关的Delphi Geek博客以及用法示例.Gabr承认文档不存在.在深入了解具体示例之前,我想了解一下框架的结构.我对TThread的使用有了解,所以我不需要去一个线程101网站.

该框架已表明有忠诚的追随者,我想我只是没有找到正确的地方.

delphi delphi-xe omnithreadlibrary

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

如何将TXT文件作为资源添加到我的EXE文件中?

我有一个包含大约10,000行文本的TXT文件.我想在TMemo中显示这些行.但是我不想在我的程序中分发那个TXT文件.如何将它作为资源WITHIUT使用它集成到我的EXE文件中,stringtable {}因为这需要每行的标识符(所以我将不得不添加10000个标识符).

_

我有Delphi XE

delphi embedded-resource delphi-xe

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

XPath和TXmlDocument

在Delphi中,XE是否可以将XPath与TXmlDocument组件一起使用?

我知道我可以使用后期绑定来访问MSXML2然后使用XPath:

XML := CreateOleObject('MSXML2.DOMDocument.3.0') ;
XML.async := false;
XML.SetProperty('SelectionLanguage','XPath');
Run Code Online (Sandbox Code Playgroud)

但我想知道TXmlDocument安装Delphi XE是否支持XPath.

delphi xpath txmldocument delphi-xe

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

使用Delphi管理变体中的空值

我正在使用COM组件,它暴露了很多Variant属性,但有时这些值为null.当我尝试将这些值转换为字符串(或其他Delphi类型)时,应用程序会引发如下异常:

无法将类型(Null)的变体转换为类型(String)

但是,如果我使用.net来调用相同的属性并且值为null,则不会引发异常,并且将null值视为空字符串.

我的问题是有一种方法可以从Delphi处理这些空值来避免这些异常吗?

提前致谢.

delphi null delphi-xe variants

18
推荐指数
4
解决办法
3万
查看次数

Indy TCP客户端/服务器,客户端充当服务器

如何使用Indy TIdTCPClientTIdTCPServer在以下场景中使用:

Client  ---------- initate connection -----------> Server
...
Client  <---------------command------------------- Server
Client  ----------------response-----------------> Server
...
Client  <---------------command------------------- Server
Client  ----------------response-----------------> Server
Run Code Online (Sandbox Code Playgroud)

客户端启动连接,但充当"服务器"(等待命令并执行它们).

OnExecute的方法TIdTCPServer并不在此情况下(至少我没有得到它的工作好)很好地工作.我怎么能这样做?

我希望这个问题足够清楚.

delphi client-server indy indy10 delphi-xe

18
推荐指数
3
解决办法
4万
查看次数

如何缩放以正确保持纵横比

这是我的目标.使用鼠标左键滚动图像,使用鼠标右键选择缩放矩形,然后双击以恢复完整缩放.

我目前已经厌倦了,到目前为止发现它与我加载图像或显示图像的方式无关,而是与绘制方式有关.无论表格或源图像的形状如何,屏幕上的图像总是填充控件的客户区域,因此不能保留纵横比.我不知道如何改变它或保持纵横比.从而给我一个干净漂亮的画面.

我发布了我的ZImage单元的整个代码虽然我认为问题出现在Zimage.paint或Zimage.mouseup中但是想想如果你需要在其中一个中看到一个函数,那将有助于将它全部发布.

unit ZImage;

interface

uses
  Windows, Messages, SysUtils,jpeg, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TZImage = class(TGraphicControl)
  private
    FBitmap        : Tbitmap;
    PicRect        : TRect;
    ShowRect       : TRect;
    FShowBorder    : boolean;
    FBorderWidth   : integer;
    FForceRepaint  : boolean;
    FMouse         : (mNone, mDrag, mZoom);
    FProportional  : boolean;
    FDblClkEnable  : boolean;
    FLeft        :integer;
    FRight        :integer;
    FTop             :integer;
    FBottom             :integer;
    startx, starty,
    oldx, oldy     : integer;
    procedure SetShowBorder(s:boolean);
    procedure SetBitmap(b:TBitmap);
    procedure SetBorderWidth(w:integer);
    procedure SetProportional(b:boolean);
  protected
    procedure Paint; override;
    procedure MouseDown(Button: TMouseButton; Shift: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

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

如何在不处理Windows消息的情况下允许表单接受文件丢弃?

在Delphi XE中,我可以允许我的表单接受文件"拖放"但不必处理裸窗口消息吗?

delphi drag-and-drop delphi-xe

17
推荐指数
2
解决办法
7170
查看次数

在Delphi中,为什么传递一个Interface变量有时需要它是一个const参数?

首先是问题:为什么删除const UnregisterNode()导致失败,而不是导致失败RegisterNode().

现在的背景:我正在使用Interfaces在Delphi XE中工作,我遇到了一个让我停顿一下的工件,我得出的结论是我真的不明白为什么.

不需要显式释放作为接口访问的对象.当最后一个引用超出范围时,它将被销毁.这似乎很简单.我编写了一个测试用例来显示按预期运行的变量和两个失败的变量.六个测试用例仅限于Register和Unregister方法的Node参数的变体.

按下表单上的单个按钮可创建容器和三个节点.对它们进行操作以演示该程序

该程序创建一些链接到简单容器的简单节点.问题发生在案例#1和#6中.在释放节点时,它会调用containers Unregister()方法.该方法删除指向TList中节点的指针的副本.当在两个失败的情况下离开该方法时,它以Destroy()递归方式再次启动该过程调用该节点的方法,直到发生堆栈溢出.

在有效的四种情况下,Destroy()方法恢复正常,程序将继续正常退出.

失败#1(案例1)

procedure RegisterNode(Node:INode);
procedure UnregisterNode(Node:INode);
Run Code Online (Sandbox Code Playgroud)

Unregister()TNode.Destroy()方法调用节点似乎影响INode的引用计数导致多次调用Destroy(). 为什么这种情况发生我不明白.当我Register()具有相同样式的参数的节点时,它不会发生.

失败#2(案例6)

procedure RegisterNode(const Node:INode);
procedure UnregisterNode(Node:INode);
Run Code Online (Sandbox Code Playgroud)

这里发生了同样的失败模式.如案例5中那样将const添加到参数列表可防止递归调用Destroy().

代码:

unit fMain;
{
   Case 1 - Fails when a node is freed, after unregistering,
             TNode.Destroy is called again
   Case 2 - Passes
   case 3 - Passes
   Case 4 - Passes
   Case 5 - Passes
   Case 6 - Fails the …
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-xe

17
推荐指数
2
解决办法
4099
查看次数