我有一个存储在TStringList中的字符串列表,我想将其转换为由逗号分隔的字符串,我使用以下代码
channelList: TStringList;
aCurrentChannel := Stringreplace(channelList.Text,Char(13)+Char(10),',',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
但最后一个角色来了,就像1,2,无论如何都要避免这种情况?
我正在解析数据集并为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)
为什么要添加重复项?
我有一个复选框,将在运行时启用/禁用.我只想显示启用/禁用的不同工具提示.我正在考虑重写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不满意.我做错了什么?
我上课了
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)
这是正确的方法吗?
我想在C中开发一个客户端,它使用RTMFP与Flash palyer进行流媒体视频通信.我无法获得有关是否可能的更多信息.我已经研究了Cumulus项目,但我对RTMFP规范的了解并不多.
如果有一个解决方法,如在Flex代码周围写一个C包装也没关系.但我不知道是否有可能.
任何建议都会有很大帮助.
谢谢.此致,Jeeva
我的应用程序中正在运行线程。在线程内部,我正在等待自动重置事件退出。我要确保在使用事件后关闭事件的句柄。我有两个选择。
CloseHandle后立即调用事件SetEventCloseHandle后WaitForSingleObject请建议我哪种方法是正确的。
我有一个约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),它将返回一个新字符串,但不保证旧字符串将从内存中删除,因此无法保证大小将减少.这是真的吗?如果有的话还有其他选项可以在不分配额外内存的情况下反转字符串吗?
我有一堂课
class Sample
{
string strName;
};
Run Code Online (Sandbox Code Playgroud)
如果我使用创建Sample *obj = new Sample()字符串的位置为示例创建一个对象strName?它在堆栈中还是在堆中?
我有以下代码来围绕货币
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的新手,所以请帮助我.
我有一个已禁用调整大小的现有表单.我尝试将属性Border Style更改为bsSizeable,将边框图标更改为[biSystemMenu,biMinimize,biMaximize].我能够调整大小,但窗体内的控件没有相应的大小.任何帮助,将不胜感激.
delphi ×6
delphi-xe ×3
c++ ×2
tstringlist ×2
c# ×1
delphi-xe4 ×1
flash ×1
forms ×1
mfc ×1
rounding ×1
rtmfp ×1
truncation ×1
winapi ×1