标签: delphi-2007

在Delphi中为不可见的ActiveX对象事件处理程序生成代码

您知道在Visual Studio中,您可以使用"+ ="语法和几个选项卡让它自动生成事件处理程序的代码吗?

我如何在Delphi中完成同样的事情?我正在尝试为我使用导入组件功能导入的不可见activex库中的事件创建事件处理程序.

我意识到,使用导入的activex控件,您只需单击该对象,浏览事件选项卡以获取该组件提供的内容,然后双击该事件以使其为您生成一个.

这些特定的activex组件是不可见的,因此您可以在表单上选择它们.Delphi可以自动生成代码吗?如果没有,有人可以指点我一些示例代码吗?

delphi activex delphi-2007

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

任何陷阱将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
查看次数

是否可以从Delphi IDE以管理员身份运行应用程序

我试图在Vista机器上调试Delphi 2007中的应用程序.该应用程序最初是为XP编写的,因此必须以管理员权限运行.我知道我可以将一些信息放入清单或更新代码,但我正在寻找可以在我所有项目中使用的快速修复.

有谁知道是否有一种简单的方法让Delphi在Vista中以管理员身份启动应用程序?

delphi delphi-2007 windows-vista

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

我如何定位TOpenDialog

我有一个Delphi应用程序,它使用TOpenDialog让用户选择一个文件.默认情况下,打开的对话框以当前监视器为中心显示,现在可以离应用程序窗口"英里".我希望对话框以TOpenDialog的所有者控件为中心显示,如果失败了,我会选择应用程序的主窗口.

以下代码类型的工作,它是从TJvOpenDialog派生的,它给了我一些如何做到的提示:

type
  TMyOpenDialog = class(TJvOpenDialog)
  private
    procedure SetPosition;
  protected
    procedure DoFolderChange; override;
    procedure WndProc(var Msg: TMessage); override;
  end;

procedure TMyOpenDialog.SetPosition;
begin
var
  Monitor: TMonitor;
  ParentControl: TWinControl;
  Res: LongBool;
