标签: delphi-2007

Delphi 2007 for .NET中的"无法启动调试...无法附加到ASP.NET辅助进程"消息

我已经看了很久了,最后决定把问题放在这里.我有一些我需要维护的应用程序是用Delphi 2007 for .NET(ASP.NET 2.0)编写的.通常,我第一次运行应用程序(使用IIS)时,我得到了经典的"无法在Web服务器上启动调试.无法附加到ASP.NET工作进程"消息.我只需按F9(运行)再次运行.有时我必须尝试运行几次才能实际运行.

我正在运行Windows 7 64位(并且在Vista 64位上看到了相同的效果).我确实为ASP.NET配置了IIS,并且我的Web.config文件中有以下代码.

  <system.webServer>
      <modules>
         <add name="DbgConnect" type="Borland.DbkAsp.DbkConnModule,Borland.dbkasp,Version=10.5.0.0,
           Culture=neutral, PublicKeyToken=b0524c541232aae7" preCondition="managedHandler" />
      </modules>
      <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

关键是我最终可以在调试器中运行应用程序,有时甚至是第一次尝试.很多时候,当我遇到故障时,它会在我按下Run后大约15秒左右发生,有时甚至在我点击一两页(或三个)Web应用程序之后.并且,是的,当Delphi进入这种模式时,我可以简单地运行而无需调试,一切都很好(除非我真的想调试).并且,我可以继续尝试在调试器中运行,最终它将正常工作.

似乎Delphi的.NET调试器在某种程度上得到了应用程序无法运行的想法,然后放弃并停止进程(正如我所提到的那样,有时候显然正在运行).

我知道其他开发者也看到了这种行为.我的问题是,有谁知道如何阻止这种烦人的行为?

asp.net delphi delphi.net delphi-2007

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

将LogFont高度转换为以磅为单位的字体大小

我有一个LOGFONT结构.现在我要做的就是从LOGFONT高度获得相关的字体大小.

delphi fonts font-size delphi-2007

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

向表单添加边框图标

使用Delphi我想在边框图标按钮上添加另一个按钮; 关闭,最大化,最小化.关于如何做到这一点的任何想法?

windows delphi titlebar delphi-2007 custom-titlebar

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

Windows快捷方式是否支持很长的参数长度?

我正在尝试创建一个包含长参数字符串(> MAX_PATH)的快捷方式(在桌面上).

MSDN文档中明确指出,对Unicode字符串的字符串可以超过MAX_PATH.

生成的快捷方式在MAX_PATH字符(即Path+ Arguments)后完全切断.

我的实现是否有问题,或者这是一些Windows限制?

procedure CreateShortcut(APath: WideString;
  AWorkingDirectory: WideString; AArguments: WideString; ADescription: WideString;
  ALinkFileName: WideString);
var
   IObject : IUnknown;
   ISLink  : IShellLinkW;
   IPFile  : IPersistFile;
begin
   IObject := CreateComObject(CLSID_ShellLink);
   ISLink := IObject as IShellLinkW;
   ISLink.SetPath(            PWideChar(APath));
   ISLink.SetWorkingDirectory(PWideChar(AWorkingDirectory));
   ISLink.SetArguments(       PWideChar(AArguments));
   ISLink.SetDescription(     PWideChar(ADescription));
   IPFile := IObject as IPersistFile;
   IPFile.Save(PWideChar(ALinkFileName), False);
end;
Run Code Online (Sandbox Code Playgroud)

PS:操作系统是Windows XP(及以上版本).

windows delphi shortcut maxlength delphi-2007

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

将TInterfacedObject转换为接口

根据Delphi文档,我可以TInterfacedObject使用as运算符转换为接口.

但它对我不起作用.强制转换产生编译错误:"运算符不适用于此操作数类型".

我正在使用Delphi 2007.

这是一些代码(控制台应用程序).标记包含错误的行.

program Project6;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  IMyInterface = interface
    procedure Foo;
  end;

  TMyInterfacedObject = class(TInterfacedObject, IMyInterface)
  public
    procedure Foo;
  end;

procedure TMyInterfacedObject.Foo;
begin
  ;
end;

var
  o: TInterfacedObject;
  i: IMyInterface;
begin
  try
    o := TMyInterfacedObject.Create;
    i := o as IMyInterface;  // <--- [DCC Error] Project6.dpr(30): E2015 Operator not applicable to this operand type
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-2007

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

如何在不安装Excel的情况下将DBGrid导出为OOXML格式(Excel 2007/2010格式)?

我有一个Delphi 2007 DBGrid,我想让用户以更新的Excel格式(OOXML)保存,但我的标准是用户不需要安装Excel.有人知道任何组件已经这样做了吗?是的,我已经搜索过了,但我还没有找到任何东西.

xml delphi excel openxml delphi-2007

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

Delphi什么时候尊重`inline`而什么时候不?

我想要优化一段具有这种结构的代码:

while (i > 0) do begin
  Dec(i);
Run Code Online (Sandbox Code Playgroud)

这看起来效率低下,所以我尝试这样做:

while (Dec(i) >= 0) do begin
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为Dec是一个过程而不是一个函数.

所以我把它重写为:

