mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 08:53:48 +02:00
Merge branch 'lvonchanging'
This commit is contained in:
commit
76bbc6e2e5
lcl
@ -1289,6 +1289,8 @@ type
|
|||||||
|
|
||||||
TLVChangeEvent = procedure(Sender: TObject; Item: TListItem;
|
TLVChangeEvent = procedure(Sender: TObject; Item: TListItem;
|
||||||
Change: TItemChange) of object;
|
Change: TItemChange) of object;
|
||||||
|
TLVChangingEvent = procedure (Sender: TObject; Item: TListItem;
|
||||||
|
Change: TItemChange; var AllowChange: Boolean) of object;
|
||||||
|
|
||||||
TLVDataFindEvent = procedure(Sender: TObject; AFind: TItemFind;
|
TLVDataFindEvent = procedure(Sender: TObject; AFind: TItemFind;
|
||||||
const AFindString: string; const AFindPosition: TPoint; AFindData: Pointer;
|
const AFindString: string; const AFindPosition: TPoint; AFindData: Pointer;
|
||||||
@ -1429,6 +1431,7 @@ type
|
|||||||
// FLastVertScrollInfo: TScrollInfo;
|
// FLastVertScrollInfo: TScrollInfo;
|
||||||
FUpdateCount: integer;
|
FUpdateCount: integer;
|
||||||
FOnChange: TLVChangeEvent;
|
FOnChange: TLVChangeEvent;
|
||||||
|
FOnChanging: TLVChangingEvent;
|
||||||
FOnColumnClick: TLVColumnClickEvent;
|
FOnColumnClick: TLVColumnClickEvent;
|
||||||
FOnCompare: TLVCompareEvent;
|
FOnCompare: TLVCompareEvent;
|
||||||
FOnData: TLVDataEvent;
|
FOnData: TLVDataEvent;
|
||||||
@ -1522,6 +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;
|
||||||
|
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;
|
||||||
@ -1593,6 +1597,7 @@ type
|
|||||||
property ToolTips: Boolean index Ord(lvpToolTips) read GetProperty write SetProperty default True;
|
property ToolTips: Boolean index Ord(lvpToolTips) read GetProperty write SetProperty default True;
|
||||||
property ViewStyle: TViewStyle read FViewStyle write SetViewStyle default vsList;
|
property ViewStyle: TViewStyle read FViewStyle write SetViewStyle default vsList;
|
||||||
property OnChange: TLVChangeEvent read FOnChange write FOnChange;
|
property OnChange: TLVChangeEvent read FOnChange write FOnChange;
|
||||||
|
property OnChanging: TLVChangingEvent read FOnChanging write FOnChanging;
|
||||||
property OnColumnClick: TLVColumnClickEvent read FOnColumnClick write FOnColumnClick;
|
property OnColumnClick: TLVColumnClickEvent read FOnColumnClick write FOnColumnClick;
|
||||||
property OnCompare: TLVCompareEvent read FOnCompare write FOnCompare;
|
property OnCompare: TLVCompareEvent read FOnCompare write FOnCompare;
|
||||||
property OnCreateItemClass: TLVCreateItemClassEvent read FOnCreateItemClass write FOnCreateItemClass;
|
property OnCreateItemClass: TLVCreateItemClassEvent read FOnCreateItemClass write FOnCreateItemClass;
|
||||||
@ -1741,6 +1746,7 @@ type
|
|||||||
property OnAdvancedCustomDrawItem;
|
property OnAdvancedCustomDrawItem;
|
||||||
property OnAdvancedCustomDrawSubItem;
|
property OnAdvancedCustomDrawSubItem;
|
||||||
property OnChange;
|
property OnChange;
|
||||||
|
property OnChanging;
|
||||||
property OnClick;
|
property OnClick;
|
||||||
property OnColumnClick;
|
property OnColumnClick;
|
||||||
property OnCompare;
|
property OnCompare;
|
||||||
|
@ -205,6 +205,22 @@ begin
|
|||||||
then FOnChange(Self, AItem, ItemChange);
|
then FOnChange(Self, AItem, ItemChange);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomListView.CanChange(AItem: TListItem; AChange: Integer): Boolean;
|
||||||
|
var
|
||||||
|
ItemChange: TItemChange;
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
case AChange of
|
||||||
|
LVIF_TEXT: ItemChange := ctText;
|
||||||
|
LVIF_IMAGE: ItemChange := ctImage;
|
||||||
|
LVIF_STATE: ItemChange := ctState;
|
||||||
|
else
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
if Assigned(FOnChanging) then
|
||||||
|
FOnChanging(Self, AItem, ItemChange, Result);
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
{ TCustomListView ColClick }
|
{ TCustomListView ColClick }
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
@ -261,6 +277,7 @@ var
|
|||||||
Item: TListItem;
|
Item: TListItem;
|
||||||
n: Integer;
|
n: Integer;
|
||||||
oldSelected: TListItem;
|
oldSelected: TListItem;
|
||||||
|
AllowChange: Boolean;
|
||||||
begin
|
begin
|
||||||
nm := PNMListView(AMessage.NMHdr);
|
nm := PNMListView(AMessage.NMHdr);
|
||||||
// ignore any notifications while initializing items
|
// ignore any notifications while initializing items
|
||||||
@ -295,6 +312,7 @@ begin
|
|||||||
// LVN_GETDISPINFO:
|
// LVN_GETDISPINFO:
|
||||||
// LVN_ODCACHEHINT:
|
// LVN_ODCACHEHINT:
|
||||||
// LVN_ODFINDITEM: implemented in win32 widgetset
|
// LVN_ODFINDITEM: implemented in win32 widgetset
|
||||||
|
// LVN_ITEMCHANGING: implemented in win32 widgetset
|
||||||
// LVN_ODSTATECHANGED:
|
// LVN_ODSTATECHANGED:
|
||||||
// LVN_BEGINLABELEDIT: implemented via TCustomListViewEditor
|
// LVN_BEGINLABELEDIT: implemented via TCustomListViewEditor
|
||||||
// LVN_ENDLABELEDIT: implemented via TCustomListViewEditor
|
// LVN_ENDLABELEDIT: implemented via TCustomListViewEditor
|
||||||
@ -308,10 +326,14 @@ begin
|
|||||||
// see delete
|
// see delete
|
||||||
// besides... who's inserting items
|
// besides... who's inserting items
|
||||||
end;
|
end;
|
||||||
|
|
||||||
LVN_ITEMCHANGING: begin
|
LVN_ITEMCHANGING: begin
|
||||||
//Check
|
//Currently implemented in win32 widgeset only
|
||||||
|
//in response CanChange should be called and the result of that function most likely
|
||||||
|
//should be handled at WS level (if at all possible for non-windows)
|
||||||
end;
|
end;
|
||||||
LVN_ITEMCHANGED:
|
|
||||||
|
LVN_ITEMCHANGED:
|
||||||
begin
|
begin
|
||||||
if nm^.iItem < 0 then
|
if nm^.iItem < 0 then
|
||||||
Item := nil
|
Item := nil
|
||||||
|
@ -296,6 +296,32 @@ var
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure HandleListViewChanging(ALV: TCustomListViewAccess);
|
||||||
|
var
|
||||||
|
nm: PNMListView;
|
||||||
|
Item: TListItem;
|
||||||
|
begin
|
||||||
|
//debugln(['HandleListChanging: HandleAllocated=',ALV.HandleAllocated,', (wcfInitializing in FWinControlFlags)=',Dbgs(wcfInitializing in ALV.FWinControlFlags)]);
|
||||||
|
if (wcfInitializing in ALV.FWinControlFlags) then Exit;
|
||||||
|
nm := PNMListView(NMHdr);
|
||||||
|
if nm^.iItem < 0 then
|
||||||
|
Item := nil
|
||||||
|
else
|
||||||
|
Item := ALV.Items[nm^.iItem];
|
||||||
|
|
||||||
|
if Assigned(Item) then
|
||||||
|
begin
|
||||||
|
//https://learn.microsoft.com/en-us/windows/win32/controls/lvn-itemchanging
|
||||||
|
//Returns TRUE to prevent the change, or FALSE to allow the change
|
||||||
|
//So the opposite of the result of CanChange function
|
||||||
|
if ALV.CanChange(Item, nm^.uChanged) then
|
||||||
|
MsgResult := 0 //Ord(BOOL(False))
|
||||||
|
else
|
||||||
|
MsgResult := 1; //Ord(BOOL(True))
|
||||||
|
end;
|
||||||
|
WinProcess := False;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure HandleListViewOwnerDataHint(ALV: TCustomListViewAccess);
|
procedure HandleListViewOwnerDataHint(ALV: TCustomListViewAccess);
|
||||||
var
|
var
|
||||||
DataHintInfo: PNMLVCACHEHINT;
|
DataHintInfo: PNMLVCACHEHINT;
|
||||||
@ -323,6 +349,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
LVN_ODFINDITEM:
|
LVN_ODFINDITEM:
|
||||||
HandleListViewFindItem(TCustomListViewAccess(AWinControl));
|
HandleListViewFindItem(TCustomListViewAccess(AWinControl));
|
||||||
|
LVN_ITEMCHANGING:
|
||||||
|
HandleListViewChanging(TCustomListViewAccess(AWinControl));
|
||||||
LVN_ODCACHEHINT:
|
LVN_ODCACHEHINT:
|
||||||
HandleListViewOwnerDataHint(TCustomListViewAccess(AWinControl));
|
HandleListViewOwnerDataHint(TCustomListViewAccess(AWinControl));
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user