mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-05 18:15:57 +02:00
MG: TListView now works handleless and SetSelection implemented
git-svn-id: trunk@3312 -
This commit is contained in:
parent
385cd1efb4
commit
fc518c76b8
@ -253,6 +253,9 @@ type
|
|||||||
TLVColumnClickEvent = procedure(Sender: TObject; Column: TListColumn) of object;
|
TLVColumnClickEvent = procedure(Sender: TObject; Column: TListColumn) of object;
|
||||||
TLVColumnRClickEvent = procedure(Sender: TObject; Column: TListColumn; Point: TPoint) of object;
|
TLVColumnRClickEvent = procedure(Sender: TObject; Column: TListColumn; Point: TPoint) of object;
|
||||||
TLVSelectItemEvent = procedure(Sender: TObject; Item: TListItem; Selected: Boolean) of object;
|
TLVSelectItemEvent = procedure(Sender: TObject; Item: TListItem; Selected: Boolean) of object;
|
||||||
|
|
||||||
|
TListViewState = (lvMultiSelect, lvUpdateNeeded);
|
||||||
|
TListViewStates = set of TListViewState;
|
||||||
|
|
||||||
TCustomListView = class(TWinControl)
|
TCustomListView = class(TWinControl)
|
||||||
private
|
private
|
||||||
@ -265,7 +268,6 @@ type
|
|||||||
FViewStyle : TViewStyle;
|
FViewStyle : TViewStyle;
|
||||||
FSortType: TSortType;
|
FSortType: TSortType;
|
||||||
FSortColumn : Integer;
|
FSortColumn : Integer;
|
||||||
FMultiSelect: Boolean;
|
|
||||||
FImageChangeLink : TChangeLink;
|
FImageChangeLink : TChangeLink;
|
||||||
FScrollBars: TScrollStyle;
|
FScrollBars: TScrollStyle;
|
||||||
FScrolledLeft: integer; // horizontal scrolled pixels (hidden pixels at top)
|
FScrolledLeft: integer; // horizontal scrolled pixels (hidden pixels at top)
|
||||||
@ -274,10 +276,11 @@ type
|
|||||||
FLastHorzScrollInfo: TScrollInfo;
|
FLastHorzScrollInfo: TScrollInfo;
|
||||||
FLastVertScrollInfo: TScrollInfo;
|
FLastVertScrollInfo: TScrollInfo;
|
||||||
FUpdateCount: integer;
|
FUpdateCount: integer;
|
||||||
FUpdateNeeded: boolean;
|
|
||||||
FOnChange: TLVChangeEvent;
|
FOnChange: TLVChangeEvent;
|
||||||
FOnColumnClick: TLVColumnClickEvent;
|
FOnColumnClick: TLVColumnClickEvent;
|
||||||
FOnSelectItem: TLVSelectItemEvent;
|
FOnSelectItem: TLVSelectItemEvent;
|
||||||
|
FStates: TListViewStates;
|
||||||
|
function GetMultiSelect: Boolean;
|
||||||
function GetSelection: TListItem;
|
function GetSelection: TListItem;
|
||||||
procedure SetColumns(const AValue: TListColumns);
|
procedure SetColumns(const AValue: TListColumns);
|
||||||
procedure SetDefaultItemHeight(AValue: integer);
|
procedure SetDefaultItemHeight(AValue: integer);
|
||||||
@ -296,6 +299,7 @@ type
|
|||||||
procedure DoUpdate;
|
procedure DoUpdate;
|
||||||
protected
|
protected
|
||||||
ParentWindow : TScrolledWindow;
|
ParentWindow : TScrolledWindow;
|
||||||
|
procedure InitializeWnd; override;
|
||||||
procedure Change(AItem: TListItem; AChange: Integer); dynamic;
|
procedure Change(AItem: TListItem; AChange: Integer); dynamic;
|
||||||
procedure ColClick(AColumn: TListColumn); dynamic;
|
procedure ColClick(AColumn: TListColumn); dynamic;
|
||||||
procedure Delete(Item : TListItem);
|
procedure Delete(Item : TListItem);
|
||||||
@ -316,7 +320,7 @@ type
|
|||||||
property DefaultItemHeight: integer read FDefItemHeight write SetDefaultItemHeight;
|
property DefaultItemHeight: integer read FDefItemHeight write SetDefaultItemHeight;
|
||||||
// property HideSelection: Boolean read FHideSelection write SetHideSelection default True;
|
// property HideSelection: Boolean read FHideSelection write SetHideSelection default True;
|
||||||
property Items: TListItems read FListItems write SetItems;
|
property Items: TListItems read FListItems write SetItems;
|
||||||
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default False;
|
property MultiSelect: Boolean read GetMultiSelect write SetMultiSelect default False;
|
||||||
// property ReadOnly: Boolean read FReadOnly write SetReadOnly;
|
// property ReadOnly: Boolean read FReadOnly write SetReadOnly;
|
||||||
// property RowSelect: Boolean read FRowSelect write SetRowSelect default False;
|
// property RowSelect: Boolean read FRowSelect write SetRowSelect default False;
|
||||||
property ScrolledLeft: integer read FScrolledLeft write SetScrolledLeft;
|
property ScrolledLeft: integer read FScrolledLeft write SetScrolledLeft;
|
||||||
@ -1594,6 +1598,9 @@ end.
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.43 2002/09/10 10:00:27 lazarus
|
||||||
|
MG: TListView now works handleless and SetSelection implemented
|
||||||
|
|
||||||
Revision 1.42 2002/09/10 06:49:18 lazarus
|
Revision 1.42 2002/09/10 06:49:18 lazarus
|
||||||
MG: scrollingwincontrol from Andrew
|
MG: scrollingwincontrol from Andrew
|
||||||
|
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
* *
|
* *
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
}
|
}
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------
|
||||||
{ TCustomListView Constructor }
|
TCustomListView Constructor
|
||||||
{------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
constructor TCustomListView.Create(Aowner: TComponent);
|
constructor TCustomListView.Create(Aowner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited Create(AOwner);
|
inherited Create(AOwner);
|
||||||
@ -40,7 +40,7 @@ end;
|
|||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
Procedure TCustomListView.ColumnsChanged;
|
Procedure TCustomListView.ColumnsChanged;
|
||||||
Begin
|
Begin
|
||||||
FUpdateNeeded:=true;
|
Include(FStates,lvUpdateNeeded);
|
||||||
DoUpdate;
|
DoUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -137,16 +137,25 @@ end;
|
|||||||
procedure TCustomListView.DoUpdate;
|
procedure TCustomListView.DoUpdate;
|
||||||
begin
|
begin
|
||||||
if FUpdateCount>0 then exit;
|
if FUpdateCount>0 then exit;
|
||||||
if not FUpdateNeeded then exit;
|
if not (lvUpdateNeeded in FStates) then exit;
|
||||||
FUpdateNeeded:=false;
|
|
||||||
if csDestroying in Componentstate Then Exit;
|
if csDestroying in Componentstate Then Exit;
|
||||||
//TODO: Optimize implementation by invoking individual upadates instead of
|
//TODO: Optimize implementation by invoking individual upadates instead of
|
||||||
// recreating window
|
// recreating window
|
||||||
//notify the interface....
|
//notify the interface....
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
|
Exclude(FStates,lvUpdateNeeded);
|
||||||
RecreateWnd;
|
RecreateWnd;
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomListView.InitializeWnd;
|
||||||
|
begin
|
||||||
|
inherited InitializeWnd;
|
||||||
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
|
if FSelected<>nil then
|
||||||
|
CNSendMessage(LM_LV_SELECTITEM,self,FSelected);
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
{ TCustomListView DoSelectItem }
|
{ TCustomListView DoSelectItem }
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
@ -162,10 +171,12 @@ Procedure TCustomListView.ItemChanged(Index : Integer); //called by TListItems
|
|||||||
Begin
|
Begin
|
||||||
if csDestroying in Componentstate Then Exit;
|
if csDestroying in Componentstate Then Exit;
|
||||||
if FUpdateCount>0 then
|
if FUpdateCount>0 then
|
||||||
FUpdateNeeded:=true
|
Include(FStates,lvUpdateNeeded)
|
||||||
else
|
else begin
|
||||||
//notify the interface....
|
//notify the interface....
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_LV_CHANGEITEM,self,@Index);
|
CNSendMessage(LM_LV_CHANGEITEM,self,@Index);
|
||||||
|
end;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
@ -175,23 +186,27 @@ Procedure TCustomListView.ItemDeleted(Index : Integer); //called by TListItems
|
|||||||
Begin
|
Begin
|
||||||
if csDestroying in Componentstate Then Exit;
|
if csDestroying in Componentstate Then Exit;
|
||||||
if FUpdateCount>0 then
|
if FUpdateCount>0 then
|
||||||
FUpdateNeeded:=true
|
Include(FStates,lvUpdateNeeded)
|
||||||
else
|
else begin
|
||||||
//notify the interface....
|
//notify the interface....
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_LV_DELETEITEM,self,@Index);
|
CNSendMessage(LM_LV_DELETEITEM,self,@Index);
|
||||||
|
end;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
{ TCustomListView ItemAdded }
|
{ TCustomListView ItemAdded }
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
Procedure TCustomListView.ItemAdded;
|
Procedure TCustomListView.ItemAdded;
|
||||||
Begin
|
Begin
|
||||||
if csDestroying in Componentstate Then Exit;
|
if csDestroying in Componentstate Then Exit;
|
||||||
if FUpdateCount>0 then
|
if FUpdateCount>0 then
|
||||||
FUpdateNeeded:=true
|
Include(FStates,lvUpdateNeeded)
|
||||||
else
|
else begin
|
||||||
//notify the interface....
|
//notify the interface....
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_LV_ADDITEM,self,nil);
|
CNSendMessage(LM_LV_ADDITEM,self,nil);
|
||||||
|
end;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
@ -230,6 +245,7 @@ procedure TCustomListView.SetViewStyle(const AValue: TViewStyle);
|
|||||||
begin
|
begin
|
||||||
if FViewStyle = AValue then Exit;
|
if FViewStyle = AValue then Exit;
|
||||||
FViewStyle := AValue;
|
FViewStyle := AValue;
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -241,6 +257,7 @@ procedure TCustomListView.SetSortType(const AValue: TSortType);
|
|||||||
begin
|
begin
|
||||||
if FSortType = AValue then Exit;
|
if FSortType = AValue then Exit;
|
||||||
FSortType := AValue;
|
FSortType := AValue;
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -251,6 +268,7 @@ procedure TCustomListView.SetSortColumn(const AValue : Integer);
|
|||||||
begin
|
begin
|
||||||
if FSortColumn = AValue then Exit;
|
if FSortColumn = AValue then Exit;
|
||||||
FSortColumn := AValue;
|
FSortColumn := AValue;
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -289,6 +307,11 @@ begin
|
|||||||
DoUpdate;
|
DoUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomListView.GetMultiSelect: Boolean;
|
||||||
|
begin
|
||||||
|
Result:=lvMultiSelect in FStates;
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
{ TCustomListView GetSelection }
|
{ TCustomListView GetSelection }
|
||||||
{------------------------------------------------------------------------------}
|
{------------------------------------------------------------------------------}
|
||||||
@ -303,19 +326,24 @@ end;
|
|||||||
procedure TCustomListView.SetSelection(const AValue: TListItem);
|
procedure TCustomListView.SetSelection(const AValue: TListItem);
|
||||||
begin
|
begin
|
||||||
if FSelected=AValue then exit;
|
if FSelected=AValue then exit;
|
||||||
// ToDo: send message to interface
|
FSelected := AValue;
|
||||||
//FSelected := AValue;
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
|
CNSendMessage(LM_LV_SELECTITEM,self,FSelected);
|
||||||
//DoSelectItem(FSelected, True);
|
//DoSelectItem(FSelected, True);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomListView.SetMultiSelect(const AValue: Boolean);
|
procedure TCustomListView.SetMultiSelect(const AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
if FMultiSelect <> AValue then
|
if MultiSelect <> AValue then
|
||||||
Begin
|
Begin
|
||||||
FMultiSelect := AValue;
|
if AValue then
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
Include(FStates,lvMultiSelect)
|
||||||
end;
|
else
|
||||||
|
Exclude(FStates,lvMultiSelect);
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then
|
||||||
|
Include(FStates,lvUpdateNeeded);
|
||||||
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomListView.SetSmallImages(const AValue: TCustomImageList);
|
procedure TCustomListView.SetSmallImages(const AValue: TCustomImageList);
|
||||||
@ -332,6 +360,7 @@ begin
|
|||||||
FSmallImages.RegisterChanges(FImageChangeLink);
|
FSmallImages.RegisterChanges(FImageChangeLink);
|
||||||
FSmallImages.FreeNotification(self);
|
FSmallImages.FreeNotification(self);
|
||||||
end;
|
end;
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -340,10 +369,12 @@ Procedure TCustomListView.ImageChanged(Sender : TObject);
|
|||||||
begin
|
begin
|
||||||
if csDestroying in Componentstate Then Exit;
|
if csDestroying in Componentstate Then Exit;
|
||||||
if FUpdateCount>0 then
|
if FUpdateCount>0 then
|
||||||
FUpdateNeeded:=true
|
Include(FStates,lvUpdateNeeded)
|
||||||
else
|
else begin
|
||||||
//image changed so redraw it all....
|
//image changed so redraw it all....
|
||||||
|
if (not HandleAllocated) or (csLoading in ComponentState) then exit;
|
||||||
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
CNSendMessage(LM_SETPROPERTIES,self,nil);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomListView.SetScrollBars(const Value: TScrollStyle);
|
procedure TCustomListView.SetScrollBars(const Value: TScrollStyle);
|
||||||
@ -383,7 +414,7 @@ procedure TCustomListView.UpdateScrollbars;
|
|||||||
var
|
var
|
||||||
ScrollInfo: TScrollInfo;
|
ScrollInfo: TScrollInfo;
|
||||||
begin
|
begin
|
||||||
writeln('TODO: TCustomListView.UpdateScrollbars');
|
writeln('TODO: TCustomListView.UpdateScrollbars');
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
if not HandleAllocated then exit
|
if not HandleAllocated then exit
|
||||||
@ -497,6 +528,9 @@ end;
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.21 2002/09/10 10:00:27 lazarus
|
||||||
|
MG: TListView now works handleless and SetSelection implemented
|
||||||
|
|
||||||
Revision 1.20 2002/08/28 10:44:45 lazarus
|
Revision 1.20 2002/08/28 10:44:45 lazarus
|
||||||
MG: implemented run param environment variables
|
MG: implemented run param environment variables
|
||||||
|
|
||||||
|
@ -126,6 +126,7 @@ const
|
|||||||
LM_LV_ADDITEM = LM_LV_FIRST+1;
|
LM_LV_ADDITEM = LM_LV_FIRST+1;
|
||||||
LM_LV_CHANGEITEM = LM_LV_FIRST+2;
|
LM_LV_CHANGEITEM = LM_LV_FIRST+2;
|
||||||
LM_LV_DELETEITEM = LM_LV_FIRST+3;
|
LM_LV_DELETEITEM = LM_LV_FIRST+3;
|
||||||
|
LM_LV_SELECTITEM = LM_LV_FIRST+4;
|
||||||
LM_LV_LAST = LM_LV_FIRST+9; // LM_COMUSER+89
|
LM_LV_LAST = LM_LV_FIRST+9; // LM_COMUSER+89
|
||||||
|
|
||||||
// TComboBox
|
// TComboBox
|
||||||
@ -847,6 +848,9 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.31 2002/09/10 10:00:27 lazarus
|
||||||
|
MG: TListView now works handleless and SetSelection implemented
|
||||||
|
|
||||||
Revision 1.30 2002/09/04 09:32:17 lazarus
|
Revision 1.30 2002/09/04 09:32:17 lazarus
|
||||||
MG: improved streaming error handling
|
MG: improved streaming error handling
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user