标签: delphi-5

列表框中的选项卡和彩色线条

我正在使用 Fredric Rylander 于 1999 年编写的选项卡式列表框组件,从那时起它就一直为我服务。:) 似乎再也找不到他了。

\n\n

我现在有一个应用程序,需要选项卡式数据和列表框中交替的彩色线。

\n\n

如果需要,我可以在此处包含该组件以供细读。

\n\n

我尝试从这里对线条进行着色\n http://delphi.about.com/cs/adptips2002/a/bltip0602_4.htm

\n\n

但随后它吃掉了标签,但我确实得到了交替的彩色线。

\n\n

有人可以告诉我如何将两者结合起来吗?

\n\n

谢谢

\n\n

这是组件

\n\n
unit myListBoxTabbed;\n{\n  Copyright \xc2\xa9 1999 Fredric Rylander\n\n  You can easily add a header control to this list box: drop a header\n  control onto the form (it\'s default align property is set to alTop, if\n  it\'s not--set it); then set the myTabbedListBox\'s aligned property\n  to alClient; now, add the following two events and their code.\n\n  1) HeaderControl\'s OnSectionResize …
Run Code Online (Sandbox Code Playgroud)

delphi listbox delphi-5

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

在字体大小后更改弹出行高

我需要我的视障用户能够选择字体大小,并且大多数情况下我已经处理好了,但是弹出菜单无法正常工作,因为行高没有随字体大小而改变。

使用这个...

puMenuMain.OwnerDraw:=True;
Screen.MenuFont.Size:=18;  // Actually selected from list by User or Helper
Run Code Online (Sandbox Code Playgroud)

适用于字体大小,但行高未更改。在其他组件(如 TDBGrid)中,Font.Size 更改也会更改行高。

如何让弹出菜单调整所选 Font.Size 的行高?

delphi fonts popupmenu delphi-5

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

模态对话框关闭时,Delphi CMExit消息未发送?

在我正在处理的应用程序的一部分中,有一个表单控件在接收CMExit消息时进行验证,这正是Delphi文档所说的(这段代码示例来自Delphi帮助文件):

procedure TDBCalendar.CMExit(var Message: TWMNoParams);
begin
 try
  FDataLink.UpdateRecord;                          { tell data link to update database }
 except
  on Exception do SetFocus;                      { if it failed, don't let focus leave }
 end;
 inherited;
end;
Run Code Online (Sandbox Code Playgroud)

这样做的目的是在控件失去焦点时立即执行验证.因此,例如,如果我单击"确定"按钮,表单控件将失去焦点,此方法将运行,并且异常会将焦点设置回该表单控件.(因此,OK按钮上的"click"事件永远不会通过,对话框永远不会关闭).

我遇到的问题是这个表单控件在一个模态对话框窗口内.单击确实确实发送CMExit消息并导致记录更新(并进行验证).但是,在窗体控件中按Enter键会导致模式对话框关闭而不发送CMExit消息.好像表单控件从不"失去焦点".这意味着不仅在没有实际验证数据的表单的情况下关闭对话框,而且数据集也不会更新.

鉴于此问题,我放置数据集更新/验证代码的最佳位置在哪里?我可以将它移动到对话框表单本身并在OnCloseQuery处理程序中实现它,但这意味着逻辑在表单控件表单本身都是重复的.(表单控件在其他地方使用,我想避免改变它的行为).

(我推测,CM退出不会被触发,因为控制从未实际上失去焦点.窗体关闭,但形式仍然控制"有焦点"的封闭形式.)

delphi validation focus delphi-5

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

Delphi - BOF或EOF为True,或者当前记录已被删除

当我尝试在MS SQL Server 2005中的空表上选择时显示此错误:"BOF或EOF为True,或者当前记录已被删除".我在Delphi 5中使用了TADOConnection和TADODataSet来连接和检索数据库中的数据.

  Conn := TADOConnection.Create(nil);
  DataSet := TADODataSet.Create(nil);

  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=sa;' +
                           'Persist Security Info=True;' +
                           'User ID=user;Initial Catalog=mydb;' +
                           'Data Source=MYPC\SQLEXPRESS;' +
                           'Use Procedure for Prepare=1;' +
                           'Auto Translate=True;Packet Size=4096;' +
                           'Workstation ID=MYPC;' +
                           'Use Encryption for Data=False;' +
                           'Tag with column collation when possible=False';
  Conn.LoginPrompt := False;
  Conn.Open;

  DataSet.Connection := Conn;
  DataSet.CommandText := 'SELECT * FROM MYTABLE';
  DataSet.Open;

  DataSet.Free;
  Conn.Free;
Run Code Online (Sandbox Code Playgroud)

有没有办法检查数据库表是否为空而不会产生此类错误?

delphi sql-server-2005 ado delphi-5

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

Delphi,String Grid是不可选择的,如何选择Row或Col?

我在Delphi 5中有一个固定行和固定列的StringGrid.但在运行模式下,我无法选择任何行或任何单元格.

如何以及允许我使String Row或单元格可选的属性是什么.

delphi delphi-5 tstringgrid

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

Delphi OpenTools API:如何获取目标exe名称?

如何获得目标可执行文件的名称IOTAProject

来自GExpert的OpenTools API FAQ:

如何确定二进制文件/ exe/dll/bpl/ocx/etc的文件名.由编译或构建生成?
- 对于Delphi 8或更高版本,请使用IOTAProjectOptions.TargetName.
- 对于早期版本,该方法实现起来要复杂得多,因为它涉及可能扫描$ E指令,该指令指定项目的可执行文件扩展名,然后在"OptputDir"指定的路径上查找二进制文件项目选项,或项目目录,如果该选项为空(在许多其他可能性和复杂性中).实现此类工具的最佳方法可能是从CodeGear CodeCentral样本ID 19823中的示例代码开始.

在我的情况下,我适合后者.给定一个IOTAProject接口,会有什么内容:

function GetTargetName(Project: IOTAProject): TFilename;
begin
   //todo
end;
Run Code Online (Sandbox Code Playgroud)

如果它是Delphi 8或更高版本,(未经测试的)答案是:

{$I compilers.inc}

function GetTargetName(Project: IOTAProject): TFilename;
begin
{$IFDEF COMPILER_8_UP}
   Result := Project.ProjectOptions.TargetName;
{$ELSE}
   raise Exception.Create('Not yet implemented');
{$ENDIF}
end;
Run Code Online (Sandbox Code Playgroud)

但这是复杂的前Delphi 8更难.

Jedi JCL在内部有十几种方法TJclOTAExpert可以用来模拟:

Project.ProjectOptions.TargetName
Run Code Online (Sandbox Code Playgroud)

我将努力通过该代码.几个星期后,我希望能够回答我自己的问题.

但与此同时,我会打开它让其他人因能够回答我的问题而获得声誉.

delphi delphi-5 opentools

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

Delphi5 DirectoryExists()

我在Win2000上使用D5但是为所有平台构建应用程序.

我可以FileExists在我的D5应用程序中使用,但DirectoryExists它是未声明的标识符.

它们都来自我在使用列表中放入的SysUtils.Pas.任何人都可以建议我如何使用此功能,如果不能如何解决它?

delphi directory delphi-5

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

使用CopyFile功能时出错

您好我CopyFile在Delphi 5中使用该函数.但该文件未被复制到目标.我也无法看到错误.了解CopyFile失败原因的最佳方法是什么?

if CopyFile(source, dest, false) then
  ShowMessage('Success')
else
  ShowMessage('Error');
Run Code Online (Sandbox Code Playgroud)

我总是得到显示错误.:(

delphi delphi-5

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

Delphi 5中2个日期之间的差异

我希望能够在Delphi 5中找到两个TDateTime变量之间的秒数差异.在后续版本的delphi中,有辅助函数SecondsBetween来执行此操作.有没有更好的方法来做这个而不是滚动我自己(找到两个变量的差异,然后将它们转换为秒)?

谢谢.

delphi delphi-5

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

调用FastMM4 LogAllocatedBlocksToFile()是否会定期用完内存空间吗?

我正在Delphi 5程序中寻找一个难以捉摸的内存问题,该内存在客户站点被随机覆盖。在尝试了许多没有结果的事情之后,我现在想使用来自的FastMM4输出LogAllocatedBlocksToFile()来找出在覆盖区域之前立即分配了哪些对象。该程序使用计时器每30分钟将分配的块信息写入一个新文件。不幸的是EOutOfMemory,根据MadExcept的说法,使用分配的1.83 GB内存后,我的程序(DEBUG版本)的测试运行在大约23小时后崩溃,但异常。

在SysInternals Process Explorer中,它看起来像每次LogAllocatedBlocksToFile()分配调用,但不会释放内存:

运行100分钟的程序的Process Explorer屏幕快照

“ CPU使用率”图中的红色峰值是LogAllocatedBlocksToFile()调用。我已经LogMemoryManagerStateToFile()在之前和之后添加了调用,最后一个峰值的数据(私有字节从大约183 MB增加到大约218 MB)看起来像这样:

55054K分配的
47911K开销
53%的效率

和这个:

55055K分配的
47910K开销
53%的效率

因此,根据Process Explorer,FastMM4似乎不知道程序占用的额外内存。

我使用的是FastMM4的4.991版本,今天已从SourceForge下载。测试程序以DEBUG模式运行,并设置了以下定义:

FullDebugMode

UseCustomFixedSizeMoveRoutines
UseCustomVariableSizeMoveRoutines
NoDebugInfo
ASMVersion
DetectMMOperationsAfterUninstall
RawStackTraces
LogErrorsToFile
LogMemoryLeakDetailToFile
AlwaysAllocateTopDown
SuppressFreeMemErrorsInsideException
EnableMemoryLeakReporting
HideExpectedLeaksRegisteredByPointer
RequireDebuggerPresenceForLeakReporting
EnableMMX
ForceMMX EnableBackwardCompatibleMMSharing
UseOutputDebugString

问题:

这些功能是否存在任何已知问题?我是否没有正确使用它们,难道它们不打算在一个调试会话中多次调用吗?有没有办法再次释放该内存?

delphi delphi-5 fastmm

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