小编rob*_*oft的帖子

AppData现在是安装用户特定应用程序(修改自己的数据)的"正确"位置吗?

我可能只是在这里非常厚,但我不清楚我应该在Windows 7上安装"新的"用户专用程序(也可能是Vista,尽管我还没有特别关注那个场景)).

在Windows XP(正确或错误)下,我们总是将我们的程序安装到" Program Files " 下的文件夹中,并接受它们对所有人都可用.从我在Windows 7下可以收集到的内容,我应该在用户的AppData文件夹下安装我的软件(可能是AppData\Local\MyApp).这是有道理的,但是这个文件夹默认是"隐藏"的事实意味着我们将通过支持的东西"有趣"地与我们的用户交谈.

我想安装我们的软件,以便它是特定于用户的(Windows 7中的用户位非常有意义),但我确实希望用户能够在需要时访问它.我们的程序还包括一个'data'子目录,它在运行时需要写入(嵌入式数据库),但由于程序是单用户/独立的,因此数据文件夹不在用户特定的文件夹中会成为一个问题.

我的问题只是AppData的整个"隐藏文件夹"方面.尽管我已经搜索过MSDN,但我无法解决我应该安装用户特定程序的问题.从某种方式来看,它看起来像AppData\Local\MyApp,而另一种方式似乎在用户的My Documents\MyApp等效项下同样有效.

有没有人有一个明确的指南,所有这些东西去哪里?我发现MSDN文档令人困惑.:-)

migration installation windows-xp windows-7

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

如何将Windows COM端口输出重定向到文件?

有没有一种简单的方法可以将串口输出重定向到一个文件,我可以在测试的Windows桌面系统上安装,而无需更改任何代码?

我正在尝试在串行收据打印机模块中调试问题,而今天我没有真正的设备.如果我可以帮助它,我不想开始对代码进行任何更改,我只想捕获当前正在输出的内容,以便我可以在文件中查看它.

这是Windows XP,如果这有任何区别.

windows serial-port

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

获取窗口刷新(等)而不调用Application.ProcessMessages?

我在这里有一个遗留应用程序,它有一些"耗时"的循环,由于各种用户交互而被解雇.耗时的代码定期用屏幕上的进度信息(通常是标签)更新某些内容,然后,似乎说服视觉刷新发生在那里,然后,代码调用Application.ProcessMessages(argh!).

我们现在都知道这可以给GUI应用程序带来什么样的麻烦(慈善,那时候是一个更无辜的时间)我们发现它确实像鸡蛋一样,我们不时让用户实现不可能的程序,因为他们在程序"忙"时点击控件.

什么是定期刷新表单视觉而不接受其他事件/消息等的最佳方法?

我的想法是;
- 在执行任何耗时之前禁用所有控件,并保留'... ProcessMessages'调用以"强制"刷新,或者
- 找到另一种方法来定期刷新控件

我可以做前者,但它让我想知道 - 有更好的解决方案吗?

来自遗留的示例代码;

i:=0;
while FJobToBeDone do
begin
  DoStepOfLoop;
  inc(i);
  if i mod 100 = 0 then
  begin
    UpdateLabelsEtc;
    Application.ProcessMessages;
  end;
end;

在后面我已经听到你们都昏倒了.:-)

delphi

14
推荐指数
2
解决办法
9624
查看次数

如何在Delphi应用程序中使用XSLT文档显示XML?

我已经获得了一个示例XML文件(最终我的客户端每天将收到其中的几个),以及一个XSLT文件,它显然会将XML转换为具有有意义布局的内容,适合在浏览器中显示或打印.

我想在现有的旧版Delphi应用程序中添加一些内容,以便用户可以从驱动器中选择一个XML文件并"显示"它(在TWebBrowser或类似文件中).

我不知道从哪里开始,谷歌搜索delphi,xml和xslt给我看来似乎是基于数据模块/数据库的例子; 我只想将给定的XML文件转换为屏幕上的内容.看起来它可能涉及到PageProducer,但我无法理解我需要做的事情.有人提供任何指针,或者可能是快速教程的链接吗?

非常感谢!

xml delphi xslt

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

德尔福; 传递const字符串与传递var字符串的性能

快一点; 我是否正确认为将字符串传递给方法'作为CONST'涉及比将字符串作为'VAR'传递更多的开销?编译器将让Delphi制作字符串的副本然后传递副本,如果字符串参数声明为CONST,对吧?

这个问题的原因有点乏味; 我们有一个传统的Delphi 5实用程序,它的日子真正编号(替换正在开发中).它执行大量的字符串处理,经常在各种函数和过程之间传递1-2Kb字符串.在整个代码中,已经遵守了使用CONST或VAR传递参数(取决于手头的工作)的"正确"观察.我们只是在寻找一些"快速获胜",可能会缩短执行时间几微秒,让我们度过难关,直到新版本准备就绪.我们想过将内存管理器从默认的Delphi 5更改为FastMM,我们也想知道是否值得改变字符串传递的方式 - 因为代码工作正常,字符串传递为const,我们不如果我们将这些声明更改为var,则会看到问题 - 该方法中的代码不会更改字符串.

