小编WeG*_*ars的帖子

如何同时按下多个 TSpeedButton?

我试图在 TFlowPanel 上使用多个 TSpeedButton 来显示用户可以选择的选项列表。这就是我创建这些按钮的方式:

  procedure FillOptions(ButtonPanel: TFlowPanel; Options: TStrings; Action: TNotifyEvent);
  var Option: string;
      Button: TSpeedButton;   
  begin
    for Option in Options do begin
      Button:= TSpeedButton.Create(ButtonPanel);
      Button.Caption := Option;
      Button.Width := Canvas.TextWidth(Option) + 20;
      Button.GroupIndex := 99;
      Button.AllowAllUp := True;
      Button.OnClick := Action;
      Button.Parent := ButtonPanel;
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

问题是我无法选择多个选项。当我单击一个按钮时,它会下降,但之前选择的按钮会上升。

我忘记设置什么以便可以同时按下多个按钮?

谢谢。

delphi delphi-10.4-sydney

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

例程可以知道它运行的单元吗?

函数/过程可以知道它运行的单元/模块(并且可能将其写到文本文件中)吗?
我知道DCU/EXE文件中有很多调试信息,包括可执行代码和源代码/pas代码之间的关联。可以从例程内部访问它吗?

delphi

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

在Application.Initialize之前创建对象可以吗?

在Application.Initialize之前创建一个对象(我自己的类)可以吗?

delphi

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

如何防止在应用程序完成处理之前关闭MDI窗口

我有一个MDI应用程序,我有一个MDI孩子做一些处理(需要10-20秒完成).我发现如果我关闭主应用程序,它会崩溃,因为MDI子项提前关闭(在完成处理之前).

代码是这样的(将所有代码放在这里太复杂了):

mainForm.OnButtonClick
begin
  start data processing;                         <--- 10 seconds
  create MDI child;                              <--- instant
     create visual controls (runtime)            <== 
        display the processed data in MDI child; <== 1 sec
end;
Run Code Online (Sandbox Code Playgroud)

该程序在第3行崩溃.FastMM说"FastMM已经检测到尝试在释放的对象上调用虚方法".显然,MDI孩子已被释放.

怎么预防这个?

delphi

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

FastMM突然报告Graphics32中的内存泄漏

我有一个空项目(它只包含一个表单).如果我将这一行添加到项目'USES GR32_Image;' 并运行应用程序,FastMM显示程序中的泄漏.FastMM设置为完全调试.我的程序中没有代码 - 除了Delphi IDE生成的代码和'使用gr32'行之外.

报告毫无意义.这是完整的日志:http://pastebin.com/Yhev3rJ2
这里是源代码:http://pastebin.com/VjRrRiS8

我以前使用过Graphics32单元而且从来没有遇到过问题.为什么我有此泄漏以及为什么FastMM无法生成正确的报告?

delphi fastmm

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

如何安装Collabnet SubVersion?

有关于如何安装和设置SubVersion服务器的任何文档?并通过网络与Delphi XE一起使用.

换句话说:我已经安装了Delphi XE,Subversion Client和Server.怎么办?我不明白他们是如何工作的.

svn delphi delphi-xe

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

如何防止滚轮选择TStringGrid的最后一行?

我有一个包含多行的TStringGrid,其中我实现了某种"只读"行.更准确地说,我不允许用户点击倒数第二行.如果用户点击最后一行,则没有任何反应; 焦点不会移动到该行的单元格.

我有代码(在KeyDown中),一切顺利.但是,如果用户单击顶行然后使用鼠标滚轮向下滚动,最终焦点将移动到倒数第二行.知道如何防止这种情况吗?

delphi scrollwheel tstringgrid

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

如何执行控制面板中的项目?

我想从控制面板执行一个项目(例如“屏幕分辨率”)。 MS说使用 WinExec 应该很容易。

这些尝试将起作用(打开 CPanel),但紧接着 IDE 将崩溃(在 BorDbk150N.dll 中崩溃):

procedure ProjectTest1;
VAR s: AnsiString;
begin
 s:= 'c:\windows\system32\control.exe Desk.cpl,Settings';
 WinExec(pansichar(s), SW_NORMAL);
end;



procedure ProjectTest2;
VAR
  App        : String;
  Params     : String;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  try
   App    := 'c:\windows\system32\control.exe';
   Params := 'desk.cpl,Settings';
   FillChar(StartupInfo, SizeOf(StartupInfo), 0);
   StartupInfo.cb := SizeOf(StartupInfo);
   if NOT CreateProcess(NIL, PChar(App+' '+Params), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo) then RaiseLastOSError;
  except
    on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如果您有更好的方法,请告诉我。


使用 Delphi XE,Win …

delphi

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

如何在C中创建".log"文件?

我需要使用C创建.log文件.但是,我无法使用通常的方法来创建它.文件已创建但无法写入.谁能解释一下?

 f = fopen("file.log", "w"); 
 fprintf(f, "print this"); 
Run Code Online (Sandbox Code Playgroud)

c

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

如何拆分大型 GUI 的代码?

我有一个带有大型 GUI 的程序。GUI 分为几个选项卡。用于管理 GUI 的代码(例如,一个选项卡包含一个完整的 Windows 资源管理器克隆)非常大。

将如此大的 GUI 拆分为多个文件但又不将 GUI 拆分为多种形式(在运行时)的最佳方法是什么?

delphi user-interface

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