我一直试图在网上找到一些关于如何使用VID和PID向特定USB设备发送和接收数据(或者似乎被称为帧)的免费和有效代码.
有没有人知道如何在delphi中这样做?
对于德尔福来说,似乎根本就没有这个!
我试图在我的OpenGL渲染场景上叠加图形.
我已经设法让它运行起来但是FPS的下降有点太多了.
我目前正在将GLScene与Graphics32结合使用.
我所做的是将GLScene渲染上下文渲染为位图,将该位图应用于TImageView32,并在TImage32内部进行一些最终的UI触摸.
我用来渲染到位图的代码如下,这也减少了FPS:
procedure RenderToBitmap;
var b: TBitmap;
begin
b:=TBitmap.Create;
b:=GLSceneViewer.Buffer.CreateSnapShotBitmap; //TGLSceneViewer
ImgVwr32.Bitmap.Assign(b); //TImageViewer32
b.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我尝试了一些其他代码(见下文),它给了我一个实时渲染,但我不能修改ImageViewer32的"Bitmap"属性.换句话说:正在渲染GLScene渲染上下文,但没有渲染我自己的图形.代码:
//The following line is put inside the FormCreate call
GLSceneViewer.Buffer.CreateRC(GetDC(ImgVwr32.Handle),false);
Run Code Online (Sandbox Code Playgroud)
如何在渲染上下文之上正确叠加图形,或者复制渲染上下文输出,而不会丢失FPS?
我希望能够限制组件的创建位置.
例如,TMyChild可以是TButton,TMyParent可以是TPanel,当我将MyChild放到其他组件上时,我希望MyChild检查它是否在TMyParent/TPanel中创建.
如果是,那么就好了,如果它不是在TMyParent/TPanel中创建的,那么取消TMyChild创建并显示一条消息,上面写着:"抱歉,MyChild需要在MyParent中创建!".
谢谢!
我正在试验键盘钩子,似乎Alt键(以及其他命令键)没有被钩住,我不知道为什么?
下面是带有一些调试代码的键盘钩子,它打印出 vkCode、scanCode 和 lpChar 读数。
它的工作原理,基本上全键,但不Alt和Ctrl等
function LowLevelKeybdHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
// possible wParam values: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
var info : ^KeybdLLHookStruct absolute lParam;
lpChar : word;
kState : TKeyboardState;
begin
result := CallNextHookEx(kHook, nCode, wParam, lParam);
with info^ do
case WParam of
WM_KEYDOWN : begin
GetKeyboardState(kState);
Form1.Memo1.Text:=Form1.Memo1.Text+'vkCode: '+inttostr(vkCode)+
' scanCode: '+inttostr(scanCode)+
' lpChar: '+inttostr(lpChar)+;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我创建了自己的组件,其中包含TFont以及适当的属性.
该组件在Public声明中具有以下属性
property CaptionFont: TFont read fCaptionFont write SetCaptionFont;
Run Code Online (Sandbox Code Playgroud)
程序SetCaptionFont看起来像这样
procedure TMyComponent.SetCaptionFont(value: TFont);
begin
fCaptionFont := value;
end;
Run Code Online (Sandbox Code Playgroud)
我试图使用以下代码将字体名称和字体大小分配给我的组件:
MyComponent.CaptionFont.Name := fGlobalStandardFontName;
MyComponent.CaptionFont.Size := fGlobalStandardFontSize;
Run Code Online (Sandbox Code Playgroud)
但是,在线路上设置断点时
MyComponent.CaptionFont.Name := fGlobalStandardFontName;
Run Code Online (Sandbox Code Playgroud)
然后单击"Trace Into(F7)"调试按钮,代码跳转到TFont代码并完全忽略SetCaptionFont过程.
我期待调用SetCaptionFont过程.
这里发生了什么?
我注意到TOpenPictureDialog的奇怪行为.
在创建和执行TOpenPictureDialog时,会创建13个线程,当对话框被销毁时,根据Windows活动监视器,线程仍然存在,除了1个线程消失.
为什么会这样?
我使用的代码如下:
var opd: TOpenPictureDialog;
begin
opd := TOpenPictureDialog.Create(self);
opd.Execute;
if opd.FileName = '' then exit;
opd.Free;
begin;
Run Code Online (Sandbox Code Playgroud)
我在Windows 8.1中使用Delphi XE2
所以,我试图从Delphi XE2中的DLL调用一个过程.但程序不会分配.
我试过在互联网上找到几个例子.正在按预期加载DLL.导出正确写入.
一切似乎都很好,但仍然没有成功.
怎么了?
我的代码如下
type
TStarter = procedure; stdcall;
...
fTheHookStart: TStarter;
...
procedure TForm1.LoadHookDLL;
begin
LogLn('Keyboard Hook: Loading...');
// Load the library
DLLHandle := LoadLibrary('thehookdll.DLL');
// If succesful ...
if Handle <> 0 then
begin
LogLn('Keyboard Hook: DLL load OK!');
LogLn('Keyboard Hook: assigning procedure ...');
fTheHookStart := TStarter(GetProcAddress(DLLHandle, 'StartTheHook'));
if @fTheHookStart <> nil then
begin
LogLn('Keyboard Hook: procedure assignment OK!');
LogLn('Keyboard Hook: Starting...');
fTheHookStart;
end
else
begin
LogLn('Keyboard Hook: procedure assignment FAIL!');
FreeLibrary(DLLHandle);
if Handle <> 0 …Run Code Online (Sandbox Code Playgroud) delphi ×7
delphi-xe2 ×2
bitmap ×1
call ×1
components ×1
creation ×1
destruction ×1
dialog ×1
dll ×1
frames ×1
graphics32 ×1
hook ×1
keyboard ×1
opengl ×1
parent ×1
procedure ×1
properties ×1
usb ×1
winapi ×1
windows ×1