小编SAM*_*Pro的帖子

for-in循环是否计算其收集部分一次?

我有一个函数,它生成一个数组作为结果,并希望迭代其结果来执行一些操作:

for MyElm in AFunction(SomeVar) do
begin
  //...
end;
Run Code Online (Sandbox Code Playgroud)

因为集合部分是函数的结果,所以确保它只执行一次是很重要的.

问:每次迭代都会执行AFunction吗?

delphi

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

当表单再次显示时,单选按钮保存上次检查而不是所需的检查

我有一些TRadioButton在SForm2和呼叫Form2Form1使用此代码:

procedure TForm1.btnCallForm2Click(Sender:TObject);
begin
  Form2.RadioButton2.Checked:= true;
  Form2.ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)

如果用户单击btnCallForm2Form2将显示 ,然后用户单击RadioButton3并关闭表单,然后btnCallForm2再次单击重新打开它。

现在Form2再次显示,但RadioButton3被选中而不是RadioButton2

问:这是什么行为,这是一个错误吗?如何设置选中我想要的RadioButton而不是用户在上一回合选择的内容?

delphi radio-button

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

聊天程序.我可以使用哪些安全解决方案?

我正在开发一个带套接字编程的聊天程序(Indy in Delphi).

我可以使用哪些安全解决方案来满足其安全性?从用户身份验证(我使用服务器验证用户)和可以使用的数据包安全类型?

我不知道什么可以让我的应用程序容易受到攻击.

delphi security indy

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

绕过功能"输出"参数

某些函数需要一个变量来发送一个值.但有时我不需要该值,也不想定义变量以将其用作函数out参数.像这样:

procedure test(out SomeVar: string);
begin
   //...
end;
Run Code Online (Sandbox Code Playgroud)

我想安全地执行它:

test; 
Run Code Online (Sandbox Code Playgroud)

delphi

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

为什么IDE有时会将类方法或字段标记为错误(红色下划线)

有时某些类方法或字段被IDE标记为错误(红色下划线),但项目已成功编译并执行(无错误或警告).

如果我在这个错误的部分上按住鼠标指针,我得到了这个工具提示:"'TSomeClass'不包含名为'SomeMethod'的成员"或"未声明的标识符'SampleIdentifier'".

这是一种IDE错误还是我错了?

ide delphi

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

在图层中绘制透明椭圆

我的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)

结果是这样的:

目前的结果

如你所见,问题是恼人的黑色矩形.如何创建这样的结果:

期望的结果

delphi layer graphics32

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

Delphi:单击ComboBox后会出现什么类型的窗口

单击ComboBox的三角形图标后会出现一个窗口.我知道这不仅仅是一个像对象一样的面板,因为例如在下面的图片中,它不是主要的形式.

它的类型是什么,我该如何创建这样的东西?

在此输入图像描述

delphi

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

Delphi:为什么VCL不是线程安全的?怎么会这样?

到处都注意到VCL不是线程安全的,我们必须同步访问它.所以它的VCL错误不是线程安全的.

VCL本身如何是线程安全的?

delphi multithreading vcl thread-safety

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

IdTCPClient有时连接到224.0.0.252:5355

我的应用程序上有一个IdTCPClient,我的防火墙告诉我有关到224.0.0.252:5355的传出连接.在连接属性中,使用的协议是UDP.

我搜索了"224.0.0.252"并发现它是一个IP多播地址(链路本地多播名称解析)

问:为什么IdTCPClient会尝试这样做?

在此输入图像描述

delphi indy delphi-xe2

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

Delphi:SendMessage不发送到FMX

我成功发送消息跨应用程序.但是代码在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)

windows delphi firemonkey

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

通过事件关闭模态表单不起作用

我有一个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)

delphi

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

通过调用祖先类的 destroy 方法释放对象

我有多个后代类共享一个祖先。当我想销毁一个对象时,我不知道实际类型是什么,因为保存实际对象的指针具有祖先类型。

认为它就像您有多个后代 from TButton,将所有对象保存在 TButton 类型的数组中,现在当您想要销毁对象时,调用TButton(ButtonArray[I]).Destroy会导致内存泄漏,因为它没有调用后代类型的 Destroy 方法。

我想要一种方法来正确地从祖先 Destroy 方法中销毁后代类。

delphi oop delphi-xe6

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