在我当前的项目中,我需要使用旧版本的C ++ Builder(5)。
我尝试使用
在TListView上实现拖放拖动代码非常简单:
void __fastcall TFormMain::ListView1MouseMove( TObject *Sender, TShiftState Shift, int X, int Y)
{
if ( Shift.Contains( ssLeft ) )
{
// if ( !dynamic_cast< TControl * >( Sender )->Dragging() )
if ( !static_cast< TControl * >( Sender )->Dragging() )
{
ListView1->BeginDrag( false );
}
}
}
只要我在较新版本的C ++ Builder(例如XE2或XE10)上编译并运行此代码,一切都可以正常工作。但是,当我在C ++ Builder 5或C ++ Builder 6上编译此代码时,ListView控件显示出难看的行为:一旦我开始拖动ListView中的项目之一,就会出现非常严重的闪烁,这使得鼠标光标几乎不可移动。 / p>
现在我的问题:是否可以在将dmManual与MultiSelect结合使用的这些旧版本上实现无闪烁?
其他内容:
以这种方式填充ListView:
void __fastcall TFormMain::ButtonPopulateListViewClick(TObject *Sender)
{
for ( int i = 0; i < 20; ++i )
{
AnsiString Name = System::Sysutils::Format( "Record Nr. %d", ARRAYOFCONST(( i )) );
TListItem *ListItem = ListView1->Items->Add();
ListItem->Data = new Record( Name, i );
ListItem->Caption = Name;
}
}
...这是Record类:
class Record
{
private:
AnsiString Name;
int Value;
public:
Record( AnsiString AName, int AValue ) : Name( AName ), Value( AValue ) {}
AnsiString GetName( void ) { return Name; };
};
编辑:
我知道当我切换到dmAutomatic并使用TListView的OnStartDrag()事件时,闪烁消失了。但是由于其他原因,这不是一个选择,因此也无法回答我的问题。
谢谢!