小编Chr*_*ase的帖子

你可以覆盖对Custom TForm/Dialog的MessageDlg调用吗?

我一直在使用类似的代码

MessageDlg('', mtWarning, [mbOK], 0);
Run Code Online (Sandbox Code Playgroud)

整个项目,(感谢GExperts消息对话工具:))我想知道是否有人知道一种方式覆盖调用并显示我自己的自定义表单.

我能想到的唯一方法就是制作一个类似的新形式

function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
begin
  //show my own code here
end;
Run Code Online (Sandbox Code Playgroud)

并在Dialogs单元之前将它放在每个使用列表中,但是有一种保证的方法可以确保它使用我的代码而不是Dialogs单元代码.
我不喜欢将对话框单元复制到本地目录并对其进行更改的想法.

或者这是多少工作,我应该只使用我自己的函数调用并用我自己的所有MessageDlg替换.(这不会很有趣,我错误地使用了MessageDlg)

delphi

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

在德尔福聊天?

我想从我的delphi应用程序连接到facebook聊天,更改状态消息或在墙上发布一些内容?你知道我能用这种方式吗?

delphi facebook xmpp

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

在主应用程序单元结束后你能捕捉到异常吗?

在我们的一个应用程序中,我遇到了一个我似乎无法找到或捕获的异常。

...
  Application.CreateForm(TFrmMain, FrmMain);
  outputdebugstring(pansichar('Application Run')); //this is printed
  Application.Run;
  outputdebugstring(pansichar('Application Run After')); //this is printed
end.
<--- The Exception seems to be here    
Run Code Online (Sandbox Code Playgroud)

事件日志显示

> ODS: Application Run 
> //Various Application Messages 
> ODS: Application Run After
> First Change Exception at $xxxxxxxx.  ...etc
Run Code Online (Sandbox Code Playgroud)

我能想到的就是它是其中一个单元的最终代码。

(德尔福 7)

delphi exception

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

Delphi 快捷方式添加日期和名称注释

有谁知道放置我的名字和光标所在日期的快捷方式,即

 //021208 DarkAxi0m
Run Code Online (Sandbox Code Playgroud)

所以当我添加评论时,我不会一直检查日期是什么。

我使用 Delphi7,安装了 CnPack 和 GExperts。我认为应该可以与其中一位专家一起完成。

delphi comments delphi-7

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

获取BPL文件名

从BPL中,是否可以获得自己的文件名?例如C:\ foo\bar.bpl

(动态加载和delphi7,如果重要的话)

delphi bpl

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

Delphi,将字符串复制到Byte数组

我有什么工作,但我正在寻找是否有更快的方法将字符串复制到pByteArray

来自sysutils

  PByteArray = ^TByteArray;
  TByteArray = array[0..32767] of Byte;
Run Code Online (Sandbox Code Playgroud)

假设as设置正确

 a:   pByteArray;
 s:   string;
Run Code Online (Sandbox Code Playgroud)

有没有一种快速的方法来做到这一点,即复制等

  for i := 1 TO Length(s) - 1 do
   a^[i] := Ord(s[i]);
Run Code Online (Sandbox Code Playgroud)

德尔福7

delphi string bytearray delphi-7

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

创建类集合的最佳方法

我正在尝试创建一些类,允许我检索和操作我的应用程序将创建和管理的一组备份.

我已经提出了以下代码(尚未测试),但我不确定它是否是实现此目的的最佳方式,或者是否有更简单/更好的方法.我正在使用Delphi 2010.

我有一个包含备份详细信息的类(TBackupItem),然后我需要一个包含TBackupItem集合的类,最后我将有一个类来管理备份的读取和写入,并且还公开了一个访问的属性TBackupItem的集合.

type
  TBackupItem = class
  private
    FBackupProgram: string;
    FBackupProgramVersion: string;
    // There are more variables and properties but for the sake of simplicity I've listed only two
  public
    property BackupProgram: string read FBackupProgram write FBackupProgram;
    property BackupProgramVersion: string read FBackupProgramVersion write FBackupProgramVersion;
  end;

  TBackupsList = class(???)
  private
    // This class will hold a list of TBackupItem. What should I use to accomplish this?
  end;

  TBackupsManager = class(TObject)
  private
    FBackups: TBackupsList;
  public
    property Backups: TBackupsList read FBackups write …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

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

将对象作为接口传递

这应该是一个简单的答案,我相信它将是一个不,
但从一个更大的项目,我有一个接口和程序

iMyUnknown= interface(IInterface)
 ['..GUID..']
end;
procedure WorkObject(iObj :iMyUnknown);
Run Code Online (Sandbox Code Playgroud)

我知道这很有效

var 
  MyUnknown : iMyUnknown;
begin
 if supports(obj, iMyUnknown, MyUnknown) then
  WorkObject(MyUnknown);
Run Code Online (Sandbox Code Playgroud)

但有可能做这样的事情吗?

if supports(obj, iMyUnknown) then
  WorkObject(obj as iMyUnknown);
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-7

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

Delphi,覆盖自定义控件setCaption

