小编WeG*_*ars的帖子

Win3.1调色板中控件的更新

有些人说我必须使用现代控件更新Win3.1调色板(尤其是TFilterComboBox)中的控件.但是德尔福是否提供了这样的新控件?

我需要创建一个GUI(以某种方式类似于Windows资源管理器,包含DirectoryListBox,FileListBox和FilterComboBox),我允许用户轻松浏览特定类型的文件.由于界面以此Explorer为中心,因此TOpenDialog就像用锤子击中客户一样.我需要一个"易于使用"的解决方案.

不幸的是,Shell Controls不够稳定,无法用作替代品.

delphi delphi-xe

4
推荐指数
1
解决办法
586
查看次数

如何在后台从多个线程加载图像[多个线程] [又名:TBitmap不是线程安全的]

我想快速显示一些图像(jpg,png等)作为缩略图.因为解码和调整大小过程是懒惰的,所以我要在一个或多个线程中完成它.

但是,看起来使用TBitmap的画布并且TJpeg不是多线程安全的.

在这种情况下,我的问题是:
1.如果不完全重写GIF/PNG/BMP/JPG库,怎么办呢?
2.有人知道Embarcadero的Gif和Png libs是否也不安全?
3.如果我使用Lock锁定画布不会破坏性能,因为调整大小部分访问画布并占用大部分CPU周期?


我发现这让我很烦恼:

David HAROUCHE写道:这不正确.真正令人困惑的部分是,即使本地TBitmap不是线程安全的,除非你锁定它们.这是因为每个TBitmap都将自己注册到graphics.pas中的全局BitmapCanvasList列表.当DC垃圾收集FreeMemoryContexts()

http://www.codenewsfast.com/cnf/thread/0/permalink.thr-ng1908q2024

delphi

4
推荐指数
1
解决办法
2856
查看次数

为什么DateUtils.pas中的DateTimeToMilliseconds被标记为内部?

为什么DateUtils.pas中的DateTimeToMilliseconds被标记为内部?我可以用吗?

{ Internal, converts a date-time to milliseconds }
function DateTimeToMilliseconds(const ADateTime: TDateTime): Int64;
var
  LTimeStamp: TTimeStamp;
begin
  LTimeStamp := DateTimeToTimeStamp(ADateTime);
  Result := LTimeStamp.Date;
  Result := (Result * MSecsPerDay) + LTimeStamp.Time;
end;
Run Code Online (Sandbox Code Playgroud)

[德尔福XE]


我在About.com上发现了这个:

经验表明,使用函数和EncodeDateTime创建两个TDateTime值,它们彼此之间的距离只有一毫秒,该函数返回MillisecondsBetween不返回预期值,证明它不准确.

所以,如果我不关心几个milisecs,我应该使用它.

delphi

4
推荐指数
1
解决办法
816
查看次数

我想获取Julia生成的ASM(Intel汇编)代码

for在 Delphi 中编写了一个简单的循环并将其翻译为 Julia。与 Julia 程序相比,Delphi 程序的执行时间简直可怜:Julia 快了 7 倍 -查看程序和结果

我试图弄清楚这是如何可能的,因为 Delphi 应该是地球上最快的语言之一!

我想将 Julia 生成的 ASM 代码与 Delphi 生成的 ASM 代码进行比较。在 Delphi 中,我只需单击一下即可获取该代码。在哪里可以看到 Julia 中特定函数的 ASM 代码?

using BenchmarkTools
println("----------- Test for loops")
# test for loops
function for_fun(a)
    total = 0
    big = 0
    small = 0
    for i in 1:a
        total += 1
        if i > 500000
            big += 1
        else
            small += 1
        end    
    end   

    return (total, small, big)
end

res_for …
Run Code Online (Sandbox Code Playgroud)

delphi execution-time compiler-optimization julia

4
推荐指数
1
解决办法
317
查看次数

Delphi DLL与其他编程语言兼容

我想构建一个DLL,导出返回字符串的函数.这个DLL应该与其他编程语言一起使用!! 我找到了各种令人讨厌的解决方案/黑客,最好的方法是让我的函数返回Pchar,然后调用同一DLL中包含的另一个函数(让我们称之为ReleaseMemory)来释放为PChar保留的内存.

无论如何,最近我发现了FastShareMem库.它说它可以完全按照我想要的方式完成调用ReleaseMemory.在另一边FastMM似乎做同样的,只要DLL和应用程序使用FastMM内存管理器.这会立即杀死使用FastMM作为我的通用DLL的内存管理器的机会.对?

