小编xai*_*aid的帖子

在Delphi中使用VID和PID直接与USB设备进行数据交换

我一直试图在网上找到一些关于如何使用VID和PID向特定USB设备发送和接收数据(或者似乎被称为帧)的免费和有效代码.

有没有人知道如何在delphi中这样做?

对于德尔福来说,似乎根本就没有这个!

delphi usb frames

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

在OpenGL渲染上下文之上叠加图形

我试图在我的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?

delphi opengl user-interface bitmap graphics32

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

创建时约束组件父级

我希望能够限制组件的创建位置.

例如,TMyChild可以是TButton,TMyParent可以是TPanel,当我将MyChild放到其他组件上时,我希望MyChild检查它是否在TMyParent/TPanel中创建.

如果是,那么就好了,如果它不是在TMyParent/TPanel中创建的,那么取消TMyChild创建并显示一条消息,上面写着:"抱歉,MyChild需要在MyParent中创建!".

谢谢!

delphi components creation parent

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

为什么 Alt 键不会触发我的低级键盘挂钩?

我正在试验键盘钩子,似乎Alt键(以及其他命令键)没有被钩住,我不知道为什么?

下面是带有一些调试代码的键盘钩子,它打印出 vkCode、scanCode 和 lpChar 读数。

它的工作原理,基本上全键,但不AltCtrl

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)

delphi keyboard hook winapi

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

属性没有被写入,只能从Delphi XE2中读取

我创建了自己的组件,其中包含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过程.

这里发生了什么?

delphi properties call

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

OpenPictureDialog创建了13个线程,但在Delphi中销毁时不会销毁所有线程

我注意到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 multithreading dialog destruction delphi-xe2

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

在Delphi XE2中从dll调用过程

所以,我试图从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)

windows delphi dll procedure delphi-xe2

-2
推荐指数
1
解决办法
347
查看次数