小编Jee*_*eva的帖子

使用分隔符将TStringlist转换为字符串

我有一个存储在TStringList中的字符串列表,我想将其转换为由逗号分隔的字符串,我使用以下代码

channelList: TStringList;
aCurrentChannel :=  Stringreplace(channelList.Text,Char(13)+Char(10),',',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)

但最后一个角色来了,就像1,2,无论如何都要避免这种情况?

delphi tstringlist

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

从TStringList中删除重复项

我正在解析数据集并为TStringList我想要避免重复项分配值.我使用以下代码但仍插入重复项.

  channelList := TStringList.Create;
  channelList.Duplicates := dupIgnore;
  try
    dataset.First;
    while not dataset.EOF do
    begin
        channelList.Add(dataset.FieldByName('CHANNEL_INT').AsString)  ;
        dataset.Next;
    end;
Run Code Online (Sandbox Code Playgroud)

为什么要添加重复项?

delphi tstringlist

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

如何显示禁用控件的提示?

我有一个复选框,将在运行时启用/禁用.我只想显示启用/禁用的不同工具提示.我正在考虑重写OnMouseEnter事件并在那里处理它,但只有在启用控件时才会调用OnMouseEnter.我怎么可能实现这种行为?任何帮助,将不胜感激.

我试图处理表单的OnMouseMove并执行类似的操作

procedure Tdlg.pnlTopMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);
var
  point: TPoint;
  checkBoxCursorPos: TPoint;
begin
  inherited;
  point.X := X;
  point.Y := Y;
  checkBoxCursorPos := chkBx.ScreenToClient(point);
  if (PtInRect(chkBx.ClientRect, checkBoxCursorPos)) then
  begin
    if(chkBx.Enabled) then
      chkBx.Hint := 'Enabled'
    else
      chkBx.Hint := 'Disabled' ;

    Application.ShowHint := True;
  end;

end;
Run Code Online (Sandbox Code Playgroud)

但条件PtinRect不满意.我做错了什么?

delphi

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

如何在delphi XE和XE4中初始化对象

我上课了

type
  TLoadOption = class
  private
    FAutoSearch: Boolean;
  public
    property AutoSearch: Boolean read FAutoSearch write FAutoSearch;
  end;
Run Code Online (Sandbox Code Playgroud)

在其中一个函数中,我在堆栈中创建类的对象

procedure MyView.InitializeForm(const aMsg: MyMsg);
//---------------------------------------------------------------------------
var
  Options: TLoadOption;
begin

  if aMsg.OptionalObject <> nil then
   Options := aMsg.OptionalObject as TLoadOption;

  if Assigned(Options) and Options.AutoSearch then
    DoRefresh;
end;
Run Code Online (Sandbox Code Playgroud)

我没有在aMsg中传递任何内容,所以理想情况下没有设置选项.

在Delphi XE中默认选项设置为nil,因此不会调用此DoRefresh但是当我在Delpi XE4中执行相同的代码时,选项会使用一些随机值进行初始化,并且AutoSearch始终变为true,这会导致调用此DoRefresh函数,这是不需要.

我想知道是否有任何编译器选项将默认值设置为未初始化的变量.我现在唯一的解决方案就是这样

 procedure MyView.InitializeForm(const aMsg: MyMsg);
    //---------------------------------------------------------------------------
    var
      Options: TLoadOption;
    begin
      Options := nil;

      if aMsg.OptionalObject <> nil then
       Options := aMsg.OptionalObject as TLoadOption;

      if Assigned(Options) and Options.AutoSearch then
        DoRefresh;
    end;
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

delphi delphi-xe delphi-xe4

6
推荐指数
3
解决办法
554
查看次数

在C中实现RTMFP客户端

我想在C中开发一个客户端,它使用RTMFP与Flash palyer进行流媒体视频通信.我无法获得有关是否可能的更多信息.我已经研究了Cumulus项目,但我对RTMFP规范的了解并不多.

如果有一个解决方法,如在Flex代码周围写一个C包装也没关系.但我不知道是否有可能.

任何建议都会有很大帮助.

谢谢.此致,Jeeva

flash actionscript-3 rtmfp

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

调用SetEvent后调用CloseHandle

我的应用程序中正在运行线程。在线程内部,我正在等待自动重置事件退出。我要确保在使用事件后关闭事件的句柄。我有两个选择。

  1. 调用CloseHandle后立即调用事件SetEvent
  2. 拨打电话CloseHandleWaitForSingleObject

请建议我哪种方法是正确的。

c++ winapi mfc multithreading

5
推荐指数
2
解决办法
2350
查看次数

在不创建额外内存的情况下反转字符串

我有一个约1mb大小的字符串.要求是反转字符串而不分配另一个大小为1 MB的临时字符串.我尝试了以下代码

string name = "abcde";

string target = "";
for(int i = name.Length - 1; i >=0; i--)
{
    target += name[i];
    name = name.Remove(i);                
    int n = name.Length;
}
Run Code Online (Sandbox Code Playgroud)

但我的朋友说,如果我们使用该函数name.Remove(i),它将返回一个新字符串,但不保证旧字符串将从内存中删除,因此无法保证大小将减少.这是真的吗?如果有的话还有其他选项可以在不分配额外内存的情况下反转字符串吗?

c#

4
推荐指数
2
解决办法
2823
查看次数

类中的成员变量在哪里分配?

我有一堂课

class Sample
{
   string strName;
};
Run Code Online (Sandbox Code Playgroud)

如果我使用创建Sample *obj = new Sample()字符串的位置为示例创建一个对象strName?它在堆栈中还是在堆中?

c++

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

四舍五入的货币

我有以下代码来围绕货币

function MyRound(value :currency) : integer;

begin
  if value > 0 then
    result := Trunc(value + 0.5)
  else
    result := Trunc(value - 0.5);
end;
Run Code Online (Sandbox Code Playgroud)

到目前为止它运作良好,我现在的问题是,如果我想要像999999989000.4这样的货币,它给出负值,因为Truc接受int而MyRound也返回int.

我可能的解决方案是将货币转换为字符串并获取字符串.并将字符串转换回货币.这是一种正确的方法吗?我是delpi的新手,所以请帮助我.

delphi rounding truncation delphi-xe

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

启用表单大小调整

我有一个已禁用调整大小的现有表单.我尝试将属性Border Style更改为bsSizeable,将边框图标更改为[biSystemMenu,biMinimize,biMaximize].我能够调整大小,但窗体内的控件没有相应的大小.任何帮助,将不胜感激.

forms delphi delphi-xe

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