但它真的会带来真正的不同吗?(该程序实际上只对这些1kb + ish字符串进行了大量处理;在高峰时间每分钟有数百个字符串).在重写时,这些字符串被保存在对象/类变量中,因此它们实际上并没有以相同的方式被复制/传递,但在遗留代码中,它非常"老派"帕斯卡.

当然,我们将分析程序的整体运行情况以了解我们已经做出了哪些不同,但是如果我们在第一个实例中对字符串传递的工作方式存在严重错误的话,那么实际尝试这一点毫无意义!

delphi string

11
推荐指数
3
解决办法
6438
查看次数

Delphi常量按位表达式

可能是一个愚蠢的问题,但这对我来说是一种空洞的好奇心.

我有一些看起来像这样的Delphi代码;

const
  KeyRepeatBit = 30;

...
  // if bit 30 of lParam is set, mark this message as handled
  if (Msg.lParam and (1 shl KeyRepeatBit) > 0) then
    Handled:=true;
...

(代码的目的并不重要)

编译器是否将"(1 shl KeyRepeatBit)"视为可以在编译时计算的内容,因此它变为常量?如果没有,是否可以通过将其作为数字进行处理并用数字替换表达式来获得任何收益?

delphi compiler-construction optimization

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

在Delphi项目中更改多个表单属性的快速方法?

我认为GExperts中有一些东西可以做到这一点,但如果有的话,我看不到它.

我必须在包含大约100种不同表单的项目中的每个表单中更改SCALED属性(从默认值TRUE变为FALSE).因为SCALED的默认值为TRUE,所以它实际上并不显示为.DFM文件中的一行(当作为文本查看时),因此没有任何我可以"获得"GREP(等)的东西.

任何人都可以建议以所有这些形式设置此属性的快速方法吗?表单是各种不同类的子类,我真的不想做一些覆盖SCALED属性的中间TForm后代 - 部分是因为我尝试(简要地)这样做并发现将SCALED属性设置为false 继承的create 之后对表单没有任何区别,并在继承的create 之前设置它会导致异常.:-)

有人有什么建议吗?如果我能帮助它,我真的想避免一个接一个地打开所有这些形式,只因为我一定会错过一个!

delphi delphi-2007

5
推荐指数
2
解决办法
2524
查看次数

将Windows事件日志改造为Delphi 5应用程序

我正在寻找一种(相当无痛)的方法,将一些Windows应用程序事件日志支持添加到一个小型的传统Delphi 5应用程序中.我们只是希望它在启动,关闭,无法连接到数据库等时进行记录.

我见过的几个解决方案/组件似乎暗示我们需要创建一个资源DLL,Windows事件日志查看器将在尝试读取我们的"条目"时链接到该资源DLL.虽然这似乎并不太繁琐,但我想如果/我们将来进一步开发应用程序时要记住这一点 - 我们需要保持这个DLL是最新的.

在未来的某个时刻,我们希望将应用程序转变为服务,可能是在D2007中编写的.

那么有人可以推荐一个合适的路径来将事件添加到D5中的事件日志吗?我正在寻找具体的' 我们用过这个,这是好的 '评论而不是谷歌拖网(我可以自己做!)免费或付费,真的不介意 - 但我可以迁移到D2007未来很重要.

delphi delphi-5 event-log

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

任何陷阱将TServerSocket应用程序从D5移动到D2007?

我做了一个简短的谷歌,发现什么,但我觉得我应该问.我真的不希望有任何东西,但宁愿现在问一个没有答案的问题,而不是问问题何时出错,并发现每个人都知道'陷阱'......!

为了使整体支持/开发生活更轻松(并引入madExcept等),我将采用D5编写的半GUI应用程序(使用NativeDB连接到ASA6)并将其移植到D2007,最终将其转换为D2007进入控制台应用程序和/或服务.(目前的GUI只是一个荣耀的开始/停止按钮和活动日志).

它是一个经典的TServerSocket应用程序,在指定的端口上进行监听,并在客户端连接时执行各种操作.我并不期待NativeDB方面存在任何大问题,但我想知道,就TServerSocket而言,D5和D2007之间是否有任何变化(错误修复,改进)?

我们不使用阻塞套接字,Indy等 - 它只是来自scktcomp单元的TServerSocket,直接来自D5 Enterprise盒.除非在D2007下TServerSocket出现问题,否则我不打算大幅更改代码.:-)

delphi delphi-2007 delphi-5 winsockets

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

从IE/Delphi打印带有忠实CSS格式的HTML?

我有一个显示第三方生成的HTML页面的小程序.它实际上只是一个锁定的TWebBrowser组件的包装器(我相信它只是一个IE包装器).

客户端现在也想打印这些页面 - 但TWebBrowser打印方法不会渲染所有CSS.例如,客户端使用背景颜色块时,我只获得背景颜色.当你让IE打印页面并且某些CSS类型的格式消失时,你可以在某些网站上看到这个.

我最初说服自己(愚蠢地)说问题是因为CSS是一个外部引用,但是在我将CSS内部放到.HTML文件之后问题仍然存在.

