我尝试在编辑和调试期间使用类似的布局.运行程序时,我的结构和对象检查器消失了.我确实创建了自己的桌面速度设置,同时也将调试桌面设置为它,但是一旦程序运行结构,obejct检查器就会消失.我怎么能防止这种情况?
与此相关的问题:编辑菜单也会发生变化.右键单击过程名称将生成一个弹出菜单,其中第一个项目为"查找声明".调试时,第一项是"关闭页面".我发现查找声明项是一种快速查找代码的方法.除此之外,丢失一个代码是令人沮丧的,因为你在问题上单击"否"来保存信息(我知道,这是我的错,但菜单不应该在我看来改变).
谢谢,
阿诺德
我想通过一个过程测试许多矩阵。每个矩阵都应作为矩阵传递,例如:
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)
因此,我得到了矩阵的错觉和可读性。谢谢你们!
我需要生成一个梯度位图,显示用户选择的两种颜色之间的彩虹渐变.生成彩虹很容易.我从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) 我的应用程序产生了几种独立的形式.一旦创建应用程序忘记了它们.所有操作都以该表单本身处理.当应用程序关闭时,表格也会关闭,我认为是RTS.这很好,除了OnClose和OnDestroy事件都没有被触发,因此发生内存泄漏.我可以管理哪些表格(如我现在所做)但实际上应用程序必须完全忘记这些表单.
有没有办法检测表单内部,而不是应用程序主表单,应用程序正处于关闭状态?
我的应用程序使用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) 我希望有一段时间可以在Android目标的Delphi XE5中播放MIDI.我以前的几个问题与这个"任务"有关:-).我已向embarcadero提交了两个请求:#119422为TMediaPlayer添加MIDI支持,#119423为Firemonkey添加MIDI框架,但这没有帮助.我终于成功了.据我所知,有更多的人在Android上寻找MIDI我发布这个问题的答案文件.
为了编写一个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)
虽然这种结构比我之前尝试的一些东西要好得多,但它仍然对某些事件非常敏感.令我惊讶的是,每次显示提示都会出现断断续续的情况.为什么简单的提示会导致时间关键线程中断?当然我可以把它关掉,但哪些令人讨厌的惊喜还在等着我?
当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未被触发.这迫使我立即在平板电脑上测试代码,这需要一些时间.可怜.
我试试这个:
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字符串,用/替换了\,用"而不是",但现在我的选项用完了.我确定文件存在.有人知道吗?
我想将图像调整为64*64的预定义位图,无论其当前尺寸和宽高比如何.我尝试Bitmap.ReSize但保持纵横比.我试过TImage并设置WrapMode为iwStretch.这在某种程度上起作用,因为它确实按照我想要的方式重新缩放图像,但我找不到一种方法来获取图像TImage.该Bitmap属性TImage仍包含原始位图.
有人知道如何从TImage屏幕上显示的图像中获取图像吗?或者甚至更好:指向一个能够进行这种调整和拉伸的功能?如果有,我错过了.
谢谢你的时间.
delphi ×9
android ×2
delphi-xe5 ×2
android-ndk ×1
bitmap ×1
button ×1
colors ×1
events ×1
firemonkey ×1
gradient ×1
ide ×1
image ×1
midi ×1
postgresql ×1
tform ×1