标签: delphi-2007

ShareMem/string-Delchanging与Delphi DLL

我希望快一点 - 我即将钻研Delphi 5遗留应用程序,该应用程序调用DLL(也用D5编写),传递DLL可以根据需要修改的字符串.

我有DLL和应用程序的代码.粘贴在DLL源代码顶部的是关于使用ShareMem的注释,它需要是项目的uses子句中的第一行等.

如果我将这一切移植到D2007,是否有更好的(或更现代的)方法来获得Delphi应用程序与Delphi DLL共享字符串数据?D5 ShareMem的东西是否仍适用于Delphi 2007应用程序(使用FastMM等)?我还没有重新编译整个事情的bash - 只是想知道这一点是否会成为一个问题,是否有替代/推荐的方法这样做?

FWIW,DLL完全是第一方(它只被这个特定的应用程序使用 - 所以在D2007下重新编译它也不会有问题).

delphi dll delphi-2007

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

如何避免使用TWebBrowser刷新

我有一个显示谷歌地图页面的TWebBrowser组件.问题是,当用户按F5页面刷新和页面重新加载.这会导致javascript变量重新初始化并与Delphi不同步,并出现脚本错误对话框, 'undefined'为null或不是对象.

我想停止用户刷新.

我为OnBeforeNavigate2尝试了这个事件:

procedure TNewOrganizationForm.mapAddressBeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  inherited;
  Cancel := Assigned(fMapEngine) and not fMapEngine.Loading;
end;
Run Code Online (Sandbox Code Playgroud)

但是当我设置一个断点时,它甚至都没有被调用.还有另外一种方法吗?

delphi refresh delphi-2007 twebbrowser

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

为什么不调用已发布的Int64属性 - 编写器方法 - 组件流

这是一个简单的测试,演示了我在项目中遇到的问题,使用Delphi 2007.我使用TComponent类来存储组件的各种状态.但永远不会调用Int64属性writer方法(仅设置目标字段).因此,不可能依靠编写器来更新GUI TList或类似的东西......

例如:

TTestClass = Class(TComponent)
  Private
    Fb: Int64;
    Fa: Integer;
    Procedure SetFa(Const Value: Integer);
    Procedure SetFb(Const Value: Int64);
  Published
    Property a: Integer Read Fa Write SetFa;
    Property b: Int64 Read Fb Write SetFb;
  Public
    Procedure SaveInstance(Var Str: TStream);
    Procedure LoadInstance(Var Str: TStream);
    Procedure ReallyLoadInstance(Var Str: TStream);
    Procedure Assign(Source: TPersistent); Override;
  End;

TForm1 = Class(TForm)
  Button1: TButton;
  Button2: TButton;
  Button3: TButton;
  Procedure Button1Click(Sender: TObject); // test: 1st step, save the class
  Procedure Button2Click(Sender: TObject); // test: 2nd step, try …
Run Code Online (Sandbox Code Playgroud)

delphi streaming components delphi-2007

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

在Windows 7上枚举Delphi 2007中的终端服务会话

我正在使用QWINSTA.EXE从我们网络上的终端服务器获取会话/用户列表(我的计算机是Windows 7 Pro,TS是Windows Server 2003).我将此函数的输出传递给文本文件,然后处理文本文件以获取我需要的信息.如果有更好的方法,请原谅并跳过我冗长的帖子并指出我正确的方向.

我的问题是,无论是ShellExecute()也不ShellExecuteEx()让我即使执行程序,而不必首先提升权限.如果您转到未提升的命令提示符,您甚至不会在目录列表中看到EXE(也没有隐藏属性).使用"以管理员身份运行"命令提示符,您可以正常查看/使用它.无论如何,您都可以从Windows资源管理器中看到它.

我戳了一下,发现了这个gem:RunFileAsAdminWait()如果我尝试直接调用QWINSTA.EXE(它失败并显示错误消息:),则无效System Error. Code: 2. The system cannot find the file specified..如果我将所有内容都包装到批处理文件中并RunFileAsAdminWait()在批处理文件上使用,那么它似乎工作正常.

我知道,但没有用过,WTSEnumerateSessions().除了刚刚链接到的MSDN链接之外,我还没有找到关于它的更多信息.有人知道从Delphi使用该API的大量参考代码吗?它在Delphi 2007的Windows单元中不可用.

问题:

  1. 是否有另一种/更好的方法来执行需要管理员权限甚至访问的EXE?或者甚至是这里发生了什么?

  2. 有没有更好的方法来获取终端服务器上的活动会话列表,尤其是不需要提升权限的会话列表?

  3. 如果我坚持使用这种方法,我是以"正确的方式"做到的吗?