是否有可用于获取包含此CSS格式的打印输出的组件或技术?我想知道试图将浏览器页面首先变成PDF(这对我来说也会有其他优点),但我也没有看到任何明显的方法.

我想我真的在说 - 来自IE的打印输出糟透了,有没有办法更好地近似你在屏幕上看到的内容?:-)

编辑:好的,现在就移动它.我可以说服打印输出包含CSS颜色元素,感谢Will和Onnodb的建议 - 我的样本页面打印好了,并且鉴于用户理解注册表设置方法的重要性,他很高兴用这种方式(它是将在一个锁定的公司型办公室中使用最多六个桌面).

我现在的问题(可能本身就是一个新的S/O帖子)是他们的HTML/CSS中有一些东西正在杀死IE.Firefox非常乐意将它全部打印出来(Safari也是如此),但IE 7和8都会显示页面的打印预览,但在"真正的"打印过程中会死掉.

鉴于用某种TGeckoBrowser(!)替换TWebBrowser可能比它的价值更麻烦(并且可能不会与客户端一起飞行),我将不得不试图找出(令人讨厌的,错综复杂的)格式化代码的位置.造成这个问题.那里有很多DIV,有相对和绝对位置...... :-)

html css delphi internet-explorer pdf-generation

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

在Delphi中将非分隔文本转换为名称/值对

我有一个文本文件到达我的应用程序,因为以下几种形式的行:

<row amount="192.00" store="10" transaction_date="2009-10-22T12:08:49.640"
 comp_name="blah                                            " 
 comp_ref="C65551253E7A4589A54D7CCD468D8AFA" 
 name="Accrington                                                  "/>

我想把这个'row'转换成给定TStringList中的一系列名称/值对(文件中可能有几十个<row> s,所以最后我想要遍历文件,打破每个依次划入名称/值对).

我得到的问题是数据没有明显的分隔(从技术上讲,我认为它是空格分隔的).现在,如果不是因为某些值包含前导或尾随空格这一事实,我可能会做出一些合理的假设并编写一些代码来基于空格来划分一行.但由于价值本身可能包含或不包含空格,我没有看到明显的方法来做到这一点.Delphi的TStringList.CommaText没有帮助,我尝试过使用Delimiter,但每次都被值内的空格所吸引.

有没有人有一个聪明的德尔菲技术将上面的样本变成类似的东西?;

amount="192.00"
store="10"
transaction_date="2009-10-22T12:08:49.640"
comp_name="blah                                            " 
comp_ref="C65551253E7A4589A54D7CCD468D8AFA" 
name="Accrington                                                  "

不幸的是,通常就是这种情况的情况,我对数据的格式没有任何控制权 - 例如,我不能回过头来'make'以逗号分隔.虽然我想我可能会编写一些代码将其转换为逗号分隔 - 但我宁愿找到一种很好的方式来处理我的工作.

这将是Delphi 2007,如果它有任何区别.

delphi string name-value

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

从Windows控制台启动一个gui程序,然后让它"自行分离"

我正在尝试修改一个传统的Delphi 5应用程序,以便可以从它的图标/通过资源管理器或从控制台(命令行)启动它.当它从控制台启动时,我希望程序从控制台进程中分离出来,这样控制台就可以继续执行其他指令而无需等待我的程序终止.

我想在'批处理'文件中使用它,这样我可能会;

@echo off
rem step 1 - do some stuff here
rem
rem step 2 - launch my app
c:\myfolder\myapp
rem
rem step 3 - do some more stuff here

并且在步骤2中启动我的应用程序后,控制台进程将继续执行到第3步.

很多年前,我确信我已经做过这件事,但我对我究竟做了什么感到困惑.我不想为我的主Windows应用程序编写一个小的控制台应用程序'启动器' - 我95%确定在'普通'Delphi GUI应用程序中有这样做的方法.

我想我可以使用vbscript或powershell或某些东西用某种'nowait'参数'执行'我的程序但是客户端熟悉批处理文件,我真的不想通过建议他改变他的脚本来打乱applecart安装额外的东西 - 无论如何我正在对可执行文件进行更改,为他勾选这个框也很棒.

任何人?:-)

delphi console batch-file

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

ShareMem/string-Delchanging与Delphi DLL

我希望快一点 - 我即将钻研Delphi 5遗留应用程序,该应用程序调用DLL(也用D5编写),传递DLL可以根据需要修改的字符串.

我有DLL和应用程序的代码.粘贴在DLL源代码顶部的是关于使用ShareMem的注释,它需要是项目的uses子句中的第一行等.

如果我将这一切移植到D2007,是否有更好的(或更现代的)方法来获得Delphi应用程序与Delphi DLL共享字符串数据?D5 ShareMem的东西是否仍适用于Delphi 2007应用程序(使用FastMM等)?我还没有重新编译整个事情的bash - 只是想知道这一点是否会成为一个问题,是否有替代/推荐的方法这样做?

FWIW,DLL完全是第一方(它只被这个特定的应用程序使用 - 所以在D2007下重新编译它也不会有问题).

delphi dll delphi-2007

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