从C#调用Delphi函数
我有以下DLL源代码. library Project1; uses System.SysUtils, System.Classes; type IStringFunctions = interface ['{240B567B-E619-48E4-8CDA-F6A722F44A71}'] function GetMethodValueAsString():PAnsiChar; stdcall; end; TStringFunctions = class(TInterfacedObject, IStringFunctions) public function GetMethodValueAsString():PAnsiChar; stdcall; end; {$R *.res} function TStringFunctions.GetMethodValueAsString():PAnsiChar; stdcall;
6 2024-04-16
编程技术问答社区
SerialForms.pas(17): W1010 方法 'Create'隐藏了基础类型 'TComponent'的虚拟方法;
我创建了一个类 FormInfo = class (TComponent) private FLeftValue : Integer; FTopValue : Integer; FHeightValue : Integer; FWidthValue : Integer; public constructor Create( AOwner : TComponent; leftvalue : integer; topvalue : integer; heightvalue : integer; widthvalue : integer); protected procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; function GetChildOwner: TCo
30 2024-04-05
编程技术问答社区
在默认浏览器中打开TWebBrowser链接
我的应用程序显示在TWebBrowser控件中从Web加载的小横幅.该横幅实际上是一个HTML页面,其中包括图像.当用户单击图像时,将他们带到我们当前正在运行的促销活动. 不好的事情是,当单击twebbrowser中的链接时,广告系列页面是在Internet Explorer中打开的,而不是在其默认浏览器中打开.我知道发生这种情况是因为TWebBrowser是一个基于IE的控件,但是是否有一种方法可以打开用户选择的浏览器中的链接? 谢谢. 解决方案 在OnBeforeNavigate2事件中,检查请求的URL,如果您想启动该URL,则Stop()当前导航并调用ShellExecute()以在用户的​​默认外部浏览器中启动URL. procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; pDisp: IDispatch; var URL: Variant; var Flags: Variant; v
16 2024-04-03
编程技术问答社区
如何用FireMonkey跨平台应用程序的默认浏览器打开一个URL?
通常,我使用:ShellExecute(0, 'OPEN', PChar(edtURL.Text), '', '', SW_SHOWNORMAL); 在所有平台上(Windows 和 osx)上,我如何具有相同的行为(在默认浏览器中打开链接)? 解决方案 在Firemonkey讨论论坛中,我找到了有关NSWorkSpace.urlforapplicatialtoopenurl的问题的代码: uses Posix.Stdlib; .... _system(PAnsiChar('open ' + ACommand)); (我未测试) 更新:posix在Windows上不可用,因此无法编写在所有平台上使用相同OS调用的解决方案.我建议在具有一些IFDEF POSIX等的中央" Xplatform"单元中移动此类代码. 其他解决方案 关于 mjn> mjn 的答案,我写了以下单元.我已经在Windows上成功测试了它,但是我没有在此平台上对其进行测试
8 2024-04-03
编程技术问答社区
如何使用Delphi XE2 IDE搜索<item1>和<item2>?
我一直在使用搜索来在我(巨大的)应用程序源中找到东西,因此搜索效率对我来说非常重要.目前在Delphi Xe2 IDE中我喜欢使用: 在文件中查找 包括子目录. 别无其他,只是文本关键字.这还可以,但是我真正想做的是扩展我现在正在做的事情,以包括包含" A"和" B"的行,其中A和B是任何字符(一种Boolean搜索).与A和B的确切匹配是可以的,因为现在这使您可以放入两个非常部分的关键字,并且仍然找到独特的情况.多年来,我一直在自己的搜索引擎中使用这种方法.请问在Delphi IDE中有一种简单的方法吗? 谢谢 解决方案 您可以使用正则表达式(只需选中Find窗口右侧的regular expressions复选框)即可.正则支持有限 - 在 i使用GExperts Grep Search而不是( 以上结果基于单个文件搜索和这些结果.对于多个文件(在这种情况下,只有两个),对话框显示为这样:
18 2024-04-01
编程技术问答社区
在Delphi中裁剪和对齐插入的BMP
我想从剪贴板上裁剪和对齐插入的BMP. 我正在尝试2天,但仍然没有可行的... procedure TForm1.act1Execute(Sender: TObject); var BMP : TBitmap; begin BMP := TBitmap.Create; BMP.Assign(Clipboard); BMP.SetSize(400,200); Img1.picture.Graphic := BMP; BMP.Free; end; procedure TForm1.act1Update(Sender: TObject); begin (Sender as TAction).Enabled := Clipboard.HasFormat(CF_BITMAP); end; end. 解决方案 如果我理解您正确,您需要将位图集中在图像控件中? 这很简单 - 设置Img1.Center := True 要裁剪位图,您需要这样的代码: proce
8 2024-04-01
编程技术问答社区
如何正确实现TBitmap的扫描线访问?
我正在尝试根据 on embarcadero上的文章for y := 0 to n do begin line := bitmap.scanline [y]; for x := 0 to n do line [x] := value; 我以前已经实施过.我注意到访问扫描线需要相对较大的时间,上面提到的文章为此提供了解决方案.我无法正确实施.我的代码是: unit SCTester; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ExtCtrls; type TRGBQuad = packed record b: uInt8; g: uInt8; r: uInt8; alpha: uInt8; end; // Record: TQuad // // Override t
8 2024-03-31
编程技术问答社区
EIPHTTPProtocolExceptionPeer异常,使用PutBlock的字节数组全部设置为0
使用delphi XE2 Update 3我在将零字节的块上传到Azure时遇到问题.当我说零字节时,我的意思是一个字节数组,每个元素设置为零(不是零长度). 例如: var ConInfo: TAzureConnectionInfo; RespInfo: TCloudResponseInfo; BlobService: TAzureBlobService; Content: TBytes; MD5: String; Hasher: TIdHashMessageDigest5; begin ConInfo:=TAzureConnectionInfo.Create(self); ConInfo.AccountName:='YOUR ACCOUNT NAME'; ConInfo.AccountKey:='YOUR ACCOUNT KEY'; ConInfo.Protocol:='http'; BlobService:=TAzureBl
12 2024-03-24
编程技术问答社区
在音频设备连接/断开时获得自动通知?
每当用户连接或断开音频设备时,是否可以自动通知? 解决方案 在Vista+中可以使用核心音频 当immnotificationclient接口提供通知 在状态或 端点设备的属性更改,或者发生更改时 分配给端点设备的默认角色. 处理WM_DEVICECHANGE和/或轮询是Odler OS版本中的解决方案. 其他解决方案 要接收有关音频设备插头的通知,请按照以下步骤操作: 使用此MSDN链接从ImmnotificationClient接口派生类: 使用此MSDN链接创建设备枚举对象: httpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ://social.msdn.microsoft.com/forums/windowsdesktop/en-us/610aacff-062e-4453-8437-8437-01f038b07/jack-detection-detection
12 2024-03-19
编程技术问答社区
如何使我的应用程序的声音静音?
我有一个声音的应用程序.我有一个全球属性可以使声音静音.问题是,有很多不同的东西可以使声音发出声音,我讨厌通过不同的班级类型迭代,然后静音/静音他们的声音.取而代之的是,我正在寻找一种在全球应用程序级别上静音声音的方法.我也不是说整个系统卷都静音. 一种情况:在Windows 7中,您可以打开音量混合器并调整单个应用程序的卷.尽管我不打算更改此实际特定值(我知道它是Windows 7的特定值),但我想一次更改应用程序中所有内容的卷.我还需要能够使应用程序中所有内容的声音完全静音.我需要这种能力与Windows XP及以上兼容.我假设它将涉及Windows API调用,但我不知道要做什么. 解决方案 您在XP上不可能要求什么; OS根本不支持每个应用卷级别. 您可以通过创建一个设置类来完成所需的东西,该类别可以保留SoundActive: Boolean或PlaySounds: Boolean或类似内容之类的东西.将其放置在自己的单元中,并具有创建其实例的初始化部分,以
14 2024-03-19
编程技术问答社区
Delphi/ASM代码与64位不兼容?
我有一些用于OpenGL的示例源代码,我想编译一个64位版本(使用Delphi XE2),但是有一些ASM代码无法编译,我对ASM一无所知.这是下面的代码,我将两个错误消息放在失败的行上... // Copy a pixel from source to dest and Swap the RGB color values procedure CopySwapPixel(const Source, Destination: Pointer); asm push ebx //[DCC Error]: E2116 Invalid combination of opcode and operands mov bl,[eax+0] mov bh,[eax+1] mov [edx+2],bl mov [edx+1],bh mov bl,[eax+2] mov bh,[eax+3] mov [edx+0],bl mov [edx+3],bh pop eb
8 2024-03-17
编程技术问答社区
如何在Delphi中把一个文件读成一个字节数组?
我试图将文件读取到delphi xe2中的字节数组中. 这是我当前的代码: function FileToBytes(const AName: string; var Bytes: TBytes): Boolean; var Ms: TMemoryStream; begin Result := False; if not FileExists(AName) then Exit; Ms := TMemoryStream.Create; try Ms.LoadFromFile(AName); if Ms.Size > 0 then begin Ms.Position := 0; MS.ReadBuffer(Bytes[0], Ms.Size); Result := True; end; finally Ms.Free; end; end; procedure runF
4 2024-03-06
编程技术问答社区
哪些语言元素可以使用Delphi的属性语言功能进行注释?
delphi 2010引入了自定义属性,可以将其添加到类型的声明和方法中.对于哪些语言元素可以使用自定义属性? 我到目前为止发现的示例包括类声明,字段和方法. (和AFAIK通用类不支持自定义属性). 基于本文,属性可用于 类和记录字段和方法 方法参数 属性 非本地枚举声明 非本地变量声明 还有其他语言元素可以放置属性吗? 更新:本文指出可以将自定义属性放置在属性之前: http://francois-piette.blogspot.de/2013/01/usise-custom--attribute-for-data.html 它包含此代码示例: type TConfig = class(TComponent) public [PersistAs('Config', 'Version', '1.0')] Version : String; [PersistAs('Config', 'Description
12 2024-02-26
编程技术问答社区
Delphi自定义动画-碰撞检测
我正在使用自定义绘图/2D动画,我正在尝试弄清楚如何检测移动对象何时与地图中的墙发生碰撞.用户将箭头键放在键盘上以移动对象,并且地图存储为点的数组结构.地图中的墙壁可能是角度的,但没有弯曲的墙壁. 在下面的代码中,在DoMove属性中使用地图结构(FMap: TMap;),如何检测该对象是否与地图中的任何墙碰撞并防止其移动?在DoMove中,我需要阅读FMap(请参阅DrawMap以查看FMap的工作原理),并以某种方式确定对象是否正在接近任何墙并停止它. 我可以做一个双x/y循环迭代每个地图的每个部分之间每个两个点之间的每一个像素. 我想到了对象移动的方向读取像素颜色,如果有任何黑色(从地图线中),请将其视为墙壁.但是最终会有更多的背景自定义绘图,因此读取像素颜色是行不通的. umain.pas unit uMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils
8 2024-02-26
编程技术问答社区
Firemonkey中的GIF动画
我正在尝试使用士气以Firemonkey HD表单显示动画GIF,但我看不到动画的任何方法. 使用vcl.imaging.gifimg不是一个选项,因为类型有所不同. 有人可以提出一种解决此问题的方法,或者可能会在Firemonkey下进行动画gif图像的组件? 我现在找到的唯一方法是: 创建tgifimage实例并加载gif image 通过gif.images循环: a.将当前图像保存到流 b. image1.bitmap.loadfromstream [image1是fmx:pimage] 是否有更聪明的解决方案? 解决方案 您可以使用 tbitmaplistanimation 带有单个图像,该图像在长条带中都有动画的每个框架.例如,如果您的动画具有4帧,并且是32px x 32px,则需要创建一个图像128px宽x 32px,并并排添加每个帧... 然后在表单中添加 timage (您不必加载位图) 添加一个 t
8 2024-02-26
编程技术问答社区
Delphi XE2:在CHM中跳转到一个锚点?
在Delphi XE2程序中,如何跳到CHM帮助文件主题中的锚点?锚具有以下格式(从html helpviewer中的主题页的源提取,显示CHM文件): 我尝试了以下内容: Application.HelpJump('MyTopicName.htm#my_anchor_id'); 不幸的是,这不起作用:它确实跳到了这个主题,而只是到主题的顶部,而不是锚点,这是页面上的几个卷轴. 解决方案 跳到CHM中的锚 使用Delphi2010 -delphixe2 -Windows XP 测试 如何使用Delphi中的CHM文件中跳到锚点. 是的,HTMLHELP()命令可以跳到锚点. HtmlHelp(0,hpPath+'::/Overview.htm#UsingtheMenus>main',HH_DISPLAY_TOPIC,DWORD(nil
26 2024-01-26
编程技术问答社区
如何动态地创建与顶部对齐但在其他对齐的控件之后的控件?
在这种特殊情况下,我正在使用 powerpdf 库动态构建PDF文档,但同样适用于在父控件内部依次在内部动态对齐控件的一般概念.在此库中,TPRPage是包含所有元素控件的基本控件,在这种情况下,是TPRLayoutPanel的顺序实例. 动态添加控件时我要做什么: 创建一个控件(TPRLayoutPanel) 设置控件的父(TPRPage) 将控件对齐到顶部(PRLayoutPanel.Align:= alTop;) 问题是它被迫到达一开始(顶部),而不是页面的末端(底部). 我尝试设置其订单PRLayoutPanel.SendToBack;或PRLayoutPanel.BringToFront,但没有运气. 我如何在父控件中依次动态创建和对齐多个控件?我目前唯一的工作是以相反的顺序添加控件(从头到头),这是不必要的. 这是我的通用函数,在此父母中创建一个对齐控制的每个新实例: function TfrmReport.InsertPanel
12 2024-01-23
编程技术问答社区
没有重复的N个元素的组合,没有使用为...做...。
我想在列表中加载n个数字的组合而无需重复,以输入元素和组. 例如,有4个元素[1,2,3,4],我有: Group 1: [1][2][3][4]; Group 2: [1,2][1,3][1,4][2,3][2,4][3,4]; Group 3: [1,2,3][1,2,4][1,3,4][2,3,4] Group 4: [1,2,3,4] 现在,我已经使用嵌套循环解决了它,例如,在第2组中,我写了: for x1 := 1 to 3 do for x2 := Succ(x1) to 4 do begin // x1, x2 // end 或第3组,我写道: for x1 := 1 to 2 do for x2 := Succ(x1) to 3 do for x3 := Succ(x2) to 4 do begin // x1, x2, x3 //
16 2024-01-22
编程技术问答社区
如何在全局范围内为每个线程自动初始化/取消初始化一些东西?
我有一个带有initialization和finalization的单元.该单元包含一个复杂的对象,该对象在initialization中实例化并在finalization中被破坏.但是,此对象还包含ADO连接.在跨线程中使用此问题时,这是一个问题,因为ADO是com,并且需要为每个线程初始化. 这是我当前处理此全局对象实例的方式: uses ActiveX; ... initialization CoInitialize(nil); _MyObject:= TMyObject.Create; finalization _MyObject.Free; CoUninitialize; end. 这仅在主线程上起作用.任何其他线程都将无法访问它,并且将返回异常CoInitialize has not been called. 我该如何解决此设备线程安全?我将需要一种方法来钩住所创建的任何线程的每个创建/破坏,并且每个线程都需要引用此对象的不同实例.但
12 2024-01-19
编程技术问答社区
有没有什么简单的方法来比较连接字符串而不用自己解析?
我需要能够将两个不同的连接字符串进行比较,并确定它们是否是相同的信息.我不能进行简单的字符串比较,因为这些属性可以不同,但​​仍表示相同的连接. 在我为此写自己的比较之前,已经有可以做到的事情吗? 我已经搜索了一种方式,但我找不到任何东西. 解决方案 您可以使用 you can query you can query you can query IDBProperties IDBProperties IDBProperties IDBProperties/a>在这些非初始化数据源对象上的接口,使您有可能访问给定提供商支持的所有属性. 要获取属性集,您需要使用 IDBProperties::GetProperties 方法.这将返回以下IsSameConnStr函数如果连接字符串相等,则返回true,否则为false.请注意,使用的属性值比较是情况不敏感的,除了 DBPROP_AUTH_PASSWORD 属性,该属性与情况敏感性进行了比较: uses A
4 2024-01-19
编程技术问答社区