感谢您提供的任何帮助!

delphi delphi-2007 terminal-services windows-7

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

为什么"="运算符结果在将varEmpty与零评估的varInteger进行比较时为True?

为什么=运算符True在将varEmpty Variant变量与零评估varInteger Variant变量进行比较时会产生结果?

var
  V1 : Variant;
  V2 : Variant;
begin
  V2 := 0;
  if(V1 = V2)
  then ShowMessage('V1 = V2')
  else ShowMessage('V1 <> V2');
end;
Run Code Online (Sandbox Code Playgroud)

此代码生成以下输出:

V1 = V2

相等运算符是否=仅检查Variant变量的值部分?

delphi operators variant delphi-2007

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

如何在 Windows 7 或更高版本中正确获取系统语言

我需要提取用户的 Windows 语言,我正在使用下面的函数。但是我在我当前的机器上进行了测试(它是开放式英语),但函数返回是“葡萄牙语(巴西)”。

其实我的机器本来是用这种语言的,但是在我安装了一个新的语言包之后,它现在是英语,而不是葡萄牙语;所以我认为下面的功能不能正常工作。还有另一种选择吗?

谢谢

function GetWindowsLanguage: string;
var
  WinLanguage: array [0..50] of char;
begin
  VerLanguageName(GetSystemDefaultLangID, WinLanguage, 50);
  Result := StrPas(WinLanguage);
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007

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

soCaseInsensitive是否会极大地影响TdxMemDataset上的TdxMemIndex的性能?

我正在为我的DevExpress TdxMemDataset添加一些索引以提高性能.该TdxMemIndex具有SortOptions,其中包括该选项soCaseInsensitive.我的数据通常是GUID字符串,因此它不区分大小写.我想知道我是否更好的只是强制所有数据到相同的情况或如果soCaseInsensitive标志和使用loCaseInsensitive标志调用Locate只有一个较小的性能损失(大致相当于每次转换我的字符串的情况我需要使用索引).

此时我将关闭CaseInsentive并转换案例.

delphi performance devexpress delphi-2007

0
推荐指数
1
解决办法
369
查看次数

如何使用Include with Unicode?

我尝试将一些代码从D2007移植到DXE2.这个简化的代码在D2007中编译得很好.在DXE2中显示此错误:

[DCC Warning] Unit1.pas(10): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'AnsiChar' and 'Char'
Run Code Online (Sandbox Code Playgroud)

可能是一个unicode问题.有人能告诉我为什么会发生这种情况以及我该如何纠正它?

问候

代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TSetOfChar = Set of Char;  // Line 10

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FCharacterSet: TSetOfChar;
  public
    property CharacterSet: TSetOfChar read FCharacterSet write FCharacterSet;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007 delphi-xe2

0
推荐指数
1
解决办法
1032
查看次数

递归导入资源文件Delphi 2007

我已经为Delphi 2007应用程序创建了一个资源文件.资源文件包含10个Bitmap条目.我想知道是否有办法通过递归浏览资源文件将所有位图加载到Imagelist中,或者我是否必须一次将它们拉出一个.

提前致谢.

delphi delphi-2007

0
推荐指数
1
解决办法
431
查看次数

7z在Delphi 2007中

我正在尝试使用Delphi 2007使用JEDI JCL压缩一些文件.问题是我无法弄清楚为什么我一直得到这个错误" Sevenzip: Failed to load 7z.dll"

我的代码是:

var
   archiveclass: TJclDecompressArchiveClass;
   archive: TJclDecompressArchive;
   item: TJclCompressionItem;
   s: String;
   i: Integer;
begin
   archiveclass := GetArchiveFormats.FindDecompressFormat(dir);

   if not Assigned(archiveclass) then
      raise Exception.Create('Could not determine the Format of ' + dir);

   archive := archiveclass.Create(dir);
   try
      if not (archive is TJclSevenZipDecompressArchive) then
         raise Exception.Create('This format is not handled by 7z.dll');

      archive.ListFiles;

      s := Format('test.zip Item Count: %d'#13#10#13#10, [archive.ItemCount]);

      for i := 0 to archive.ItemCount - 1 do
      begin
         item := archive.Items[i];
         case item.Kind …
Run Code Online (Sandbox Code Playgroud)

delphi 7zip delphi-2007 jedi

0
推荐指数
1
解决办法
1005
查看次数