小编Arn*_*old的帖子

如何使调试布局与桌面布局保持一致

我尝试在编辑和调试期间使用类似的布局.运行程序时,我的结构和对象检查器消失了.我确实创建了自己的桌面速度设置,同时也将调试桌面设置为它,但是一旦程序运行结构,obejct检查器就会消失.我怎么能防止这种情况?

与此相关的问题:编辑菜单也会发生变化.右键单击过程名称将生成一个弹出菜单,其中第一个项目为"查找声明".调试时,第一项是"关闭页面".我发现查找声明项是一种快速查找代码的方法.除此之外,丢失一个代码是令人沮丧的,因为你在问题上单击"否"来保存信息(我知道,这是我的错,但菜单不应该在我看来改变).

谢谢,

阿诺德

ide delphi

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

如何将常数值矩阵作为过程调用的参数传递

我想通过一个过程测试许多矩阵。每个矩阵都应作为矩阵传递,例如:

type TMatrix = array of array of integer;
procedure test_kernel (mat: TMatrix);
....
test_kernel ([[1, 2], [1, 3]]); // <== does not compile
Run Code Online (Sandbox Code Playgroud)

我找不到正确的语法来正确执行此操作(也尝试使用圆括号)。有谁知道如何将常量值矩阵作为过程参数传递?有可能吗?

编辑

由于无法实现,我决定使用:

type TMatrix = array of integer;
procedure test_kernel (rows, cols: integer; mat: TMatrix);
....
test_kernel (2, 2, [1, 2, 
                    1, 3]); 
Run Code Online (Sandbox Code Playgroud)

因此,我得到了矩阵的错觉和可读性。谢谢你们!

delphi multidimensional-array

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

如何创建彩虹渐变的一部分

我需要生成一个梯度位图,显示用户选择的两种颜色之间的彩虹渐变.生成彩虹很容易.我从Wiki获得了下面的代码并略微调整它.它具有快速和简单的优点.

 function TColor_Dialog.GiveRainbowColor (fraction: double): TAlphaColor;
  var
    m: Double;
    r, g, b, mt: Byte;
  begin
    if fraction <= 0 then m := 0 else
    if fraction >= 1 then m := 6
                     else m := fraction * 6;
    mt := (round (frac (m) * $FF));
    case Trunc (m) of
    0: begin
        R := $FF;
        G := mt;
        B := 0;
      end;
    1: begin
        R := $FF - mt;
        G := $FF;
        B := 0;
      end;
    2: begin …
Run Code Online (Sandbox Code Playgroud)

delphi gradient colors

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

应用程序关闭时是否在表单中触发了事件

我的应用程序产生了几种独立的形式.一旦创建应用程序忘记了它们.所有操作都以该表单本身处理.当应用程序关闭时,表格也会关闭,我认为是RTS.这很好,除了OnClose和OnDestroy事件都没有被触发,因此发生内存泄漏.我可以管理哪些表格(如我现在所做)但实际上应用程序必须完全忘记这些表单.

有没有办法检测表单内部,而不是应用程序主表单,应用程序正处于关闭状态?

delphi events tform

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

有没有办法找出TButtonGroup的哪个按钮被点击?

我的应用程序使用TButtonGroup控件.我为每个按钮分配一个事件处理程序:doClick.通过为每个按钮(Pointer (i))分配信息,我可以找出被调用的按钮.这是代码:

procedure TVector_Menu.Synchronize (rows, cols: Int32);
var btn: TGrpButtonItem; 
    i: Int32;
begin
   ButtonGroup.Items.Clear;
   Self.Rows := rows;
   Self.Cols := cols;
   for i := 0 to rows * cols - 1 do
   begin
      btn := Buttongroup.Items.Add;
      btn.Data       := Pointer (i);
      btn.ImageIndex := i;
      btn.OnClick    := doClick;
   end; // for
   Self.ClientHeight :=  4 + rows * ButtonGroup.ButtonHeight;
   Self.ClientWidth  := 22 + cols * ButtonGroup.ButtonWidth;
end; // Synchronize //

procedure TVector_Menu.doClick (Sender: TObject);
var btn: TGrpButtonItem; 
    i, r, c: Int32;
begin …
Run Code Online (Sandbox Code Playgroud)

delphi button

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

在Android上用Delphi实现MIDI

我希望有一段时间可以在Android目标的Delphi XE5中播放MIDI.我以前的几个问题与这个"任务"有关:-).我已向embarcadero提交了两个请求:#119422为TMediaPlayer添加MIDI支持,#119423Firemonkey添加MIDI框架,但这没有帮助.我终于成功了.据我所知,有更多的人在Android上寻找MIDI我发布这个问题的答案文件.

delphi midi java-native-interface android android-ndk

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

