标签: delphi-7

Delphi 7和Vista/Windows 7常见对话 - 事件不起作用

我正在尝试修改Delphi 7 Dialogs.pas以访问较新的Windows 7打开/保存对话框(请参阅使用Delphi创建Windows Vista Ready应用程序).我可以使用建议的修改显示对话框; 但是,诸如OnFolderChange和OnCanClose之类的事件不再起作用.

这似乎与将Flags:= OFN_ENABLEHOOK更改为Flags:= 0有关.当Flags设置为0时,将绕过TOpenDialog.Wndproc,并且不会捕获相应的CDN_xxxxxxx消息.

任何人都可以建议对D7 Dialogs.pas进行进一步的代码修改,既可以显示更新的常用对话框,又可以维护原始控件的事件功能?

谢谢...

delphi openfiledialog delphi-7 topendialog

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

在delphi中自动滚动备忘录

delphi是否包含允许从db加载的自动滚动文本的组件,比如在新闻站点中?

这是一个delphi 7应用程序,需要垂直滚动.

delphi delphi-7

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

Delphi汇编程序常量'eof'

eof在asm块上下文中似乎存在未记录的常量.这是使用Delphi 7测试的.

program TestEof;
{$APPTYPE CONSOLE}
var
  example : Integer;
begin
  asm
    mov example, eof
  end;
  writeln(example);
  readln;
end.
Run Code Online (Sandbox Code Playgroud)

打印出来14.

这是不变的eof,它的价值$0E还是14来自哪里?


编辑:这是编译结果

...
call @InitExe
// mov example, eof
mov [example], $0000000e
// writeln(example)
mov eax, [$004040a4]
mov edx, [example]
call @Write0Long
call @WriteLn
call @_IOTest
// readln;
...
Run Code Online (Sandbox Code Playgroud)

delphi assembly delphi-7

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

寻找自定义图像网格

我正在尝试找到一个专门用于显示图像的网格.它也需要具有良好的性能,并且最好具有某种缩略图缓存.图像需要从文件加载,如果图像也可以动态分配,那将是很好的.它不应该在标准网格的列/行记录列表上工作,而是单个项目列表,每个项目代表一个图像.应该有一个属性可以同时为所有列和行定义列宽和行高,而不是一次定义一个.最终目标是列出具有用户选项的所有图像,以控制显示图像的大小.它将用作产品展示,因此需要某种自定义绘图功能,如OnDrawItem事件.这可能会在此列表中显示多达50,000个图像,因此TListView无法正常工作,因为它非常重要.

它需要使用Delphi 2010,XE2,最好是7.

以下是如何在下面显示8张图像的3个示例.我并不是说每个图像的大小不同,但大小完全相同.没有2列可以具有不同的宽度,并且与行相同.

在此输入图像描述

delphi grid image delphi-7 delphi-xe2

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

Delphi变量可能尚未初始化警告

我已经在我的delphi项目中添加了一些代码来与注册表进行交互,使用我在网上找到的一些教程来指导我的工作.我见过的每个例子似乎都使用这个结构进行注册表访问:

var
  Registry: TRegistry;
begin
  try
    Registry := TRegistry.Create;
    //additional code to access and use the registry object could go here
  finally
    Registry.Free;
end;
Run Code Online (Sandbox Code Playgroud)

但是当我按照该结构实现我的代码时,我收到一个警告,我的变量Registry可能没有在我释放TRegistry对象的行上初始化.

所以,我想知道我发现的示例是否在访问注册表的正确方法上是错误的.我是否应该在我的TRegistry对象上调用Free,无论Create是否成功,只是忽略警告?相反,我的try/finally块应该只是在成功构造函数调用之后包围代码,但不包装create调用?别的什么?

delphi delphi-7

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

Delphi交叉编译器用于linux

