Bazı testlerden sonra aşağıdakileri buldum, fazladan itme için teşekkürler DiGi. DrawSelection bu çözümle çalışmaz, bu nedenle devre dışı bırakılması gerekir. Ben bunu bir daha düşünmem gerekmediğini düşündüğümden beri bir soydaş yazmamıştım. True
Seti toDisableDrawSelection, toExtendedFocus ve toMultiSelect.
yere uygun Aşağıdaki değişkenler/özelliklerini bildirin:
StartSelectedColumn: integer;
FirstSelectedColumn: integer;
LastSelectedColumn: integer;
Selecting: boolean;
Güncelleme aşağıdaki olaylar:
onkeydown
if (not Selecting) and (Key = VK_SHIFT) then
begin
StartSelectedColumn := vtMain.FocusedColumn;
FirstSelectedColumn := StartSelectedColumn;
LastSelectedColumn := StartSelectedColumn;
Selecting := true;
end;
onkeyup
if Key = VK_SHIFT then
Selecting := false;
Açık
if Selecting then
begin
if column < StartSelectedColumn then
begin
FirstSelectedColumn := column;
LastSelectedColumn := StartSelectedColumn;
end
else if column > StartSelectedColumn then
begin
FirstSelectedColumn := StartSelectedColumn;
LastSelectedColumn := column
end
else
begin
FirstSelectedColumn := column;
LastSelectedColumn := column;
end;
end
else
begin
StartSelectedColumn := column;
FirstSelectedColumn := column;
LastSelectedColumn := column;
end;
OnBeforeCellPaint
if vtMain.Selected[node] and InRange(column, FirstSelectedColumn, LastSelectedColumn) then
begin
if vtMain.Focused then
TargetCanvas.Brush.Color := vtMain.Colors.FocusedSelectionColor
else
TargetCanvas.Brush.Color := vtMain.Colors.UnfocusedSelectionColor;
TargetCanvas.Brush.Style := bsSolid;
TargetCanvas.FillRect(CellRect);
end;
OnPaintText
if vtMain.Selected[node] and InRange(column, FirstSelectedColumn, LastSelectedColumn) then
begin
if vtMain.Focused then
TargetCanvas.Font.Color := clHighlightText
else
TargetCanvas.Font.Color := vtMain.Font.Color;
end;
kullanabilirsiniz Bunu denedim ve bir fare kullanmak istediğinizde çok iyi çalışmıyor. Bununla birlikte, problemi "çözüyor". :) – PetriW