TCustomListView: trying to implement OnChanging (Win32):

* according to Delph docs (https://docwiki.embarcadero.com/Libraries/Alexandria/en/Vcl.ComCtrls.TCustomListView.CanChange) the function CanClose calls the OnChanging event. It's result indicates wether changing will be allowed.
This commit is contained in:
Bart 2024-01-05 17:59:21 +01:00
parent 39eb9884d0
commit af9412b019
3 changed files with 16 additions and 24 deletions

View File

@ -1525,7 +1525,7 @@ type
function CreateListItems: TListItems; virtual; function CreateListItems: TListItems; virtual;
function CanEdit(Item: TListItem): Boolean; virtual; function CanEdit(Item: TListItem): Boolean; virtual;
procedure Change(AItem: TListItem; AChange: Integer); virtual; procedure Change(AItem: TListItem; AChange: Integer); virtual;
procedure DoChanging(AItem: TListItem; AChange: Integer; var AllowChange: Boolean); function CanChange(AItem: TListItem; AChange: Integer): Boolean;
procedure ColClick(AColumn: TListColumn); virtual; procedure ColClick(AColumn: TListColumn); virtual;
procedure Delete(AItem : TListItem); virtual; procedure Delete(AItem : TListItem); virtual;

View File

@ -205,10 +205,11 @@ begin
then FOnChange(Self, AItem, ItemChange); then FOnChange(Self, AItem, ItemChange);
end; end;
procedure TCustomListView.DoChanging(AItem: TListItem; AChange: Integer; var AllowChange: Boolean); function TCustomListView.CanChange(AItem: TListItem; AChange: Integer): Boolean;
var var
ItemChange: TItemChange; ItemChange: TItemChange;
begin begin
Result := True;
case AChange of case AChange of
LVIF_TEXT: ItemChange := ctText; LVIF_TEXT: ItemChange := ctText;
LVIF_IMAGE: ItemChange := ctImage; LVIF_IMAGE: ItemChange := ctImage;
@ -217,14 +218,7 @@ begin
Exit; Exit;
end; end;
if Assigned(FOnChanging) then if Assigned(FOnChanging) then
begin FOnChanging(Self, AItem, ItemChange, Result);
FOnChanging(Self, AItem, ItemChange, AllowChange);
if not AllowChange then
begin
//ToDo
end;
end;
end; end;
{------------------------------------------------------------------------------} {------------------------------------------------------------------------------}
@ -335,7 +329,7 @@ begin
LVN_ITEMCHANGING: begin LVN_ITEMCHANGING: begin
//Check //Check
debugln('TCustomListView.CNNotify: LVN_ITEMCHANGING'); debugln('TCustomListView.CNNotify: LVN_ITEMCHANGING');
AMessage.Result:=1; //AMessage.Result:=1; //1=disallow changing
//if nm^.iItem < 0 then //if nm^.iItem < 0 then
// Item := nil // Item := nil
//else //else
@ -344,7 +338,7 @@ begin
//if Assigned(Item) then //if Assigned(Item) then
//begin //begin
// AllowChange := True; // AllowChange := True;
// DoChanging(Item, nm^.uChanged, AllowChange); // CanChange(Item, nm^.uChanged, AllowChange);
// if not AllowChange then // if not AllowChange then
// AMessage.Result := 1; // AMessage.Result := 1;
//end; //end;

View File

@ -300,11 +300,9 @@ var
var var
nm: PNMListView; nm: PNMListView;
Item: TListItem; Item: TListItem;
AllowChange: Boolean;
begin begin
debugln(['HandleListChanging: HandleAllocated=',ALV.HandleAllocated]); debugln(['HandleListChanging: HandleAllocated=',ALV.HandleAllocated,', (wcfInitializing in FWinControlFlags)=',Dbgs(wcfInitializing in ALV.FWinControlFlags)]);
MsgResult := LResult(1); if (wcfInitializing in ALV.FWinControlFlags) then Exit;
EXIT;
nm := PNMListView(NMHdr); nm := PNMListView(NMHdr);
if nm^.iItem < 0 then if nm^.iItem < 0 then
Item := nil Item := nil
@ -313,12 +311,11 @@ var
if Assigned(Item) then if Assigned(Item) then
begin begin
AllowChange := True; if ALV.CanChange(Item, nm^.uChanged) then
ALV.DoChanging(Item, nm^.uChanged, AllowChange); MsgResult := 0
//if not AllowChange then else
MsgResult := 0; MsgResult := 1;
end; end;
end; end;
procedure HandleListViewOwnerDataHint(ALV: TCustomListViewAccess); procedure HandleListViewOwnerDataHint(ALV: TCustomListViewAccess);
@ -350,10 +347,11 @@ begin
HandleListViewFindItem(TCustomListViewAccess(AWinControl)); HandleListViewFindItem(TCustomListViewAccess(AWinControl));
LVN_ITEMCHANGING: LVN_ITEMCHANGING:
begin begin
debugln('ListViewParentMsgHandler: LVN_ITEMCHANGING'); //debugln('ListViewParentMsgHandler: LVN_ITEMCHANGING');
MsgResult := LResult(-1); //MsgResult := LResult(-1);
//HandleListChanging(TCustomListViewAccess(AWinControl)); HandleListChanging(TCustomListViewAccess(AWinControl));
end; end;
//LVN_ITEMCHANGED: debugln('ListViewParentMsgHandler: LVN_ITEMCHANGed');
LVN_ODCACHEHINT: LVN_ODCACHEHINT:
HandleListViewOwnerDataHint(TCustomListViewAccess(AWinControl)); HandleListViewOwnerDataHint(TCustomListViewAccess(AWinControl));
end; end;