我一直在使用类似的代码
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应用程序连接到facebook聊天,更改状态消息或在墙上发布一些内容?你知道我能用这种方式吗?
在我们的一个应用程序中,我遇到了一个我似乎无法找到或捕获的异常。
...
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)
有谁知道放置我的名字和光标所在日期的快捷方式,即
//021208 DarkAxi0m
Run Code Online (Sandbox Code Playgroud)
所以当我添加评论时,我不会一直检查日期是什么。
我使用 Delphi7,安装了 CnPack 和 GExperts。我认为应该可以与其中一位专家一起完成。
我有什么工作,但我正在寻找是否有更快的方法将字符串复制到pByteArray
来自sysutils
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
Run Code Online (Sandbox Code Playgroud)
假设a和s设置正确
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 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) 这应该是一个简单的答案,我相信它将是一个不,
但从一个更大的项目,我有一个接口和程序
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) 我有一个自定义控件,祖先是另一个自定义控件,他的祖先是TPanel; 即
TNotMyCustomControl = class(Tpanel);
TMyCustomControl = class(TNotMyCustomControl);
Run Code Online (Sandbox Code Playgroud)
是我可能当正在设置Caption(运行时或设计时)做出反应,而且还有改变的传递给祖先控制?
有一个功能,简化如下,从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 …
我不确定我是否已经解释了这个我能做到的最好但是,我们在这里......
我在表单上有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组件重新放回到从上会带来错误.
谢谢你的帮助,我现在应该能够解决这个问题,如果我不能重新打开另一个问题:)
我有一个用简单的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对象
我不确定一个更好的方法来说明这一点,但我说我有一张桌子
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)