我有一个自定义控件,祖先是另一个自定义控件,他的祖先是TPanel; 即

TNotMyCustomControl = class(Tpanel);

TMyCustomControl    = class(TNotMyCustomControl);
Run Code Online (Sandbox Code Playgroud)

是我可能当正在设置Caption(运行时或设计时)做出反应,而且还有改变的传递给祖先控制?

delphi custom-controls delphi-7

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

从BPL函数返回一个字符串

有一个功能,简化如下,从BPL导出

function DoA(amount: currency; var Info: string): Currency; stdcall;
 begin
  result := amount * 19;
  Info:= 'Some Text about the result';
 end;
Run Code Online (Sandbox Code Playgroud)

它使用LoadPackage从主程序加载,GetProcAddress可以很好地用于其他功能.但是当它被调用时会出现许多错误;

BPL与(简化)一起使用

  bplhandle: HModule;
  BPLDoA: function (amount: currency; var Info: string): Currency; stdcall;
  intoStr : string;
Run Code Online (Sandbox Code Playgroud)

.

 begin
  bplhandle:=LoadPackage('test.bpl');
   if bplhandle <> 0 then
    begin
     @BPLDoA:=GetProcAddress(bplhandle,'DoA');
       if assigned(BPLDoA) then
       result := BPLDoA(123, intoStr);
    end;
 end;
Run Code Online (Sandbox Code Playgroud)

似乎在过程结束时发生的异常,但更正的文本返回到intoStr(以断点查看)

错误与Info param是var和/或字符串有什么关系吗?

错误消息是

项目Project1.exe引发了异常类EInvalidPointer,并显示消息"无效的指针操作"

谢谢

更多信息>来自同一个bpl/unit的另一个函数工作正常

function DoB(amount: currency): Currency; stdcall;
  result := amount * 19;
 end;
Run Code Online (Sandbox Code Playgroud)

疯狂除外>

exception class:EInvalidPointer异常消息:无效的指针操作.

主线程($ 1b7c):0040276f …

delphi bpl delphi-7

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

AV当使用另一个组件调用的一个组件的过程时

我不确定我是否已经解释了这个我能做到的最好但是,我们在这里......

我在表单上有2个自定义组件,它们在设计时通过IDE链接在一起.每当我从组件上调用一个过程时,我都会获得访问冲突,

模块"Project2.exe"中地址0049A614的访问冲突.读取地址00000034.

这是我的代码的一小部分

TMyClient = class(TClientSocket)
{...}
end;
Run Code Online (Sandbox Code Playgroud)

和...

TPresence = class(TComponent) 
 private
  ftheClient: TMyClient 
 public 
  procedure SetStatus(status: string);

 published
  property UserName : string read fUserName write fUserName;
  property theClient: TMyClient read ftheClient write ftheClient;
 end;   



procedure TPresence.SetStatus(status: string);
begin
 try
*****   if theClient = nil then
     Exception.Create('theClient  is Nil');
 except
   on e:Exception do
   MessageDlg(e.classname+', '+e.message, mtWarning, [mbOK], 0);
 end;
  {...}
end;
Run Code Online (Sandbox Code Playgroud)

0049A614在*****,IDE停在此处.

我也尝试过在运行时进行分配

Presence1.theClient := MyClient1;
Run Code Online (Sandbox Code Playgroud)

没有运气

使用Presence1或MyClient1中不依赖于彼此的程序可以正常工作.

德尔福7

跟进:从mghie的评论,我重新思考它.

我从表单中删除了TPresence组件(这导致了一些奇怪的IDE错误,可能与它有关)并创建了它的设计时间,分配了所需的一切.现在它可以正常工作,但是将TPresence组件重新放回到从上会带来错误.

谢谢你的帮助,我现在应该能够解决这个问题,如果我不能重新打开另一个问题:)

delphi delphi-7 access-violation custom-component

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

Delphi,olevariants和字符串数组

我有一个用简单的verion创建的ole对象

obj := CreateOleObject('foo.bar');
obj.OnResult := DoOnResult;

procedure TMyDM.DoOnResult(Res: olevariant);
Run Code Online (Sandbox Code Playgroud)

这一切都有效,res变量有一个函数String [] GetAns() 我就是这样调用的

var
 ans: array of string;
begin
 ans := Res.GetAns;
end;
Run Code Online (Sandbox Code Playgroud)

它再次有效..除非有时没有返回数组,然后抛出异常.

作为一个临时的解决方案我把它包裹在一个空的尝试,除了块,我知道是坏的.我已经尝试过 VarIsArray(Res.GetAns), 但如果结果为null,它仍然无法工作

检查正确结果的正确方法是什么?

ps我无法控制ole对象

arrays delphi ole delphi-7 variant

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

SQL选择多个不同的列行作为一列

我不确定一个更好的方法来说明这一点,但我说我有一张桌子

name,    homephone,   fax,    mobile
========================================
bob,     123,         456,    999
chris,   null,        890,    null
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个SQL语句,它会让我这样

name,     phone
================
bob,      123
bob,      456
bob,      999
chris,    890
Run Code Online (Sandbox Code Playgroud)

sql sql-server select

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