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