作为应用程序更新的一部分,我想删除旧的开始菜单条目(如果存在)以及它指向的文件.我试过了:
[InstallDelete]
Type: files; Name: "{group}\User's Manual (PDF)"
Type: files; Name: "{app}\User's Manual.pdf"
Run Code Online (Sandbox Code Playgroud)
实际文件本身已删除,但不是开始菜单条目.此外 - 安装日志中未记录任何操作.
有任何想法吗?
我发布版本时,我喜欢备份项目的源代码集.我使用GExperts项目备份,它似乎将项目管理器中的所有文件收集到ZIP文件中.你也可以在这个文件集中添加任意文件,但我总是意识到我不一定得到所有文件.除非我专门通过uses子句并将我拥有的所有单元添加到项目中,否则我将永远不会确定存储重新创建可安装/可执行文件所需的所有文件.
我已经考虑过滚动应用程序来遍历项目,跟踪所有使用的单位并查看所有搜索路径并查看是否有可用于该单元的源文件,并构建要以这种方式备份的文件列表,但是嘿 - 也许某人已经完成了这项工作?
好吧,我一直相信SVN是以前发布的方式,但我还没有看到顿悟.我不确定如何为我的开发环境设置SubVersion.
这是我目前的设置.我不是很想搞砸它,如果颠覆可以和它并列,那将是非常好的:
工作:
N:\ Projects
N:\ Projects\Lib
N:\ Projects\App1
N:\ Projects\App1\Help
N:\ Projects\App1\Images
N:\ Projects\App2
..etc
N:在建筑物的单独服务器上.
有几个其他开发机器在本地安装了这些工具,但所有开发都是在引用服务器上的文件时进行的 - 即工作站上没有源代码.
家
具有相同开发工具集的笔记本电脑,以及c:\ Projects\App1 ..等中的源,即n:\ Projects工作中的设置镜像.
N:\ Projects和C:\ Project之间的源代码目前与DropBox一起保持与自定义应用程序对齐.文件排除确保非源文件不会被同步
我想用这个设置运行SubVersion.
我的D2006应用程序中有一个OnIdle处理程序.使用此代码:
procedure TMainForm.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
Inc (IdleCalls) ;
Sleep (10) ;
Done := False ;
end ;
Run Code Online (Sandbox Code Playgroud)
应用程序运行平稳,空闲处理程序每秒调用100次,CPU使用率接近于零.
然后我添加了一个TActionList并将一些控件连接到操作,编写了一个Execute和Update处理程序.
procedure TMainForm.ActionNewButtonExecute(Sender: TObject);
begin
DoNewProject ;
end ;
procedure TMainForm.ActionNewButtonUpdate(Sender: TObject);
begin
ActionNewButton.Enabled := AccessLevelIsSupervisor ;
end;
Run Code Online (Sandbox Code Playgroud)
问题.OnUpdate事件不会触发.在预感中,我在OnIdle处理程序中设置了Done:= true,然后只有在我移动鼠标时才会调用OnIdle处理程序.并且更新操作仍然不会触发.
为什么更新处理程序可能不会被触发,我应该将Done设置为true还是false?或两者?
我有一个已经返回错误报告的应用程序.该应用程序是用Delphi 2006编写的,并在启动时挂起.MadExcept主线程堆栈如下所示.我怀疑没有默认打印机,但我不能在这里复制故障.

