小编Eri*_*ier的帖子

从sin/cos转换中获得角度

我想反转sin/ cos操作以恢复一个角度,但我无法弄清楚我应该做什么.

我已经使用sincos以弧度为单位的角度来获得x/y向量:

double angle = 90.0 * M_PI / 180.0;  // 90 deg. to rad.
double s_x = cos( angle );
double s_y = sin( angle );
Run Code Online (Sandbox Code Playgroud)

鉴于s_x并且s_y,才可能找回角度?我认为atan2是使用的功能,但我没有得到预期的结果.

math trigonometry angle

18
推荐指数
2
解决办法
2万
查看次数

Delphi的TFrames在重新加载项目时没有保持其大小?

我有一个有很多帧的项目,当我重新加载我的项目时,它们被调整为宽度和高度443x270,或者左右.

我确实在运行时驻留帧,但我希望它们会在设计时创建它们.

我使用非嵌入式,经典的未对接视图.任何人都知道如何让帧在编程会话之间保持其大小?

谢谢!

delphi delphi-2010

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

为什么在优化构建下有两个顺序移动到EAX?

我查看了发布所有优化的发布版本的ASM代码,这是我遇到的内联函数之一:

0061F854 mov eax,[$00630bec]
0061F859 mov eax,[$00630e3c]
0061F85E mov edx,$00000001
0061F863 mov eax,[eax+edx*4]
0061F866 cmp byte ptr [eax],$01
0061F869 jnz $0061fa83
Run Code Online (Sandbox Code Playgroud)

代码很容易理解,它将偏移量(1)构建到表中,将其中的字节值与1进行比较,如果是NZ则进行跳转.我知道我的表的指针存储在$ 00630e3c,但我不知道$ 00630bec来自哪里.

为什么有两个人一个接一个地转向eax?是不是第一个被第二个覆盖了?这可能是缓存优化的事情还是我错过了令人难以置信的明显/模糊的东西?

上述ASM的Delphi代码如下:

if( TGameSignals.IsSet( EmitParticleSignal ) = True ) then [...]
Run Code Online (Sandbox Code Playgroud)

IsSet()是一个内联类函数,并调用TSignalManager的内联IsSet()函数:

class function TGameSignals.IsSet(Signal: PBucketSignal): Boolean;
begin
  Result := FSignalManagerInstance.IsSet( Signal );
end;
Run Code Online (Sandbox Code Playgroud)

信号管理器的最终IsSet如下:

function TSignalManagerInstance.IsSet( Signal: PBucketSignal ): Boolean;
begin
  Result := Signal.Pending;
end;
Run Code Online (Sandbox Code Playgroud)

delphi optimization assembly delphi-10.2-tokyo

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

如何在Delphi 2010中的TTrackBar上设置自定义刻度?

我试图将刻度线样式设置为tsManual,分别将最小和最大位置设置为1和100,并在9,19,79和89处添加刻度,除了控件自动显示的第一个和最后一个之外,没有显示任何刻度.我尝试了其他值,但没有显示任何值.我的代码是:

TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );
Run Code Online (Sandbox Code Playgroud)

有什么建议?我确定我错过了一个重要的细节,文档非常稀疏.这是在Delphi 2010中使用更新4的新空VCL Forms项目.

先感谢您.

delphi vcl trackbar delphi-2010

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

在Delphi XE2中调用"IAudioSessionManager2.GetSessionEnumerator()"的异常

以下代码在Delphi XE2 Win32下编译并在Win 7 64位下运行,在执行"AudioSessionManager2.GetSessionEnumerator"行时会产生以下异常:

"Project22.exe引发异常类$ C0000005,消息'访问冲突位于0x7027edb2:写入地址0x0051ced6'"

我对异常类或它们的含义的了解是缺乏的,所以我不知道异常意味着什么或如何修复它.

以下是引发异常的代码(用于调试代码的断言):

var
  HRES: HRESULT;
  DeviceEnumerator: IMMDeviceEnumerator;
  DefaultDevice: IMMDevice;
  AudioSessionManager2: IAudioSessionManager2;
  Enumerator: IAudioSessionEnumerator;
begin

  CoInitialize( nil );

  HRES := CoCreateInstance( CLSID_MMDeviceEnumerator, nil, CLSCTX_ALL, IID_IMMDeviceEnumerator, DeviceEnumerator );
  Assert( Succeeded( HRES ) );

  HRES := DeviceEnumerator.GetDefaultAudioEndpoint( eRender, eMultimedia, DefaultDevice );
  Assert( Succeeded( HRES ) );

  HRES := DefaultDevice.Activate( IID_IAudioSessionManager2, CLSCTX_ALL, nil, IUnknown( AudioSessionManager2 ) );
  Assert( Succeeded( HRES ) );

  HRES := AudioSessionManager2.GetSessionEnumerator( Enumerator );  // <- EXCEPTION HERE
  Assert( Succeeded( HRES ) );

  [snip] …
Run Code Online (Sandbox Code Playgroud)

delphi core-audio windows-7 delphi-xe2

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

德尔福印刷底漆

我需要为应用程序添加打印功能,我一直在寻找有关打印的信息.逻辑/物理尺寸,dpi,字体缩放等等,因为我以前从未将打印编程到任何应用程序中.

是否有任何网站可以提供有关页面大小,页边距和理解Windows上打印所需的所有其他元素主题的入门知识?我一直在寻找一段时间,但我发现要么是神秘的,要么是岁月......

我一直在玩TPrinter,但我想建立可靠的打印功能,并了解我做得更好.

使用报告解决方案不是一种选择,即使我确信它会更快地提供更好的结果.

printing delphi

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