begin
  if (Assigned(Owner)) and (Owner is TWinControl) then
    ParentControl := (Owner as TWinControl)
  else if Application.MainForm <> nil then
    ParentControl := Application.MainForm
  else begin
    // this code was already in TJvOpenDialog
    Monitor := Screen.Monitors[0];
    Res := SetWindowPos(ParentWnd, 0,
      Monitor.Left + ((Monitor.Width - Width) div 2),
      Monitor.Top + ((Monitor.Height - Height) div …
Run Code Online (Sandbox Code Playgroud)

delphi windows-xp delphi-2007

3
推荐指数
2
解决办法
4116
查看次数

delphi IDE菜单中的图像是什么格式的?

我在Delphi IDE(Delphi 2007)的主菜单中添加了一个新条目,并将bmp图像添加到与菜单关联的图像列表中(不将掩码作为参数传递)

IDEMainMenu.Images.Add(Image,nil);
Run Code Online (Sandbox Code Playgroud)

但添加的图像没有显示透明色,我尝试使用8和24位bmp并使用fucsia作为背景颜色,但ide始终显示带背景的图标.所以问题是which is the color depth of the bmp images which i must use and the color of the backgrpund to make appear the image transparent in the delphi ide menu?或者我需要将掩码bmp传递给Images.Add函数?

delphi delphi-2007 ota

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

静态类方法和常规例程指针的兼容性如何?

在我看来,静态类方法和常规例程指针从实际角度兼容,但编译器不知道这一点.例:

type
  TFunc = function(i: Integer): string;

  TMyClass = class
  public
    class function StaticMethod(i: Integer): string; static;
  end;

class function TMyClass.StaticMethod(i: Integer): string;
begin
  Result := '>' + IntToStr(i) + '<';
end;

function GlobalFunc(i: Integer): string;
begin
  Result := '{' + IntToStr(i) + '}';
end;

procedure CallIt(func: TFunc);
begin
  Writeln(func(42));
end;

begin
  CallIt(TMyClass.StaticMethod); //       1a: doesn't compile
  CallIt(GlobalFunc); //                  1b: compiles

  CallIt(@TMyClass.StaticMethod); //      2a: compiles iff $TYPEDADDRESS OFF
  CallIt(@GlobalFunc); //                 2b: compiles iff $TYPEDADDRESS OFF

  CallIt(Addr(TMyClass.StaticMethod)); // 3a: compiles
  CallIt(Addr(GlobalFunc)); …
Run Code Online (Sandbox Code Playgroud)

delphi static-methods function-pointers delphi-2007

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

如何在64位窗口上更新调整大小的表单?

我有一个问题,在Windows Server 2003或2008等64位窗口中运行时,表单上的内容未更新正确.有一个简短的视频在截屏视频中说明了这一点.

当我调整主窗口的大小时,内容不会重新绘制.但如果我更换小分割器,它会重新粉刷.在32位Windows上,一切都很完美.我没有为此做过任何OnResize事件.

有任何想法吗 ?

编辑:是的,可执行文件是32位.它只是64位的Windows操作系统.

delphi 64-bit delphi-2007

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

如何将shorttring数组传递给方法

我想创建一个以shorttring数组作为参数的过程

procedure f(const a, b: Array of shortstring);
Run Code Online (Sandbox Code Playgroud)

我想用已知长度和已知长度的短串的数组来称呼它,例如

var
  A, B: array[1..2] of string[5];
  C, D: array[1..40] of string[12];
begin
  f(A,B);
  f(C,D);
end;
Run Code Online (Sandbox Code Playgroud)

这导致编译器错误E2008不兼容的类型.这是为什么?我可以编写一个可以获取shorttring数组的过程(任何长度的数组/字符串)吗?

为什么要使用短裤?

缺点是现有记录中的字段.这些记录有很多短线串.为了将数据从turbo power B-Tree Filer迁移到SQL数据库,一步是将记录转换为数据集,然后返回记录,以确认所有字段都在两个方向上正确转换.我一直在使用CompareMem记录来检查这一点,但它没有提供关于转换错误所在的字段的足够信息.因此创建了一个小程序,从记录定义中可以生成代码来比较两个记录.对于这个代码生成器,我需要一个函数来比较shorttrings.它最终CompareMem用于短线.

arrays delphi delphi-2007

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

截取屏幕特定部分的屏幕截图

我正在尝试截取屏幕特定部分的屏幕截图.这是我要"剪切"的屏幕部分的坐标:

左:442上:440右:792下:520

也就是说,宽度为350px,高度为80px的矩形.但我不知道如何使用CopyRect来完成这项任务,而不是我得到一个空白的图像.这是我的代码:

function screenshot: boolean;
var
  Bild : TBitmap;
  c: TCanvas;
  rect_source, rect_destination : TRect;
begin
   c := TCanvas.Create;
   bild := tbitmap.Create;
   c.Handle := GetWindowDC(GetDesktopWindow);
   try
     rect_source := Rect(0, 0, Screen.Width, Screen.Height);
     rect_destination := Rect(442,440,792,520);
     Bild.Width := 350;
     Bild.Height := 80;
     Bild.Canvas.CopyRect(rect_destination, c, rect_source);
     Bild.savetofile('c:\users\admin\desktop\screen.bmp');
   finally
    ReleaseDC(0, c.Handle);
     Bild.free;
     c.Free;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007 delphi-xe

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

如何在OnKeyPress事件中翻译Ctrl + Key快捷键?

我试图检测Ctrl+ VTEditOnKeyPress事件,我已经注意到,Key当按下参数假定一个不寻常的值Ctrl+ AnyKey.

例:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage(IntToStr(Ord(Key)));
end;
Run Code Online (Sandbox Code Playgroud)

它产生以下结果:

  • Ctrl+ Q17
  • Ctrl+ W23
  • Ctrl+ E5
  • Ctrl+ R18
  • ...
  • Ctrl+ A1
  • Ctrl+ Z26
  • Ctrl+ C3
  • Ctrl+ V22
  • Ctrl+ X24

我不明白如何翻译密钥,这些代码是什么意思?

它似乎与ASCII表无关:

在此输入图像描述

谁能对此有所了解?

delphi keyboard-shortcuts delphi-2007 keyboard-events

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