小编WeG*_*ars的帖子

如何在FireMonkey中创建一个圆角按钮?

我正在开发Delphi Firemonkey移动应用程序.我想在Firemonkey中创建一个圆角按钮.如何在不使用第三方组件的情况下执行此操作?

delphi firemonkey

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

Jpeg 到 Bmp 的转换需要不合理的时间

我有这个函数,需要 4.2 秒才能将 jpg 转换为 bmp。为什么需要这么长时间?我可以做得更快吗?
IrfanView 只需一小部分时间即可加载并转换文件。

我认为大部分时间都花在 JPG.LoadFromFile 上。但当我测量时间时,我惊讶地发现它大部分时间都花在 BMP.Assing(JPG) 上。

function ConvertJPG2BMP(CONST FileName: string): TBitmap;
VAR JPG: TJpegImage;
begin
 Result:= NIL;
 JPG:= TJpegImage.Create;
 TRY
   JPG.LoadFromFile(FileName);
   if  (JPG.Width > 0) AND (JPG.Width  < 32768)
   AND (JPG.Height> 0) AND (JPG.Height < 32768) then
    begin
      Result:= TBitmap.Create;
      TRY
        Result.HandleType:= bmDIB;

        // Fuji_FinePix_F550.JPG    [3200x1800] [1.44MB] 
        Result.Assign(JPG);  <--- 4 seconds!!
      EXCEPT
        FreeAndNil(Result);
      END;
    end;
 FINALLY
   FreeAndNil(JPG);
 end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi

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

自动调整大小的TCheckBox(如TLabel)

我想创建一个复选框,可以自动调整其宽度,就像TLabel一样。

UNIT cvCheckBox;
{  It incercepts CMTextChanged where it recomputes the new Width}
INTERFACE
USES
  Winapi.Windows, Winapi.Messages, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.StdCtrls;

TYPE
 TcCheckBox = class(TCheckBox)
 private
   FAutoSize: Boolean;
   procedure AdjustBounds;
   procedure setAutoSize(b: Boolean);  reintroduce;
   procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
   procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
 protected
    procedure Loaded; override;
 public
    constructor Create(AOwner: TComponent); override;
 published
    //property Caption read GetText write SetText;
    property AutoSize: Boolean read FAutoSize write setAutoSize stored TRUE;
 end;

IMPLEMENTATION

CONST
  SysCheckWidth: Integer = 21;  // In …
Run Code Online (Sandbox Code Playgroud)

delphi checkbox autoresize delphi-xe7

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

在C#中使用Delphi 7中编译的DLL

我需要在我的C#应用​​程序中使用Delphi 7中的DLL(硬件ID提取器).

此DLL导出的函数是:

导出功能:

// CPU
function GetCPUSpeed: Double;
function CPUFamily: ShortString; { Get cpu identifier from the windows registry }
function GetCpuTheoreticSpeed: Integer; { Get cpu speed (in MHz) }
function IsCPUIDAvailable: Boolean; Register;
function GetCPUID (CpuCore: byte): ShortString;
Function GetCPUVendor: ShortString;

// RAM
function MemoryStatus (MemType: Integer): cardinal; { in Bytes }
function MemoryStatus_MB (MemType: Integer): ShortString; { in MB }