我想知道是否有任何Borland交叉编译器可以使我的Windows代码在没有wine的linux上工作.我正在使用winxp与delphi 7.我总是想知道是否有可能编写我在Windows中编码的相同工具,再次在Linux以及如何通过在linux中使用pascal代码来编写相同的工具.谢谢

linux windows delphi delphi-7

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

如何从其他PNG复制一个PNG?

我的应用程序需要大量的PNG,而且在尝试使用它们时,我经常搞砸我的代码.为了让我的生活更轻松,我在Realword Paint中制作了一个大的PNG图像,并将所有那些小的PNG图像粘贴到它上面.现在我有一个文件.现在我只需要将一个PNG复制到另一个具有透明度的PNG(顺便提一下,不要问为什么),因为我需要对每个图像进行简单的处理.在处理图像方面,我是程序员.我使用的是Delphi 7.

PGNImage.Resize

procedure TPngObject.Resize(const CX, CY: Integer);
  function Min(const A, B: Integer): Integer;
  begin
    if A < B then Result := A else Result := B;
  end;
var
  Header: TChunkIHDR;
  Line, NewBytesPerRow: Integer;
  NewHandle: HBitmap;
  NewDC: HDC;
  NewImageData: Pointer;
  NewImageAlpha: Pointer;
  NewImageExtra: Pointer;
begin
  if (CX > 0) and (CY > 0) then
  begin
    {Gets some actual information}
    Header := Self.Header;

    {Creates the new image}
    NewDC := CreateCompatibleDC(Header.ImageDC);
    Header.BitmapInfo.bmiHeader.biWidth := cx;
    Header.BitmapInfo.bmiHeader.biHeight := cy;
    NewHandle := CreateDIBSection(NewDC, pBitmapInfo(@Header.BitmapInfo)^, …
Run Code Online (Sandbox Code Playgroud)

delphi png image delphi-7

10
推荐指数
2
解决办法
2112
查看次数

拖放时移动图像

我在TPanel上有一个TImage,还有一个其他(空)TPanel.我想使用拖放将图像从第一个面板拖动到第二个面板.

我实际上想要看到图像从一个面板移动到另一个面板(半透明).

我想我应该使用,TDragObject.GetDragImages但我无法弄清楚如何构建整个魔法.

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.ControlStyle := Image1.ControlStyle + [csDisplayDragImage]; // ???
  TImage(Sender).BeginDrag(False);
end;

procedure TForm1.Image1StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
  // ???
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Source is TImage) then
    Accept := TImage(Source).Parent <> Sender;
end;

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Source is TImage) then
  begin
    TImage(Source).Parent := TPanel(Sender);
    TImage(Source).Align := alClient;
  end; …
Run Code Online (Sandbox Code Playgroud)

delphi drag-and-drop delphi-7

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

是否可以将整个const块标记为已弃用?

我知道您可以将单个常量标记为已弃用

const
  NotDeprConst1 = 1;
  DeprConst = 2 deprecated;
  NotDeprConst2 = 2;
Run Code Online (Sandbox Code Playgroud)

但是,您是否可以将整个const块标记为已弃用而不是逐个标记常量?

我想做的事情如下:

const deprecated
  DeprConst1 = 1;
  DeprConst2 = 2;
  DeprConst3 = 3;
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译(编译器将"已弃用"视为标识符).

或许有一个编译器指令:

{$DEPRECATED ON}
const
  DeprConst1 = 1;
  DeprConst2 = 2;
  DeprConst3 = 3;
{$DEPRECATED OFF}
Run Code Online (Sandbox Code Playgroud)

Embarcadero的提示指令文档说你可以用提示标记任何声明(比如已弃用),但没有详细说明.

delphi delphi-7

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

控件的所有者和父级之间有什么区别?

我对Delphi VCL控件的两个属性有点好奇.

每个组件有2种性质OwnerParent在运行时.谁能帮助我理解两者之间的区别?它们如何被windows用于显示控件或表单?

delphi delphi-7

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