====================

FastShareMem(http://www.codexterity.com/fastsharemem.htm),Delphi 7中,Windows XP的32位,视窗7 64位

delphi fastmm

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

VertScrollBar.Visible始终返回TRUE

我有一个从TScrollBox派生的自定义控件.在运行时,我需要知道天气垂直滚动条是否可见.如果我询问Visible属性,它总是返回true,无论滚动条是否可见!

function TMyScrollPanel.ScrollVisible: boolean;
begin
 Result:=  Self.VertScrollBar.Visible;            <----------- always true
end;
Run Code Online (Sandbox Code Playgroud)

但是,这可以正常工作:

function VertScrollBarVisible(WindowHandle: THandle): Boolean;                  
begin
 Result:= (GetWindowlong(WindowHandle, GWL_STYLE) AND WS_VSCROLL) <> 0
end;
Run Code Online (Sandbox Code Playgroud)

第一个功能有什么问题?

delphi

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

什么是dclsmpedit?

什么是dclsmpedit包(Embarcadero Editor Script Enhancements)?
我需要它吗?

我不确定'编辑脚本增强功能'是做什么的.

delphi

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

TListView - 如何在调整大小时重新排列项目

我有一个显示小缩略图的TListView(ViewStyle:=vsIcon).在运行时我将图像分配给项目:

  for i := 0 to Total - 1 DO
   with ListView.Items.Add DO
     begin
      Caption := 'Item ' + IntToStr(i);
      ImageIndex := i;
     end;
Run Code Online (Sandbox Code Playgroud)

在启动时,表单不是很宽,缩略图只显示在3列上.不幸的是,如果我调整窗体(和ListView)的大小,列数将保持为3,而在右侧,我将有很多空格.

这也行不通:

procedure TForm1.FormCreate(Sender: TObject);
begin
 ListView.IconOptions.AutoArrange := TRUE;
end;
Run Code Online (Sandbox Code Playgroud)

如何重新排列项目以填充空白区域?
有没有像AutoArrange这样的房产?


更新:
我删除了旧控件,并在表单上添加了新控件.
现在ListView.IconOptions.AutoArrange有效.在之前的控件中有一些东西(我做了一些设置)阻止了AutoArrange工作.

delphi listview

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

长度有多快?

我需要s在程序中经常读取字符串的长度.我设置了s一次字符串,所以我可以在变量(NoOfChars)中记住它的大小,如下所示:

type
  MyClass= class
    Public
     s: string;
     NoOfchars: integer;  
  end;

procedure MyClass.SetS(const MyString: String); 
begin
  s:= MyString;
  NoOfchars := Length(s); // <-- store it once, read it often
end;
Run Code Online (Sandbox Code Playgroud)

我想我读到的地方Length(s)和读取常量一样快,因为它只访问存储在字符串前面"hidden"字段中的字符串的长度.这很有意义,但由于我们没有源代码,我们只能猜测.也许还有其他涉及的计算?

那么,我应该使用Length(s)还是应该记住变量中的长度?

delphi delphi-xe

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

如何在C++中定义常量?

我通过Mingw在Windows上编写了一个linux程序.但是,转换并不完美.例如,在Windows上输出是这样的(我得到'zu'而不是实数):

Approximated minimal memory consumption:
Sequence        : zuM
Buffer          : 1 X zuM = zuM
Table           : 1 X zuM = zuM
Miscellaneous   : zuM
Total           : zuM
Run Code Online (Sandbox Code Playgroud)

事实证明,Mingw不支持%zu,但它提供了一种解决方法.在他们的网站上,他们说:

由于您使用的是Microsoft的实现,因此无法使用.在包含stdio.h之前,直接使用mingw_printf或将USE_MINGW_ANSI_STDIO定义为1.

所以,我在我的程序中进行了搜索,我发现cdhit-common.h是唯一一个有#include行的文件.所以,我在该行上方定义了USE_MINGW_ANSI_STDIO并编译:

#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdlib>
#define USE_MINGW_ANSI_STDIO 1
#include<stdio.h>
...
Run Code Online (Sandbox Code Playgroud)

它编译但程序仍然输出'zu'而不是数字.我做的不错吗?为什么没用?

注意:使用mingw时,使用USE_MINGW_ANSI_STDIO的解决方案适用于mingw64.我希望是适用于这两个平台.

c++ linux gcc mingw

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