谁见过这个问题?
单元WWPrintToPrinterOrPDFRoutines的初始化部分
initialization
PagesRangeStartPage := 1 ;
PagesRangeEndPage := 999 ;
PrintRange := prAll ;
PrintCopies := 1 ;
PrintCollate := false ;
InitialPrintPaperName := 'A4' ;
if (Printer.Printers.Count = 0) then // <--------- this causes the hang
begin
InitialPrintOrientation := Printers.poPortrait ;
end
else
begin
InitialPrintOrientation := GetDefaultPrinterOrientation ;
InitialPrintPaperName := GetDefaultPrinterPaperName ;
end ;
CurrentPreviewPage := 1 ;
NDRMemoryStream := TMemoryStream.Create ;
Run Code Online (Sandbox Code Playgroud)
或拆解:
WWPrintToPrinterOrPDFRoutines.pas.682: PagesRangeStartPage := 1 ;
007C4404 C705EC8B81000100 mov [$00818bec],$00000001
WWPrintToPrinterOrPDFRoutines.pas.683: PagesRangeEndPage := 999 …Run Code Online (Sandbox Code Playgroud) 我有一组XY值(即散点图),我想要一个Pascal例程来生成适合这些点的N阶多项式的系数,就像Excel一样.
InnoSetup设置有可执行的命令行选项,以允许无人看管或批处理文件操作 - 即,它可以具有命令行参数,如/ SILENT,/ VERYSILENT,使得不显示"向导"的页面.
如果我使用CreateInputOptionPage将添加我自己的向导页面仍然会显示,即我是否需要添加更多命令行选项来抑制这些(并提供默认响应)?
(是的,我可以自己尝试一下,但答案可能对其他人有用,可能还有其他问题我没有想过)
有没有人知道是否有办法为InnoSetup源文件添加内联注释?
我做了一些实验:
; a comment (allowed)
[Setup]
AppName=MyApp // a comment (allowed)
AppVersion=1.2.3.4 ; a comment (allowed)
DefaultDirName="{pf}\My App" seems you can have anything at all here (allowed)
[Dirs]
Name: "{userdocs}\My App"
Name: {userdocs}\MyApp // a comment (allowed)
Name: "{userdocs}\My App" // a comment (not allowed)
Name: {userdocs}\MyApp ; // a comment (not allowed)
Name: "{userdocs}\My App" ; // a comment (not allowed)
Run Code Online (Sandbox Code Playgroud)
并且(我认为)我发现在编译器不期望任何更多操作数的任何地方都允许使用注释,但我更愿意使用更严格的语法(如果存在的话).
我有一个应用程序("服务器"),它每秒更新一个内存中的数据块 - 大约100k字节.
在同一网络上的其他工作站上运行的"客户端"应用程序有1到4个其他实例,这些实例需要每秒读取相同的100k图像.
到目前为止,这已经通过将图像写入服务器上的文件并让客户端通过网络从该文件读取来实现.多年来一直没有问题,但最近(与转向基于Windows 8的硬件一致),它产生了一个问题,即除了一个节点之外,所有节点都无法访问该文件.退出在此节点上运行的客户端应用程序将释放该文件,然后再次向所有人访问该文件.
我仍然对这个锁定的原因感到困惑,但我想知道它是否可能是这里讨论的机制,文件因网络故障而未关闭.我认为客户端通过TCP/IP请求数据会避免这种情况.
除了客户端无法连接或读取数据之外,不需要进行任何握手 - 服务器只需要处理业务并通过抓取数据并发送数据来响应请求.然而,我对于实现这一目标的最佳架构非常朦胧.TidTCPClient和TidTCPServer会削减吗?我假设客户端会在一个线程中请求数据,但这是否意味着服务器需要连续运行一个线程来响应请求?
是否有一种简洁的方式来访问提示窗口的画布?我不想在画布上绘制任何东西 - 我将只分配给组件的Hint属性 - 但我确实想要找出Windows使用提示窗口文本使用的任何字体呈现的文本宽度.
*原因*
我正在尝试构建带有标签列的提示窗口,例如
SomeControl.Hint :=
'Item 1: ' + #9 + 'Tom' + #13 +
'Item 2: ' + #9 + 'Dick' + #13 +
'Another Item: ' + #9 + 'Harry' + #13 ;
Run Code Online (Sandbox Code Playgroud)
我希望所有标签的名称都在彼此之下.仅当提示字体为单倍间距时,上面显示的示例才会正确显示.我可以通过试验和错误通过填充具有正确数量的空格的行来使用给定的比例字体来实现它,但我希望它适用于任何字体.我看到的大多数示例似乎都是为了改变提示窗口的外观 - 我想做的就是能够调用Canvas.TextWidth所以我可以计算我需要添加什么填充来"推"下一个制表位上的线.
*更新*
我在误解中工作 - 我假设提示控件尊重制表符,但实际上它似乎忽略了它.另一方面,TLabel组件确实尊重制表符 - 它似乎移动到10个左右空间宽度的下一个倍数.
delphi ×7
delphi-2006 ×3
inno-setup ×3
delphi-2007 ×2
backup ×1
canvas ×1
comments ×1
delete-file ×1
gexperts ×1
hang ×1
hint ×1
indy10 ×1
inline ×1
install ×1
installer ×1
pascal ×1
printers ×1
python-idle ×1
regression ×1
startmenu ×1
startup ×1
sync ×1
taction ×1
tcp ×1
tortoisesvn ×1
wizard ×1