我觉得这应该很容易,但谷歌目前完全失败了.我想打开一个文件,或者如果它不存在就创建它,并写入它.
下列
AssignFile(logFile, 'Test.txt');
Append(logFile);
Run Code Online (Sandbox Code Playgroud)
当文件不存在时,在第二行引发错误,我认为这是预期的.但我真的没有找到如何a)测试文件是否存在和b)在需要时创建它.
仅供参考,在Delphi XE工作.
由于就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很好,不会闪烁.
我试过的事情:
有任何想法吗?
有没有对Delphi的OmniThreadLibray进行介绍性概述的地方?
我在Delphi XE中安装了当前代码.这些例子很有用.我一直在查看相关的Delphi Geek博客以及用法示例.Gabr承认文档不存在.在深入了解具体示例之前,我想了解一下框架的结构.我对TThread的使用有了解,所以我不需要去一个线程101网站.
该框架已表明有忠诚的追随者,我想我只是没有找到正确的地方.
我有一个包含大约10,000行文本的TXT文件.我想在TMemo中显示这些行.但是我不想在我的程序中分发那个TXT文件.如何将它作为资源WITHIUT使用它集成到我的EXE文件中,stringtable {}因为这需要每行的标识符(所以我将不得不添加10000个标识符).
_
我有Delphi XE
在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.
我正在使用COM组件,它暴露了很多Variant属性,但有时这些值为null.当我尝试将这些值转换为字符串(或其他Delphi类型)时,应用程序会引发如下异常:
无法将类型(Null)的变体转换为类型(String)
但是,如果我使用.net来调用相同的属性并且值为null,则不会引发异常,并且将null值视为空字符串.
我的问题是有一种方法可以从Delphi处理这些空值来避免这些异常吗?
提前致谢.
如何使用Indy TIdTCPClient并TIdTCPServer在以下场景中使用:
Client ---------- initate connection -----------> Server
...
Client <---------------command------------------- Server
Client ----------------response-----------------> Server
...
Client <---------------command------------------- Server
Client ----------------response-----------------> Server
Run Code Online (Sandbox Code Playgroud)
客户端启动连接,但充当"服务器"(等待命令并执行它们).
该OnExecute的方法TIdTCPServer并不在此情况下(至少我没有得到它的工作好)很好地工作.我怎么能这样做?
我希望这个问题足够清楚.
这是我的目标.使用鼠标左键滚动图像,使用鼠标右键选择缩放矩形,然后双击以恢复完整缩放.
我目前已经厌倦了,到目前为止发现它与我加载图像或显示图像的方式无关,而是与绘制方式有关.无论表格或源图像的形状如何,屏幕上的图像总是填充控件的客户区域,因此不能保留纵横比.我不知道如何改变它或保持纵横比.从而给我一个干净漂亮的画面.
我发布了我的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 XE中,我可以允许我的表单接受文件"拖放"但不必处理裸窗口消息吗?
首先是问题:为什么删除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)