在下面的链接中,Microsoft描述了两种限制平板电脑上应用程序屏幕旋转的方法.
http://msdn.microsoft.com/en-ca/library/windows/apps/hh700342.aspx
发生的事情是德尔福的(XE3)TRibbon不能很好地处理旋转.它往往会挂起来.
正如所料,MS网站描述了如何从MS开发产品中做到这一点.我不知道如何在我的Delphi项目中做到这一点.
方法1:
将此添加到您的appxmanifest文件:
<InitialRotationPreference>
<Rotation Preference="landscape"/>
<Rotation Preference="landscapeFlipped"/>
</InitialRotationPreference>
Run Code Online (Sandbox Code Playgroud)
我还没有找到appxmanifest应该成为应用程序的一部分,所以我可以在delphi中执行此操作.
方法2:
用代码调用它:
Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences =
Windows.Graphics.Display.DisplayOrientations.Landscape;
Run Code Online (Sandbox Code Playgroud)
要将其迁移到delphi,我需要知道API DLL信息,以便我可以做类似的事情.
有任何想法吗?
是否有一个COM对象或DLL可以让我们访问它?
我有一个基于TInterfacedObject的类.我将它添加到TTreeNode的Data属性.
TFacilityTreeItem=class(TInterfacedObject)
private
m_guidItem:TGUID;
m_SomeOtherNode:TTreeNode;
public
end;
Run Code Online (Sandbox Code Playgroud)
我创建了这个对象的许多实例,并假设因为它们被引用计数,我不需要释放它们.那会很方便.
但是,在检查时,我打开了ReportMemoryLeaksOnShutdown,发现它们毕竟没有被释放.
这些对象是在放置在主窗体上的框架中创建的.在主窗体的FormClose中,我清除树节点,以便释放每个对象.
发生了什么?
谢谢您的帮助!
什么是对GUID列表进行排序的一种不错的快速方法(如TGuid).我以为我只是使用SysUtils.CompareMem(P1,P2:指针;长度:整数):布尔值; 直到我意识到它返回布尔值.
我希望与CompareText()或CompareValue()类似的东西返回整数,以便它可以用于排序比较.
我想没有多少人愿意对GUID进行排序......任何想法?
我想我可以调用对TGuid记录的内容进行一些级联调用CompareValue().我的直觉告诉我必须有更好的方法!
谢谢!
我正在使用在delphi XE中使用TIdCmdTCPServer的概念验证应用程序。
我的代码似乎有问题,因为只有第一个命令有效。如果我重复相同的命令,它将“超时”。请参阅下面的客户端代码清单。
这是我的命令处理程序:
procedure TForm1.IdCmdTCPServer1CommandHandlersGetDateTimeCommand(ASender: TIdCommand);
begin
ASender.Reply.SetReply(200, 'OK!');
ASender.Reply.Text.Add(DateTimeToStr(Now));
ASender.SendReply; // I expect this must be redundant
end;
Run Code Online (Sandbox Code Playgroud)
这是服务器组件(这里没什么特别的;我设置端口号并创建了命令处理程序):
object IdCmdTCPServer1: TIdCmdTCPServer
Bindings = <>
DefaultPort = 7000
CommandHandlers = <
item
CmdDelimiter = ' '
Command = 'GetDateTime'
Disconnect = False
Name = 'TIdCommandHandler0'
NormalReply.Code = '200'
ParamDelimiter = ' '
ParseParams = True
Tag = 0
OnCommand = IdCmdTCPServer1CommandHandlersGetDateTimeCommand
end
ExceptionReply.Code = '500'
ExceptionReply.Text.Strings = (
'Unknown Internal Error')
Greeting.Code = '200'
Greeting.Text.Strings = (
'Welcome') …
Run Code Online (Sandbox Code Playgroud) 我是Delphi的新手,并且在动态创建新表单时遇到问题.我想用我制作的gui中的元素属性创建新表单.这是我想要动态创建的表单:
unit AddEmployeeF;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TAddEmployee = class(TForm)
GroupBox1: TGroupBox;
AddName: TLabel;
AddDept: TLabel;
AddPhone: TLabel;
AddExtension: TLabel;
AddDetails: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure CancelButtonClick(Sender: TObject);
private
{ Private declarations }
public
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
end;
var
AddEmployee: TAddEmployee;
implementation
{$R *.dfm}
constructor TAddEmployee.CreateNew(AOwner: TComponent; Dummy: Integer = 0; Detail : String); …
Run Code Online (Sandbox Code Playgroud) TPath.GetTempFileName
(包装WinAPI GetTempFileName
)从登录到域的用户运行的应用程序调用时回复"目录名无效".
如果他们使用不使用域的登录,它可以工作.
有问题的客户在另一个国家,我也不熟悉如何更改域控制器的配置以避免此问题.
我假设由于我的应用程序是无法正常工作的应用程序,我应该以不同的方式获取临时文件名.
"以管理员身份运行"并没有帮助.
我指示他们确保他们完全控制TEMP和TMP系统环境变量中提到的文件夹,显然他们这样做但它仍然给出了相同的错误.
我的应用程序作为Win32 Delphi桌面应用程序,但由于Windows是错误的来源,我认为这些信息的用处有限.
Windows 10是操作系统.
我正在使用JCL的表达评估员TEvaluator(由barry kelly捐赠的奇妙创作).(谢谢你!)
背景
我使用了AddFunc方法.
function MyFunc:double;
begin
// calculations here
Result:=1;
end;
Run Code Online (Sandbox Code Playgroud)
您可以使用AddFunc方法使该函数可用:
AddFunc('MyFunc', MyFunc);
Run Code Online (Sandbox Code Playgroud)
这是问题......
我需要在一个对象上调用一个方法而不是一个独立的例程.
原因是我有一个提供值的对象列表.
说我们有一个车辆对象列表.每个对象都有一个权重函数.我希望能够使每个对象的重量可用于公式中.
一个愚蠢的例子,但很容易解释:
type
TVehicle=class
private
public
function Weight:double;
end;
function StrangeCalculation:double;
var
vehicle:TVehicle;
begin
for iVehicle = 0 to Count - 1 do
begin
vehicle:=GetVehicle(iVehicle);
// E2250 There is no overloaded version of 'AddFunc' that can be called with these arguments
eval.AddFunc(vehicle.Name, vehicle.Weight);
end;
Result:=eval.Evaluate('JeepTJWeight + FordF150Weight * 2');
end;
Run Code Online (Sandbox Code Playgroud)
我的选择:
AddVar()或AddConst() - 但这不是很好,因为如果值不可用,我需要能够引发异常.
具有独立函数的AddFunc().不能这样做,因为变量的名称(和数量)在运行时才是未知的.
如果找不到变量,则修改对象以添加回调.我实际上已经完成了这个,但需要编辑源代码的副本以回复它以实现此目的.
创建一个能够使用方法函数的AddFunc().
选项#3实际上已构建,但额外的AddFunc会更好.麻烦的是我不知道提供什么方法原型.我认为TMethod会是方式,但我的知识在这里太有限了...这是我的尝试不成功但我仍然得到"E2250在eval.AddFunc中没有可以使用这些参数调用'AddFunc'的重载版本" ()像以前一样打电话.
TFloat64MethodFunc = function(c:pointer): …
Run Code Online (Sandbox Code Playgroud) 我的单线程 delphi 2009 应用程序(尚未完成)已经开始出现 Application.ProcessMessages 挂起的问题。我的应用程序有一个 TTimer 对象,它每 100 毫秒触发一次以轮询外部设备。我使用 Application.ProcessMessages 在发生变化时更新屏幕,以便应用程序仍然响应。
其中之一是在网格 OnMouseDown 事件中。在那里,它有一个基本上挂起的 Application.ProcessMessages。删除它没有问题,只是我很快发现了另一个也阻塞的 Application.ProcessMessages。
我认为可能发生在我身上的事情是 TTimer 处于我目前正在调试的应用程序模式下可能需要很长时间才能完成。我已阻止 TTimer.OnTimer 事件处理程序重新输入相同的代码(见下文):
procedure TfrmMeas.tmrCheckTimer(Sender: TObject);
begin
if m_CheckTimerBusy then
exit;
m_CheckTimerBusy:=true;
try
PollForAndShowMeasurements;
finally
m_CheckTimerBusy:=false;
end;
end;
Run Code Online (Sandbox Code Playgroud)
在哪些地方调用 Application.ProcessMessages 是不好的做法?OnPaint 例程会让人想起毫无意义的东西。
任何一般建议?
我很惊讶地看到在开发过程中出现这种问题!
如何在代码中使用 [Setup] 部分中的值?
我怀疑我使用该工具的方式不正确;也许我应该以完全不同的方式来做这件事。
[Setup]
MyValue=some value
[code]
function InitializeSetup(): Boolean;
begin
// blank
MsgBox(GetEnv('MyValue'), mbError, MB_OK);
// no expansion occurs
MsgBox(ExpandConstant('MyValue'), mbError, MB_OK);
// unknown constant "MyValue".
MsgBox(ExpandConstant('{MyValue}'), mbError, MB_OK);
Result := true;
end;
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
我一直在使用 IndyTIdTCPServer
对象并TXMLDocument
在TIdTCPServer.OnExecute
活动期间实例化对象实例。xml.Active
我发现当设置为 true时出现异常非常令人惊讶:
未安装 Microsoft MSXML
procedure TForm4.tcpRXExecute(AContext: TIdContext);
var
sResponseXML : string;
xml:IXMLDocument;
begin
// get message from client
sResponseXML := AContext.Connection.IOHandler.ReadLn;
xml:=TXMLDocument.Create(nil);
// error here: "Microsoft MSXML is not installed"
xml.Active:=true;
xml.Encoding:='UTF-8';
xml.LoadFromXML(sResponseXML);
// use the xml document
//AContext.Connection.IOHandler.WriteLn('... message sent from server :)');
end;
Run Code Online (Sandbox Code Playgroud)
更深入地观察,我发现发生异常的原因TMSXMLDOMDocumentFactory.TryCoCreateInstance()
是无法创建正确的文档对象实例,尽管GuidList
从主线程接收到了与应用程序其他部分中接收到的相同的实例。我不明白为什么如果从组件的线程调用该对象则不会实例化。
以下是应实例化对象的 Embarcadero 代码:
class function TMSXMLDOMDocumentFactory.TryCoCreateInstance(const GuidList: array of TGUID): IUnknown;
var
I: Integer;
Status: HResult;
begin
for I := …
Run Code Online (Sandbox Code Playgroud) delphi ×9
indy ×2
delphi-2009 ×1
guid ×1
indy10 ×1
inno-setup ×1
ribbon ×1
sorting ×1
tablet ×1
temp ×1
txmldocument ×1
vcl ×1
win32com ×1
windows ×1