我在我的表单上有一个ListView:TListview,并且,我添加了很多值(大约25k TListViewItem),它工作得非常快,但是当我调用Listview.Clear时,程序冻结.我用调试器检查它,它不会步那条线.
我的问题是:我如何解决我的问题?如果可以在不到一秒的时间内创建这么多项目,为什么删除它们需要永远(我等了5分钟以上)?
我的计划是创建一个函数来检索对象的最高元素,可以说是数组的上限.换句话说,我正在尝试获取函数High()的代码.
到目前为止我尝试了什么:
function High2(var X):integer;
begin
Result:=Pbyte(Cardinal(@X)-1)^-1;
end;
Run Code Online (Sandbox Code Playgroud)
上面的函数应该读取对象中第一个元素(数组/字符串)的位置之前的值(长度)并返回它减少1.但是它不能在静态或动态数组类型上检索正确的结果.
如何在Pascal中重新创建High()函数?
我在一个项目组中有两个共享相同单元的项目(大多数是全部).我使用这两个项目来测试我写的东西.
问题:当我更改两个项目使用的单元并运行当前项目时,另一个使用该单元中的旧代码(因为它未编译).
我知道编译所有项目的唯一可能性是通过系统菜单(Projects-> Build all projects).
目前,当其中一个项目运行时(使用delphi调试器),其他项目的可执行文件将被执行,但不会被编译.
如何用热键编译两个项目(比如一个项目的Shift+ F9)?
在C++中,控制台应用程序可以在其Winmain过程中使用消息处理程序.如下所示:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
#ifdef _DEBUG
CreateConsole("Title");
#endif
hwnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(IsDialogMessage(hwnd, &msg))
continue;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这使得进程在控制台窗口收到WM_QUIT消息之前不会关闭.我不知道如何在delphi中做类似的事情.
我的需求不仅仅是消息处理程序,而是一个轻量级的"技巧",使控制台应用程序像使用线程的GUI应用程序一样工作.因此,例如,可以在没有控制台应用程序终止进程的情况下处理两个Indy TCP服务器.
我的问题:如何实现这一目标?
delphi console multithreading console-application delphi-2009
我不止一次被告知Delphi比static更好地处理动态类.使用以下代码:
type Tsomeclass=class(TObject)
private procedure proc1;
public
someint:integer;
procedure proc2;
end;
var someclass:TSomeclass;
implementation
...
initialization
someclass:=TSomeclass.Create;
finalization
someclass.Free;
Run Code Online (Sandbox Code Playgroud)
而不是
type Tsomeclass=class
private class procedure proc1;
public
class var someint:integer;
class procedure proc2;
end;
Run Code Online (Sandbox Code Playgroud)
我正在处理的项目中有90%的类只需要一个实例.我真的必须使用第一种方法来使用这些类吗?是否更好地优化,由Delphi处理?
对不起,我没有理由支持这个假设,但我想要专家的意见.
提前致谢!
我想在C++中调用超类(父类)的继承函数.
这怎么可能?
class Patient{
protected:
char* name;
public:
void print() const;
}
class sickPatient: Patient{
char* diagnose;
void print() const;
}
void Patient:print() const
{
cout << name;
}
void sickPatient::print() const
{
inherited ??? // problem
cout << diagnose;
}
Run Code Online (Sandbox Code Playgroud) 我有一个解决方案和一些项目.然后是我刚制作的Utils文件并添加到解决方案中.但是当我想从解决方案中的任何项目中使用此文件时,它将被复制到项目的文件夹中.
因此,如果我在10个项目中使用它,它将被复制10次.如何避免这种情况并使项目在其解决方案的文件夹中搜索该文件?
因此,我使用了动态堆栈,我想编写一个复制构造函数,该构造函数必须从同一类的另一个实例复制堆栈的数据。我正在尝试编写该函数,但似乎很难。有人可以帮我吗?
template<typename T=int>
class LStack
{
public:
template<typename U=int>
struct elem
{
U con;
elem<U>* link;
}
private:
elem<T>* el;
void Copystack(Lstack const& stack) // HERE
{
elem<T>* last = el;
el->con = stack->con;
while(stack->link != null)
{
var temp = new elem<T>;
temp->con = stack->con;
temp->link = stack->link;
stack = stack->link;
}
}
};
Run Code Online (Sandbox Code Playgroud) void test(int* integers, int n) { ... }
void test(int* integers[], int n) { ... }
Run Code Online (Sandbox Code Playgroud)
有什么不同?它们都是指向 int 的指针,并且可以用作数组。例如,什么时候使用第一个?
前段时间我读过OOP的"约定",但我不确定我是否记得正确.
它说一个方法必须将继承层次结构中最通用的对象作为参数,而返回最后代的对象.
这是真的,如果是的话,任何人都可以解释一下吗?
例:
IList<T> someMethod(IList<T> someList)
{
IList<T> resultList = new List<T>();
... do something with resultList ...
return resultList;
}
Run Code Online (Sandbox Code Playgroud)
根据'约定',上面的方法应该返回List而不是IList?