小编ros*_*mcm的帖子

从Delphi中的TList开始删除大块项目的有效方法是什么?

从TList删除(0)是昂贵的,因为所有后续项目都需要向下移动.如果我需要从更大的列表的开头删除大量项目,那么最快的方法是什么?

delphi delphi-2006 tlist

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

Delphi - 如何"就地"裁剪位图?

如果我有一个TBitmap并且我想从这个位图获得一个裁剪图像,我可以"就地"执行裁剪操作吗?例如,如果我有一个800x600的位图,我怎么能减少(裁剪)它,使其包含600x400图像在中心,即得到的TBitmap是600x400,并包含由(100,100)和(? 700,500)在原始图像?

我是否需要通过另一个位图,或者可以在原始位图内完成此操作?

delphi crop bitmap tbitmap

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

如何在InnoSetup向导页面中读取和设置复选框的值?

我已经在InnoSetup脚本的"其他任务"页面中添加了一个复选框

[Tasks]
Name: "StartMenuEntry" ; Description: "Start my app when Windows starts" ; GroupDescription: "Windows Startup"; MinVersion: 4,4; 
Run Code Online (Sandbox Code Playgroud)

我希望在wpSelectTasks页面显示时初始化此复选框,并在Next单击按钮时读取值.我无法弄清楚如何访问复选框`checked'值.

function NextButtonClick(CurPageID: Integer): Boolean;

var
  SelectTasksPage : TWizardPage ;
  StartupCheckbox : TCheckbox ;

begin
Result := true ;
case CurPageID of

    wpSelectTasks :
        begin
        SelectTasksPage := PageFromID (wpSelectTasks) ;
        StartupCheckbox := TCheckbox (SelectTasksPage... { <== what goes here??? }
        StartupCheckboxState := StartupCheckbox.Checked ;
        end ;
    end ;    
end ;     
Run Code Online (Sandbox Code Playgroud)

checkbox inno-setup pascalscript

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

创建没有相应菜单项的Delphi应用程序快捷方式

我想在我的应用程序中有一个快捷键组合(如Ctrl + Alt + D)来调用一个函数,但我不希望快捷方式出现在任何菜单上.您的应用程序中是否可以使用其他不可见的快捷方式?

delphi menu shortcut taction tmenuitem

7
推荐指数
2
解决办法
3978
查看次数

为什么不{$ ifopt FINITEFLOAT ON}编译?

我有结构:

{$ifopt FINITEFLOAT ON}
  {$message 'FINITEFLOAT option ON' }
{$else }
  {$message 'FINITEFLOAT option OFF' }
{$endif }
Run Code Online (Sandbox Code Playgroud)

在我的源码,它将无法编译!它必须是愚蠢的东西.错误是:

E1030编译器指令无效:'$ IFOPT'

在第一线,但它是抱怨的FINITEFLOAT.除了像R +等单字母指令作为IFOPT的参数之外,您似乎无法指定任何内容.

我在这里错过了什么吗?

delphi syntax-error delphi-2006 compiler-options

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

在我的Delphi应用程序完成初始化后,我应该将代码放在哪里执行一次?

我的应用程序完成初始化并创建了主窗体后,我想要执行的功能.我确实在表单OnShow事件中有代码(称为ProcedureX),但我刚刚注意到它被调用了两次,因为OnShow正在触发两次.它在主程序DPR调用时触发:

Application.CreateForm(TMainForm, MainForm) ;  
Run Code Online (Sandbox Code Playgroud)

正如我所料.但在那之后,当我从包含表格屏幕位置的INI文件中读取内容时,我有一个电话:

MainForm.position := poScreenCenter ;
Run Code Online (Sandbox Code Playgroud)

这样,它会再次触发OnShow事件.

我在哪里可以调用ProcedureX,必须只调用一次,并且需要在执行之前创建主表单?

forms delphi events show delphi-2006

7
推荐指数
5
解决办法
9445
查看次数

我无法让Delphi上下文相关的帮助在打开和保存对话框中工作

我有一个带有CHM帮助文件的Delphi 2006应用程序.一切正常,除了我无法获得任何帮助连接到TOpenDialog和TSaveDialog上的"帮助"按钮.

一个简单的程序演示如下所示.单击按钮2将打开帮助文件并显示正确的页面.单击按钮1将打开对话框,但单击对话框中的帮助按钮无效.

unit Unit22;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  HTMLHelpViewer ;

type
  TForm22 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form22: TForm22;

implementation

{$R *.dfm}

procedure TForm22.Button1Click(Sender: TObject);
begin
OpenDialog1.HelpContext := 10410 ;
OpenDialog1.Execute ;
end;

procedure TForm22.Button2Click(Sender: TObject);
begin
Application.HelpContext  (10410) ;
end;

procedure TForm22.FormCreate(Sender: TObject);
begin
Application.HelpFile := …
Run Code Online (Sandbox Code Playgroud)

delphi chm openfiledialog delphi-2006

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

检测文件是否在批处理文件中打开

假设我有一个用于执行长版本的批处理文件,最后它创建了一个EXE.如果我在开始构建之前忘记关闭应用程序,则链接阶段会在无法重新创建EXE时失败.

我想检查EXE是否在构建开始时打开.我尝试将EXE文件重命名为自身,但是虽然这给出了拒绝访问错误,但重命名命令(作为内部命令)不会设置%ErrorLevel%.

检查将%ErrorLevel%设置为非零值的打开文件的非破坏性方法是什么?

windows cmd rename batch-file errorlevel

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

德尔福 - 我如何找出哪个模态对话框具有焦点并将其带到前面?

我有一个Delphi 2006应用程序,它可以弹出一个模态对话框以响应错误情况.它似乎进入一种状态,其中一个模态对话框是打开的,位于主窗体的前面,但两种形式都没有响应消息.点击其中任何一个都会给出"bonk".应用程序运行正常,UI正在更新主窗体,但您无法执行任何操作.我想主要形式下很可能还有另一个模态对话框.无论是我的还是Windows的我都不知道.

其他要点:

  • 该应用程序响应键盘快捷键确定.其中一个短片优雅地关闭了应用程序,这很有效.从那以后我一直无法重现这种情况.
  • 该应用程序有一个托盘图标.这会响应鼠标右键单击.如果我从这里最小化应用程序,主窗体最小化并显示模式对话框,仍然没有焦点.如果我恢复主窗体,事情就像它们一样,两个窗口都没有焦点.Alt-tab也有类似的结果.
  • 平台是Windows 7
  • 我在创建任何表单之前调用DisableProcessWindowsGhosting
  • 我打开模态对话框

    ModalDialog.PopupParent := MainForm ;
    ModalDialog.ShowModal ;
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果其他模态对话框打开,我推迟这些错误对话框:

    if (Application.ModalLevel = 0) then
        {open modal dialog}
    
    Run Code Online (Sandbox Code Playgroud)

我的问题有两个部分:

有没有办法以编程方式找出哪个窗口有焦点?然后,我可以为这个场景或最后的手段采取一些操作,我可以提供一个快捷键将其置于前面或采取一些规避行动(取决于对话框),如将ModalResult设置为mrCancel.

这种情况怎么会出现?通常当我在主窗体后面得到一个模态对话框时(我可以通过打开模态对话框,从托盘图标中最小化应用程序,然后再次恢复应用程序) - 应用程序主窗体在对话框前面恢复,对话框仍然保持焦点),我可以通过单击托盘图标再次将它带到前面,或者用Esc键关闭它但在这种情况下它不起作用.

**更新**

Misha的解决方案与TSaveDialog之类的非delphi对话分开.通过Application.ModalPopupMode := pmAuto ;在调用之前添加,我能够让他们工作Execute.

通过"让它工作"我的意思是在以下序列之后保存对话框在前面:

  • 打开保存对话框
  • 从托盘图标最小化应用程序
  • 从托盘图标恢复应用程序

而它没有主要形式ModalPopupMode := pmAuto.

所以我希望这些变化能够帮助解决这个问题(尚未产生).

delphi delphi-2006

7
推荐指数
2
解决办法
5115
查看次数

Getting a snapshot from a webcam with Delphi

I need to get a regular snapshot from a webcam in Delphi. Speed is not a problem (once a second is fine). I have tried demo code from based on stuff from http://delphi.pjh2.de but I can't get it to work. It compiles and runs OK but the callback function never fires.

I don't have a real webcam but am running instead a simulator. The simulator works (I can see the video using Skype) but not with the test app. I …

delphi webcam vfw video-capture callback

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