我正在尝试修改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是否包含允许从db加载的自动滚动文本的组件,比如在新闻站点中?
这是一个delphi 7应用程序,需要垂直滚动.
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) 我正在尝试找到一个专门用于显示图像的网格.它也需要具有良好的性能,并且最好具有某种缩略图缓存.图像需要从文件加载,如果图像也可以动态分配,那将是很好的.它不应该在标准网格的列/行记录列表上工作,而是单个项目列表,每个项目代表一个图像.应该有一个属性可以同时为所有列和行定义列宽和行高,而不是一次定义一个.最终目标是列出具有用户选项的所有图像,以控制显示图像的大小.它将用作产品展示,因此需要某种自定义绘图功能,如OnDrawItem事件.这可能会在此列表中显示多达50,000个图像,因此TListView无法正常工作,因为它非常重要.
它需要使用Delphi 2010,XE2,最好是7.
以下是如何在下面显示8张图像的3个示例.我并不是说每个图像的大小不同,但大小完全相同.没有2列可以具有不同的宽度,并且与行相同.

我已经在我的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调用?别的什么?
我想知道是否有任何Borland交叉编译器可以使我的Windows代码在没有wine的linux上工作.我正在使用winxp与delphi 7.我总是想知道是否有可能编写我在Windows中编码的相同工具,再次在Linux以及如何通过在linux中使用pascal代码来编写相同的工具.谢谢
我的应用程序需要大量的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) 我在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) 我知道您可以将单个常量标记为已弃用
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 VCL控件的两个属性有点好奇.
每个组件有2种性质Owner和Parent在运行时.谁能帮助我理解两者之间的区别?它们如何被windows用于显示控件或表单?
delphi ×10
delphi-7 ×10
image ×2
assembly ×1
delphi-xe2 ×1
grid ×1
linux ×1
png ×1
topendialog ×1
windows ×1