如何将此时间关键程序优先于其他线程?

为了编写一个MIDI音序器,我需要一个稳定的脉冲,它调用一个时序例程,该例程具有绝对优先于程序中的任何其他内容,并且优先于计算机中的任何内容.我通过使用TimeSetEvent这样做:

TimeSetEvent (FInterval, 0, TimerUpdate, uInt32 (Self), TIME_PERIODIC);
Run Code Online (Sandbox Code Playgroud)

其中TimerUpdate是一个回调函数,它恢复一个优先级为tpTimeCritical的独立线程,并调用一个例程(FOnTimer)来处理所有MIDI事件.

procedure TThreaded_Timer.Execute;
begin
   if Assigned (FOnTimer) then
   begin
      while not Terminated do
      begin
         FOnTimer (Self);
         if not Terminated then Suspend;
      end; // while
   end; // if
   Terminate;
end; // Execute //
Run Code Online (Sandbox Code Playgroud)

虽然这种结构比我之前尝试的一些东西要好得多,但它仍然对某些事件非常敏感.令我惊讶的是,每次显示提示都会出现断断续续的情况.为什么简单的提示会导致时间关键线程中断?当然我可以把它关掉,但哪些令人讨厌的惊喜还在等着我?

delphi multithreading

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

如何检测Android中程序的终止?

当Windows程序终止时,它会调用OnClose,OnDestroy和析构函数Destroy等事件处理程序.当我想保存一些INI设置时,这些是要去的地方.我为所有这些事件编写了事件处理程序,但是当我终止程序时它们不会被处理.

有没有人知道在Android程序终止时我应该将代码放在哪里?我强烈怀疑这也适用于iOS.

更新

Johan的答案也适用于Android,虽然现实比他的例子稍微复杂一些.好消息是它迫使我进入TApplicationEvents,这是我从未听说过的.按照Embarcadero没有记录的定制,但FMX.Platform的代码足够有趣.定义了三个似乎感兴趣的几个ApplicationEvent:aeEnteredBackground,aeWillBecomeInactive和aeWillTerminate.由于他们没有记录,我推测他们做了他们的名字所建议的:表明已达到背景状态,它将开始进入背景并且它将(非常)很快终止.我修改了约翰的代码如下:

  function TForm2.AppEvent (AAppEvent: TApplicationEvent; AContext: TObject) : Boolean;
  begin
  // do something here for when the app is sent to background
     case AAppEvent of
     (1)   TApplicationEvent.aeEnteredBackground:  ;// Something for OnDeactivated
                                                    // which does not exist
     (2)   TApplicationEvent.aeWillBecomeInactive: if Assigned (OnDeactivate)
                                                      then OnDeactivate (Self);
     (3)   TApplicationEvent.aeWillTerminate:      if Assigned (OnClose)
                                                      then OnClose (Self);
     end; // case
     Result := True; // let iOS/Android know it worked...
  end; // AppEvent //
Run Code Online (Sandbox Code Playgroud)

当我用调试器标记事件1,2和3实验时显示如下:强制应用程序到后台生成一系列事件:2,1,1,2.一旦我得到2,2,1,1, 2,2.如果您的代码应该执行一次,那么请采取预防措施.但更好的是:aeWillTerminate执行它所宣传的内容:它在应用程序终止时发送信号.这样做的时间可能很短暂,我将测试是否足以编写TIniFile.

我在Win32中尝试了这个代码,但这不起作用.AppEvent未被触发.这迫使我立即在平板电脑上测试代码,这需要一些时间.可怜.

delphi android firemonkey delphi-xe5

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

Postgresql找不到copy命令中指定的文件名

我试试这个:

COPY gemeenten 
  FROM 'D:\CBS_woningcijfers_2014.csv'
  DELIMITER ';' CSV
Run Code Online (Sandbox Code Playgroud)

得到这个:

ERROR:  could not open file "D:\CBS_woningcijfers_2014.csv" for reading: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我把反斜杠加倍,尝试了一个E字符串,用/替换了\,用"而不是",但现在我的选项用完了.我确定文件存在.有人知道吗?

postgresql windows-7-x64

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

如何在Firemonkey中拉伸图像?

我想将图像调整为64*64的预定义位图,无论其当前尺寸和宽高比如何.我尝试Bitmap.ReSize但保持纵横比.我试过TImage并设置WrapModeiwStretch.这在某种程度上起作用,因为它确实按照我想要的方式重新缩放图像,但我找不到一种方法来获取图像TImage.该Bitmap属性TImage仍包含原始位图.

有人知道如何从TImage屏幕上显示的图像中获取图像吗?或者甚至更好:指向一个能够进行这种调整和拉伸的功能?如果有,我错过了.

谢谢你的时间.

delphi image bitmap delphi-xe5

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