由于就VCL而言,TTabSheets不是表单的父级(不想使用动态RTL和其他语言的插件),我必须手动处理调整大小.我这样做如下:
var
ChildHandle : DWORD;
begin
If Assigned(pcMain.ActivePage) Then
begin
ChildHandle := FindWindowEx(pcMain.ActivePage.Handle, 0, 'TfrmPluginForm', nil);
If ChildHandle > 0 Then
begin
SetWindowPos(ChildHandle, 0, 0, 0, pcMain.ActivePage.Width, pcMain.ActivePage.Height, SWP_NOZORDER + SWP_NOACTIVATE + SWP_NOCOPYBITS);
end;
end;
Run Code Online (Sandbox Code Playgroud)现在,我的问题是当应用程序调整大小时,TGroupBox中的所有TGroupBox和TLabel都会闪烁.不在TGroupboxes内的TLabel很好,不会闪烁.
我试过的事情:
有任何想法吗?
我正在使用对象的Key和删除标记的VersionID尝试删除标记的deleteObject请求.
由于CORS,浏览器(Chrome 34.0.1847.11)向以下网址发送OPTIONS预检请求:http://bucket.s3-us-west-2.amazonaws.com/Folder/File.ext?versionId = 0123456789
Amazon S3使用以下XML主体响应400(错误请求):
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidArgument</Code>
<Message>This operation does not accept a version-id.</Message>
<ArgumentValue>0123456789</ArgumentValue>
<ArgumentName>versionId</ArgumentName>
<RequestId>12345</RequestId>
<HostId>1122334455</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
因为XMLHttpRequest返回400(错误请求),所以DELETE请求永远不会被执行.我的印象是AWS没有正确处理选项请求.如果有解决方法,那就太棒了!
我当前的CORS策略是:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
仅供参考:我正在使用AWS SDK for JS 2.0.0-rc10
先感谢您.
编辑1:我尝试添加,<AllowedMethod>OPTIONS</AllowedMethod>但亚马逊返回Found unsupported HTTP method in CORS config. Unsupported method is OPTIONS
编辑2:
选项请求/响应标头:
Remote Address: *********:443
Request URL: https://bucket.s3-us-west-2.amazonaws.com/path/to/file_name?versionId=0123456789
Request Method: OPTIONS
Status Code: …Run Code Online (Sandbox Code Playgroud) javascript xmlhttprequest amazon-s3 amazon-web-services cors
一些背景(TLabel和TGroupbox Captions Flicker on Resize的延续):
对于这种"插件"类型的应用程序,我似乎遇到了很多新问题(但很棒的学习经历).
因此,我目前的努力是尝试使用一个插件,该插件不会插入到TTabSheet中,但会在表单上直接调整大小并对齐.
由于这可以更容易用图片解释:
现在我可以手动进行对齐和调整大小,但我宁愿让VCL对齐程序(alClient,alTop等)为我做.这样我就不必考虑在其表单上设置插件对齐.
在查看VCL源代码后,我开始逐步调整对齐代码及其调用方式.基本上,当TControl获得WM_RESIZE时,它将:
所以我的思维过程是,如果我创建一个新的TWinControl,将它的句柄设置为插件窗体(窗口)句柄,并将其插入FControls列表中,并正确对齐它应该为我工作.
我当然在这里,所以它失败了.我甚至在退出应用程序时获得了一个关于无效窗口句柄的AV.我的猜测是我创建的TWinControl试图释放不再存在的插件窗体(窗口)的句柄.
我尝试过的:
procedure AddHandleToControlList(AHandle: DWORD; Align: TAlign);
var
NewWinControl : TWinControl;
begin
NewWinControl := TWinControl.Create(frmMain);
NewWinControl.WindowHandle := AHandle;
NewWinControl.Align := Align;
NewWinControl.Width := frmMain.ClientWidth;
NewWinControl.Height := 30;
NewWinControl.Parent := frmMain;
end;
procedure AddHandleToControlList(AHandle: DWORD; Align: TAlign);
var
NewWinControl : TWinControl;
begin
NewWinControl := TWinControl.Create(frmMain);
NewWinControl.WindowHandle …Run Code Online (Sandbox Code Playgroud) 好的,所以我试图在Direct X游戏上为一些额外的按钮做一些叠加.
我在这里找到了一个很好的覆盖的c ++示例:http://www.gamedev.net/topic/359794-c-direct3d-hooking-sample/
所以我开始将它转换为Delphi.通过一些日志记录,我可以看到它在正确的进程上启动钩子并正确挂钩Direct3DCreate9().
下一步成功创建TMyDirect3D9.但是这个过程从这里崩溃了.
我的有根据的猜测(基于Ollydbg中的一些调试)当我通过挂钩的Direct3DCreate9()将MyDirect3D9返回到原始进程并且它尝试调用其中一个类(接口)函数时,它失败了.
代码如下.如果我能提供任何其他信息以帮助告诉我.
主DLL:
library LeagueUtilityBox;
{$R *.res}
{$DEFINE DEBUG}
uses
Windows,
APIHijack in 'APIHijack.pas',
Direct3D9 in '..\DirectX 9.0\Direct3D9.pas',
uSharedMem in '..\Misc\uSharedMem.pas',
MyDirect3D9 in 'MyDirect3D9.pas',
MyDirect3DDevice9 in 'MyDirect3DDevice9.pas',
{$IFDEF DEBUG}
SysUtils,
uLog in '..\Misc\uLog.pas',
{$ENDIF}
uMisc in 'uMisc.pas';
var
SharedMem : TSharedMem;
D3DHook: SDLLHook;
hHook : DWORD;
MyDirect3D9 : TMyDirect3D9;
function GetTargetProcess: String;
const
KeyBase : DWORD = HKEY_CURRENT_USER;
KeyLocation : String = 'Software\LeagueUtilityBox';
var
RegKey : HKEY;
TargetProcess : Array[0..511] Of …Run Code Online (Sandbox Code Playgroud) 所以,我的最终游戏是通过客户区内的添加/删除按钮来列出项目(如vsReport中的TListView).
例如:
|----------------|
|Old Item 1 X |
|Old Item 2 X |
|Add new item... |
| |
|----------------|
Run Code Online (Sandbox Code Playgroud)
如果您知道某个组件在没有这些额外工作的情况下执行此操作,请告诉我们!
所以我挑选了一个红色的"X",并使用TJvTransparentButton(Jedi Components - JVCL)来显示它.它处理按下/未按下状态,仅显示图像.我原来使用了TButton,但我并不需要围绕字形的所有绒毛.
现在,我将图像按钮保存在与每个节点关联的记录中.
代码如下:
procedure TfrmMain.AddNewAccount(const Username, Password: String);
var
Data : PTreeData;
XNode : PVirtualNode;
Begin
XNode := vstAccounts.AddChild(nil);
If vstAccounts.AbsoluteIndex(XNode) > -1 Then
begin
Data := vstAccounts.GetNodeData(Xnode);
Data^.Column0 := Username;
Data^.Column1 := '';
Data^.DeleteButton := TJvTransparentButton.Create(nil);
With Data^.DeleteButton Do
begin
Parent := vstAccounts;
Left := 0;
Top := 0;
Width := 16;
Height := 16; …Run Code Online (Sandbox Code Playgroud) tldr; 在底部.
好的,这又是一个有趣的问题,我正在寻找一个有趣而有趣的解决方案.
我目前的项目涉及非常模块化,这意味着程序功能将根据不同的模块轻松更改,程序将适应.
所以我开始使用典型的路由,即使用DLL插件.现在这只是正常的方式,我想在盒子外思考一下.
我的计划中包含的模块是长时间运行的广告系列,可能需要数周才能完成,并且一次会运行许多广告系列.所以稳定性是个大问题,所以我想到了谷歌Chrome的功能.进程,而不是DLL或线程.
所以我有一个框架,我需要一种方法来获取有关每个模块(现在是EXE)的一些信息.现在,对于我的DLL框架,我正在导出一个"注册"功能,可以填写一些信息.
所以我想,自己,EXE可以导出函数,让我们看看它是否真的有效......但事实并非如此.我做了一些关于Windows如何处理这些事情的研究,我不喜欢动态地攻击PE头(但它是开箱即用的那种想法我想要的).
我打算使用命名管道和CLI参数在主程序和模块exe之间传输数据.我可以以寄存器的方式使用它,但我想在这里其他人的想法.
tldr:我使用的是EXE而不是DLL的插件.寻找一种方法来轻松导出一个时间信息,如导出的"注册"功能将在DLL上.思考?