// HDD
function GetPartitionID (Partition : PChar): ShortString; { Get the ID of the specified patition. Example …
Run Code Online (Sandbox Code Playgroud)

c# delphi dll

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

FastMM和动态加载的DLL

我有一个主机应用程序,它在启动时加载了十几个库.我想从Delphi 7s默认内存管理器切换到FastMM4的完整版本,以获得更好的内存泄漏报告.

我应该在主机应用程序和库的使用部分中包含FastMM4吗?那么共享运行时包呢?


一些补充信息:

  • 我们有一个exe和> 20个dll.每个人都在共享一个运行时包.
  • 我们今天不使用sharemem.不是我知道的.ShareMem不包含在e斗篷或者我今天快速查看的dll中.

其他问题:

  • 我可以在所有项目中的fastmems inc文件中使用相同的选项,还是exe和dll需要不同的设置?

delphi dll fastmm

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

ShellExecute无法在IDE中运行,但在其他方面有效

我想使用ShellExecute命令创建然后打开一个txt文件.

我已经使用这段代码多年使用Delphi 7并且它有效:

function Executa(CONST ExeName, Parameters: string): Boolean;
begin
 if Parameters= ''
 then Result:= ShellExecute(0, 'open', PChar(ExeName), NIL              , nil, SW_SHOWNORMAL)> 32
 else Result:= ShellExecute(0, 'open', PChar(ExeName), PChar(Parameters), nil, SW_SHOWNORMAL)> 32;
end;
Run Code Online (Sandbox Code Playgroud)

现在,我切换到Windows 7,当它从IDE运行时代码不再工作.Delphi显示CPU窗口,标题为"CPU-Process unknown(2352)".我关闭CU窗口,一切正常,直到我关闭应用程序,当Delphi再次显示CPU窗口时.如果我从IDE外部运行应用程序,它可以正常工作.

看起来调试器有话要对我说,但我不知道是什么.

delphi

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

真正快速的功能来比较两个文件的名称(完整路径)

我必须检查我是否在FileListBox中有重复的路径(FileListBox具有某种作业列表或播放列表的角色).使用Delphi的SameText,CompareStr,CompareText需要6秒.所以我带了我自己的比较功能,它(更快)但速度不够快.任何想法如何改进它?

function SameFile(CONST Path1, Path2: string): Boolean;
VAR i: Integer;
begin
 Result:= Length(Path1)= Length(Path2);                                         { if they have different lenghts then obviously are not the same file }
 if Result then
  for i:= Length(Path1) downto 1 DO                                             { start from the end because it is more likely to find the difference there }
   if Path1[i]<> Path2[i] then
    begin
     Result:= FALSE;
     Break;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

 for x:= JList.Count-1 downto 1 DO
  begin
   sMaster:= JList.Items[x];
   for y:= x-1 downto 0 DO
    if …
Run Code Online (Sandbox Code Playgroud)

delphi

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

为什么没有出现蓝点(表示代码已编译)?

我在DPK文件中放置了几个第三方控件,以便在我(重新)安装Delphi时单击安装它们.这个DPK中的一个控件是Melander的GIFImage.pas.问题是,当我编译包时,蓝色圆点不会出现在这个文件中.为什么?

文件IS已编译.我删除了DCU并且我放了一些无​​法编译的垃圾文本,编译器确实在该行停止并抱怨它无法编译该文件.没有生成DCU,编译和整个DPK都失败了.然后我删除了垃圾文本并重新编译.它起作用并且生成了DCU.所以文件已编译完毕.

delphi

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

何时调用SetProcessWorkingSetSize?(说服内存管理器释放内存)

在之前的帖子中(我的程序永远不会释放内存.为什么?)我表明FastMM可以缓存(读取为自身保持)相当大的内存.如果您的应用程序刚刚在RAM中加载了大量数据集,则在释放数据后,您将看到令人印象深刻的RAM未释放回内存池.

我环顾四周,似乎调用SetProcessWorkingSetSize API函数会将缓存"刷新"到磁盘.但是,我无法决定何时调用此函数.我想在执行RAM密集型操作的按钮上的OnClick事件结束时调用它.但是,有些人说这可能会导致AV.

如果有人成功使用此功能,请告诉我(我们).

非常感谢.


编辑:
1.释放数据集后,程序仍然需要大量的RAM.调用SetProcessWorkingSetSize后,大小返回到几MB.有人争辩说什么都没有被释放.我同意.但是内存占用现在很小,并且在正常使用程序后不会增加(例如,在执行不涉及加载大型数据集的正常操作时).不幸的是,没有办法证明交换到磁盘的内存被装回内存,但我认为不是.2.我已经证明了(我希望)这不是内存泄漏:
我的程序永远不会释放内存.为什么?
如何说服内存管理器释放未使用的内存

delphi

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

Delphi IDE - 如何禁用活动行的颜色?

我觉得Delphi XE非常稳定可用.然而,有一个"功能"让我疯了!IDE以特殊颜色突出显示当前行.无论是在那条线上,它都会得到相同的颜色.有任何注册表调整来禁用这种恼人的行为?

delphi delphi-xe

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

标签 统计

delphi ×10

dll ×2

autoresize ×1

c# ×1

checkbox ×1

delphi-xe ×1

delphi-xe7 ×1

fastmm ×1

firemonkey ×1