我有一个函数,它生成一个数组作为结果,并希望迭代其结果来执行一些操作:
for MyElm in AFunction(SomeVar) do
begin
//...
end;
Run Code Online (Sandbox Code Playgroud)
因为集合部分是函数的结果,所以确保它只执行一次是很重要的.
问:每次迭代都会执行AFunction吗?
我有一些TRadioButton
在SForm2
和呼叫Form2
从Form1
使用此代码:
procedure TForm1.btnCallForm2Click(Sender:TObject);
begin
Form2.RadioButton2.Checked:= true;
Form2.ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)
如果用户单击btnCallForm2
,Form2
将显示 ,然后用户单击RadioButton3
并关闭表单,然后btnCallForm2
再次单击重新打开它。
现在Form2
再次显示,但RadioButton3
被选中而不是RadioButton2
。
问:这是什么行为,这是一个错误吗?如何设置选中我想要的RadioButton
而不是用户在上一回合选择的内容?
我正在开发一个带套接字编程的聊天程序(Indy in Delphi).
我可以使用哪些安全解决方案来满足其安全性?从用户身份验证(我使用服务器验证用户)和可以使用的数据包安全类型?
我不知道什么可以让我的应用程序容易受到攻击.
某些函数需要一个变量来发送一个值.但有时我不需要该值,也不想定义变量以将其用作函数out
参数.像这样:
procedure test(out SomeVar: string);
begin
//...
end;
Run Code Online (Sandbox Code Playgroud)
我想安全地执行它:
test;
Run Code Online (Sandbox Code Playgroud) 有时某些类方法或字段被IDE标记为错误(红色下划线),但项目已成功编译并执行(无错误或警告).
如果我在这个错误的部分上按住鼠标指针,我得到了这个工具提示:"'TSomeClass'不包含名为'SomeMethod'的成员"或"未声明的标识符'SampleIdentifier'".
这是一种IDE错误还是我错了?
我的TImgView32
表单上有一个(名为CityMap),上面加载了一个图像.现在我创建的层(TBitmapLayer
),并使用画一个圆Canvas.Ellipse
一个的TBitmap32
像下面的变量:
procedure TfrmMain.Button1Click(Sender: TObject);
var
tmpBmp: TBitmap32;
tmpBL: TBitmapLayer;
begin
tmpBL:= TBitmapLayer.Create(CityMap.Layers);
tmpBmp:= TBitmap32.Create;
with tmpBmp do
begin
//Clear;
SetSize(50, 50);
Canvas.Brush.Color := clYellow;
Canvas.Brush.Style:= bsSolid;
Canvas.Pen.Color := clBlue;
Canvas.Pen.Width := 2;
Canvas.Ellipse(Rect(0, 0, 50, 50));
end;
with tmpBL do
begin
Scaled:=true;
Bitmap.DrawMode:=dmBlend;
tmpBL.Bitmap:=(tmpBmp);
//tmpBmp.DrawTo(tmpBL.Bitmap, 0, 0); This line doesn't work! So using above line instead
end;
//...
end;
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
如你所见,问题是恼人的黑色矩形.如何创建这样的结果:
单击ComboBox的三角形图标后会出现一个窗口.我知道这不仅仅是一个像对象一样的面板,因为例如在下面的图片中,它不是主要的形式.
它的类型是什么,我该如何创建这样的东西?
到处都注意到VCL不是线程安全的,我们必须同步访问它.所以它的VCL错误不是线程安全的.
VCL本身如何是线程安全的?
我的应用程序上有一个IdTCPClient,我的防火墙告诉我有关到224.0.0.252:5355的传出连接.在连接属性中,使用的协议是UDP.
我搜索了"224.0.0.252"并发现它是一个IP多播地址(链路本地多播名称解析)
问:为什么IdTCPClient会尝试这样做?
我成功发送消息跨应用程序.但是代码在FMX中不起作用.我可以找到FMX表单,但在dest没有收到消息.
发件人代码:
CDS.dwData:= 0; //Identify message
CDS.cbData:= ByteLength(Str);
CDS.lpData:= PChar(Str);
if DstHandle=0 then
DstHandle := Winapi.Windows.FindWindow(nil, PChar(TargetFormCaption));
if DstHandle<>0 then
begin
Res := SendMessage(DstHandle, WM_COPYDATA, Handle, NativeInt(@CDS));
Result:= True;
end
else
Result:= False;
Run Code Online (Sandbox Code Playgroud)
结果为true但未WMGetData
触发.接收者代码:
procedure WMGetData(var Msg : TWMCopyData) ; message WM_COPYDATA;
...
procedure TForm3.WMGetData(var Msg: TWMCopyData);
begin
Caption:= 'Got something !';
end;
Run Code Online (Sandbox Code Playgroud) 我有一个Modal
发送请求的表单(使用idTCpClient).然后在idTCPServer OnExecute事件中,应该关闭该表单(在接收数据之后).
第一个ShowModal;
并按Close;
预期执行,但第二个close;
不起作用,表单仍然可见.
我btnClose
在表单上放了一个Button()来关闭它.如果我btnClose.Click;
在idTCPServer OnExecute事件中使用,表单不会关闭,但如果我手动点击此按钮,表单将被关闭!
我执行这个:
Procedure btnStart();
begin
Form1.ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)
idTCPServer将执行此操作:
procedure idTCPServerOnExecute(...)
begin
Form1.close //Or for testing purpose: Form1.btnClose.Click;
end;
Run Code Online (Sandbox Code Playgroud) 我有多个后代类共享一个祖先。当我想销毁一个对象时,我不知道实际类型是什么,因为保存实际对象的指针具有祖先类型。
认为它就像您有多个后代 from TButton
,将所有对象保存在 TButton 类型的数组中,现在当您想要销毁对象时,调用TButton(ButtonArray[I]).Destroy
会导致内存泄漏,因为它没有调用后代类型的 Destroy 方法。
我想要一种方法来正确地从祖先 Destroy 方法中销毁后代类。
delphi ×12
indy ×2
delphi-xe2 ×1
delphi-xe6 ×1
firemonkey ×1
graphics32 ×1
ide ×1
layer ×1
oop ×1
radio-button ×1
security ×1
vcl ×1
windows ×1