procedure Withloop;
var
  ....
  function Decr(var a: integer): integer; inline;
  begin
    Dec(a);
    Result:= a;
  end;

...
  while (Decr(i) >= 0) do begin
Run Code Online (Sandbox Code Playgroud)

但这会编译成:

SDIMAIN.pas.448: while (Decr(i) >= 0) do begin
00468EE5 8BC4             mov eax,esp
00468EE7 E8D0FEFFFF       call Decr          <<--- A call??
00468EEC 85C0             test eax,eax
00468EEE 0F8D12FFFFFF     jnl $00468e06
00468EF4 EB01             jmp $00468ef7
Run Code Online (Sandbox Code Playgroud)

然而,在程序的另一部分,它内联函数就好了.
我可以使用哪些经验法则(或硬规则)来了解Delphi将遵守该inline指令?

delphi optimization inline delphi-2007

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

在非常慢的查询中,如何指示进度百分比

我正在使用ZEOS组件连接到(古老的)MDB数据库.
我正在进行查询,读取大量数据以桥接到不同的数据库.

有没有办法以百分比表示进度?

procedure TForm13.ActionReadInMemoryExecute(Sender: TObject);
var
  QueryLine: string;
  FullQuery: string;
  Tablename: string;
  i: integer;
begin
  i:= 0;
  TableMeter.DisableControls;
  try
    TableMeter.First;
    FullQuery:= '';
    while not TableMeter.eof do begin
      Tablename:= TableMeter.FieldByName('tabelnaam').AsString;
      QueryLine:= ReplaceStr(ImportQuerySjabloon, cTabelname, Tablename);
      FullQuery:= FullQuery + QueryLine;
      if (TableMeter.RecNo < (TableMeter.RecordCount -1)) then begin
        FullQuery:= FullQuery + ' UNION ALL ';
      end;
      TableMeter.Next;
    end; {while}
    QueryImportMeterreadings.Close;
    QueryImportMeterreadings.SQL.Text:= FullQuery;
    QueryImportMeterreadings.Open;  <<-- takes a long time
  finally
    TableMeter.EnableControls;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法表明查询的进度,或者只有在我拆分各个查询并消除查询时才能这样做UNION.
运行大约需要1分钟,涉及8个工会.

我没有看到任何可以用于此目的的事件:

或者我应该在查询中的字段上伪造一个OnCalcField来执行此操作(不确定原则上是否会起作用).
或者附上一个序列?nope,在Access DB上提供不受支持的操作

delphi delphi-2007 query-notifications

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

如何使用delphi中的teechart从数据集中执行堆积条形图

我可以使用TeeChart在Delphi中创建堆叠条形图.这是使用循环中添加的值和系列.我更喜欢通过使用查询作为数据源来创建此图表,而不必将每个条形图添加为循环内的单独系列.有没有更好的方法来做到这一点,或者我应该关注的其他类型的图表?该数据是来自井核样本的岩石类型的横截面.数据集包含每个深度和岩石类型测量的记录.它显示为岩石类型的单个垂直列,就像核心样本一样.

+----+
|    | record 1 - depth1, rock type 1
|    |
+----+
|    |
|    |
|    | record 2 - depth2, rock type 2
|    |
+----+
|    | record 3 - depth3, rock type 3
+----+


procedure TForm128.GenerateLithologyChart;
var
  LSeries: TBarSeries;
  i : integer;
  LastBot : double;

  procedure AddRockSeries(depth : double; col : TColor);
  begin
    LSeries := TBarSeries.Create(LithologyChart);
    LithologyChart.AddSeries(LSeries);
    LSeries.AddBar(0, '', clBlue);
    if col=clNone then
      LSeries.AddNullXY(0,depth,'')
    else
      LSeries.AddXY(0,depth,'',col);
    LSeries.Marks.Visible := False;
    LSeries.MultiBar := mbStacked;
    LSeries.CustomBarWidth := …
Run Code Online (Sandbox Code Playgroud)

delphi teechart delphi-2007 bar-chart stackedbarseries

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

如何为事件方法创建一个单独的单元,IDE允许我在设计时分配给组件事件?

我有一个表单,其中包含某些具有事件处理程序的组件.现在我想将这些事件处理程序(那些方法)移动到一个单独的单元,仍然能够在设计时通过Object Inspector将它们分配给组件事件.

是否可以仅为事件方法创建一个单独的单元,以便Object Inspector允许我在设计时分配它们?

假设我是否会使用公共程序制作该单元:

unit Unit2;

interface

procedure ButtonClick(Sender: TObject);

implementation

procedure ButtonClick(Sender: TObject);
begin
  // do something here
end;

end.
Run Code Online (Sandbox Code Playgroud)

或者使用已发布方法的类,如下所示:

unit Unit2;

interface

type
  TMyClass = class
  published
    procedure ButtonClick(Sender: TObject);
  end;

var
  MyClass: TMyClass;

implementation

{ TMyClass }

procedure TMyClass.ButtonClick(Sender: TObject);
begin
  // do something here
end;

end.
Run Code Online (Sandbox Code Playgroud)

如何为事件方法创建一个单独的单元,IDE允许我在设计时分配给组件事件?例如:

在此输入图像描述

delphi delphi-2007

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