added wincelists

git-svn-id: trunk@9227 -
This commit is contained in:
mattias 2006-05-02 20:19:51 +00:00
parent 658fb3a81f
commit e1a557e5ee
3 changed files with 790 additions and 0 deletions

2
.gitattributes vendored
View File

@ -2259,6 +2259,8 @@ lcl/interfaces/wince/wincecallback.inc svneol=native#text/plain
lcl/interfaces/wince/winceint.pp svneol=native#text/plain
lcl/interfaces/wince/wincelclintf.inc svneol=native#text/plain
lcl/interfaces/wince/wincelclintfh.inc svneol=native#text/plain
lcl/interfaces/wince/wincelistsl.inc svneol=native#text/plain
lcl/interfaces/wince/wincelistslh.inc svneol=native#text/plain
lcl/interfaces/wince/winceobject.inc svneol=native#text/plain
lcl/interfaces/wince/winceproc.pp svneol=native#text/plain
lcl/interfaces/wince/wincewinapi.inc svneol=native#text/plain

View File

@ -0,0 +1,647 @@
// included by win32int.pp
{******************************************************************************
win32listsl.inc
TWin32ListStringList and TWin32CListStringList
******************************************************************************
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.LCL, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
}
{$IFOPT H+}
{$DEFINE H_PLUS}
{$ELSE}
{$H+}
{$UNDEF H_PLUS}
{$ENDIF}
{*************************************************************}
{ Default compare function }
{*************************************************************}
Function DefaultCompareFunc(A, B: HWND): Integer; CDecl;
Var
AStr, BStr: PWideChar;
Begin
AStr:=nil;
BStr:=nil;
GetWindowText(A, AStr, GetWindowTextLength(A) + 1);
GetWindowText(B, BStr, GetWindowTextLength(B) + 1);
Result := WideCompareStr(widestring(AStr), widestring(BStr));//roozbeh:does this work?!
end;
Procedure SetComboHeight(Sender: TWinControl; AHeight:Integer);
var
Left, Top, Width: integer;
begin
Left := Sender.Left;
Top := Sender.Top;
Width := Sender.Width;
LCLBoundsToWin32Bounds(Sender, Left, Top, Width, AHeight);
MoveWindow(Sender.Handle, Left, Top, Width, AHeight, true);//roozbeh check if this works!
LCLControlSizeNeedsUpdate(Sender, true);
end;
{*************************************************************}
{ TWinCEListStringList methods }
{*************************************************************}
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Create
Params:
Returns:
------------------------------------------------------------------------------}
Constructor TWinCEListStringList.Create(List : HWND; TheOwner: TWinControl);
Begin
Inherited Create;
If List = HWND(Nil) Then
Raise Exception.Create('Unspecified list window');
//Assert(False, 'Trace:Unspecified list window');
FWinCEList := List;
FSender := TheOwner;
//Set proper wince flags for ComboBox/ListBox and get/set Combo Height
InitFlags;
// Determine if the list is sorted
FSorted := (UINT(GetWindowLong(FWinCEList, GWL_STYLE)) and FFlagSort <> 0);
End;
procedure TWinCEListStringList.InitFlags;
begin
FFlagSort := UINT(LBS_SORT);
FFlagGetText := UINT(LB_GETTEXT);
FFlagGetTextLen := UINT(LB_GETTEXTLEN);
FFlagGetCount := UINT(LB_GETCOUNT);
FFlagResetContent := UINT(LB_RESETCONTENT);
FFlagDeleteString := UINT(LB_DELETESTRING);
FFlagInsertString := UINT(LB_INSERTSTRING);
FFlagAddString := UINT(LB_ADDSTRING);
FFlagGetItemData := UINT(LB_GETITEMDATA);
FFlagSetItemData := UINT(LB_SETITEMDATA);
FFlagGetItemIndex := UINT(LB_GETCURSEL);
FFlagSetItemIndex := UINT(LB_SETCURSEL);
FFlagGetSelected := UINT(LB_GETSEL);
FFlagSetSelected := UINT(LB_SETSEL);
end;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.SetSorted
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.SetSorted(Val: Boolean);
Begin
If Val <> FSorted Then
Begin
FSorted:= Val;
Sort;
End;
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Sort
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.Sort;
Begin
// The win api doesn't allow to change the sort on the fly,
// so is needed to recreate the window
RecreateWnd(FSender);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Assign
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.Assign(Source: TPersistent);
Var
S: TStrings;
Counter: Integer;
AnIndex: Integer;
tmpStr : PWideChar;
Begin
{ Do not call inherited Assign as it does things we do not want to happen }
If Source Is TStrings Then
Begin
S:= TStrings(Source);
QuoteChar:=S.QuoteChar;
Delimiter:=S.Delimiter;
NameValueSeparator:=S.NameValueSeparator;
Windows.SendMessage(FWinCEList, FFlagResetContent, 0, 0);
For Counter := 0 To (TStrings(Source).Count - 1) Do
Begin
tmpStr := CreatePWideCharFromString(s[Counter]);
AnIndex := Windows.SendMessage(FWinCEList, FFlagAddString, 0, LPARAM(PWideChar(tmpStr))); //Insert
DisposePWideChar(tmpStr);
PutObject(AnIndex, S.Objects[Counter]);
end;
End
Else
inherited Assign(Source);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Add
Params:
Returns:
------------------------------------------------------------------------------}
function TWinCEListStringList.Add(const S: string): Integer;
begin
Result := Count;
Insert(Count, S);
if FSorted then
Result := FLastInsertedIndex;
end;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Get
Params:
Returns:
------------------------------------------------------------------------------}
Function TWinCEListStringList.Get(Index: Integer): String;
Var
Item: PWideChar;
Begin
If (Index < 0) Or (Index >= Count) Then
Raise Exception.Create('Out of bounds.')
Else
Begin
Item := SysAllocStringLen(nil,Windows.SendMessage(FWinCEList, FFlagGetTextLen, Index, 0));
Windows.SendMessage(FWinCEList, FFlagGetText, Index, LPARAM(Item));
End;
Result := String(WideString(Item));//roozbeh:maybe WideStringToString?
SysFreeString(Item);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.GetCount
Params:
Returns:
------------------------------------------------------------------------------}
Function TWinCEListStringList.GetCount: Integer;
Begin
Result := Windows.SendMessage(FWinCEList, FFlagGetCount, 0, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Clear
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.Clear;
Begin
Windows.SendMessage(FWinCEList, FFlagResetContent, 0, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Delete
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.Delete(Index: Integer);
Begin
Windows.SendMessage(FWinCEList, FFlagDeleteString, Index, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.GetObject
Params:
Returns:
------------------------------------------------------------------------------}
Function TWinCEListStringList.GetObject(Index: Integer): TObject;
Begin
HWND(Result) := Windows.SendMessage(FWinCEList, FFlagGetItemData, Index, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.Insert
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.Insert(Index: Integer; Const S: String);
var
tmpS : PWideChar;
Begin
FLastInsertedIndex := Index;
tmpS := CreatePWideCharFromString(s);
If FSorted Then
FLastInsertedIndex := Windows.SendMessage(FWinCEList, FFlagAddString, 0, LPARAM(PWideChar(tmpS)))
Else
Windows.SendMessage(FWinCEList, FFlagInsertString, Index, LPARAM(PWideChar(tmpS)));
DisposePWideChar(tmpS);
End;
procedure TWinCEListStringList.Put(Index: integer; const S: string);
var
lItemIndex: integer;
lSelected: boolean;
begin
// remember selection
lItemIndex := -1;
if FFlagGetSelected <> 0 then
begin
lItemIndex := SendMessage(FWinCEList, FFlagGetSelected, Index, 0);
lSelected := lItemIndex > 0;
if lItemIndex <> LB_ERR then
lItemIndex := Index;
end;
if lItemIndex = -1 then
begin
lItemIndex := SendMessage(FWinCEList, FFlagGetItemIndex, 0, 0);
lSelected := true;
end;
inherited;
if lSelected then
begin
if (FFlagSetSelected = 0)
or (SendMessage(FWinCEList, FFlagSetSelected, Windows.WParam(true), lItemIndex) = -1) then
begin
SendMessage(FWinCEList, FFlagSetItemIndex, lItemIndex, 0);
end;
end;
end;
{------------------------------------------------------------------------------
Method: TWinCEListStringList.PutObject
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCEListStringList.PutObject(Index: Integer; AObject: TObject);
Begin
Windows.SendMessage(FWinCEList, FFlagSetItemData, Index, LPARAM(AObject));
End;
{ TWinCEComboBoxStringList }
procedure TWinCEComboBoxStringList.InitFlags;
var
R: TRect;
begin
FFlagSort := UINT(CBS_SORT);
FFlagGetText := UINT(CB_GETLBTEXT);
FFlagGetTextLen := UINT(CB_GETLBTEXTLEN);
FFlagGetCount := UINT(CB_GETCOUNT);
FFlagResetContent := UINT(CB_RESETCONTENT);
FFlagDeleteString := UINT(CB_DELETESTRING);
FFlagInsertString := UINT(CB_INSERTSTRING);
FFlagAddString := UINT(CB_ADDSTRING);
FFlagGetItemData := UINT(CB_GETITEMDATA);
FFlagSetItemData := UINT(CB_SETITEMDATA);
FFlagGetItemIndex := UINT(CB_GETCURSEL);
FFlagSetItemIndex := UINT(CB_SETCURSEL);
FFlagGetSelected := UINT(0);
FFlagSetSelected := UINT(0);
//Get edit and item sizes
Windows.GetClientRect(FWinCEList,@R);
FEditHeight := R.Bottom;
FItemHeight := Windows.SendMessage(FWinCEList, CB_GETITEMHEIGHT, 0, 0);
FDropDownCount := TComboBox(FSender).DropDownCount;
If FDropDownCount = 0 then
FDropDownCount := 8;
end;
procedure TWinCEComboBoxStringList.Assign(Source: TPersistent);
var
EditText: string;
lItemIndex: integer;
begin
if Source is TStrings then
begin
// save text in edit box, assigning strings clears the text
TWinCEWSCustomComboBox.GetText(FSender, EditText);
inherited Assign(Source);
// restore text in edit box
SetComboHeight(FSender, ComboHeight);
TWinCEWSCustomComboBox.SetText(FSender, EditText);
lItemIndex := IndexOf(EditText);
if lItemIndex <> -1 then
TWinCEWSCustomComboBox.SetItemIndex(TCustomComboBox(FSender), lItemIndex);
end else
inherited Assign(Source);
end;
function TWinCEComboBoxStringList.GetComboHeight: integer;
begin
if Count = 0 then
begin
Result := FEditHeight + FItemHeight + 2;
end else begin
Result := FEditHeight + FDropDownCount*FItemHeight + 2;
end;
end;
procedure TWinCEComboBoxStringList.Clear;
begin
SetComboHeight(FSender, FEditHeight + FItemHeight + 2);
inherited;
end;
procedure TWinCEComboBoxStringList.Delete(Index: integer);
begin
if GetCount <= 1 then
SetComboHeight(FSender, FEditHeight + FItemHeight + 2);
inherited Delete(Index);
end;
procedure TWinCEComboBoxStringList.Insert(Index: integer; const S: string);
begin
if GetCount = 0 then
SetComboHeight(FSender, FEditHeight + FDropDownCount*FItemHeight + 2);
inherited Insert(Index, S);
end;
{ TWinCECheckListBoxStrings }
constructor TWinCECheckListBoxStrings.Create(List : HWND; TheOwner: TWinControl);
begin
inherited Create(List, TheOwner);
with FDefaultItem do begin
Checked := false;
TheObject := nil;
end;
end;
function TWinCECheckListBoxStrings.GetChecked(const Index: Integer): Boolean;
var
Data: PWinCECheckListBoxItemRecord;
begin
Data := GetItemRecord(Index, false);
Result := Data^.Checked
end;
procedure TWinCECheckListBoxStrings.SetChecked(const Index: Integer;
const AValue: Boolean);
var
ItemRecord: PWinCECheckListBoxItemRecord;
begin
ItemRecord := GetItemRecord(Index, true);
ItemRecord^.Checked := AValue;
SetItemRecord(Index, ItemRecord);
end;
function TWinCECheckListBoxStrings.GetItemRecord(const Index: Integer;
const CreateNew: boolean): PWinCECheckListBoxItemRecord;
begin
Result := PWinCECheckListBoxItemRecord(Windows.SendMessage(FWinCEList, LB_GETITEMDATA, Index, 0));
if (not Assigned(Result)) then begin
if CreateNew then begin
Result := new(PWinCECheckListBoxItemRecord);
Result^ := FDefaultItem;
end
else Result := @FDefaultItem;
end;
end;
procedure TWinCECheckListBoxStrings.SetItemRecord(const Index: Integer;
ItemRecord: PWinCECheckListBoxItemRecord);
begin
Windows.SendMessage(FWinCEList, LB_SETITEMDATA, Index, LPARAM(ItemRecord));
end;
procedure TWinCECheckListBoxStrings.Clear;
begin
DeleteItemRecords(FWinCEList);
inherited Clear;
end;
procedure TWinCECheckListBoxStrings.Delete(Index: Integer);
begin
DeleteItemRecord(FWinCEList, Index);
inherited Delete(Index);
end;
function TWinCECheckListBoxStrings.GetObject(Index: Integer): TObject;
begin
Result:= GetItemRecord(Index, false)^.TheObject;
end;
procedure TWinCECheckListBoxStrings.PutObject(Index: Integer; AObject: TObject);
var
ItemRecord: PWinCECheckListBoxItemRecord;
begin
ItemRecord := GetItemRecord(Index, true);
ItemRecord^.TheObject := AObject;
SetItemRecord(Index, ItemRecord);
end;
class procedure TWinCECheckListBoxStrings.DeleteItemRecords(const List: HWND);
var
Index: Integer;
ItemCount: Integer;
begin
ItemCount := Windows.SendMessage(List, LB_GETCOUNT, 0, 0);
for Index := 0 to ItemCount-1 do
DeleteItemRecord(List, Index);
end;
class procedure TWinCECheckListBoxStrings.DeleteItemRecord(const List: HWND;const Index: integer);
var
ItemRecord: PWinCECheckListBoxItemRecord;
begin
ItemRecord := PWinCECheckListBoxItemRecord(Windows.SendMessage(List, LB_GETITEMDATA, Index, 0));
if Assigned(ItemRecord)
then Dispose(ItemRecord);
end;
{*************************************************************}
{ TWinCECListStringList methods }
{*************************************************************}
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Create
Params:
Returns:
------------------------------------------------------------------------------}
Constructor TWinCECListStringList.Create(List : HWND; TheOwner: TWinControl);
Begin
Inherited Create;
If List = HWND(Nil) Then
Raise Exception.Create('Unspecified list widget');
FWinCECList := List;
FSorted := (GetWindowLong(FWinCECList, GWL_STYLE) and LBS_SORT <> 0);
FSender:=TheOwner;
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.SetSorted
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCECListStringList.SetSorted(Val: Boolean);
Begin
If Val <> FSorted Then
Begin
FSorted := Val;
Sort;
End;
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Sort
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCECListStringList.Sort;
Begin
// The win api doesn't allow to change the sort on the fly,
// so is needed to recreate the window
RecreateWnd(FSender);
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Assign
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCECListStringList.Assign(Source: TPersistent);
Var
Counter: Integer;
Begin
{ Do not call inherited Assign as it does things we do not want to happen }
If Source Is TStrings Then
Begin
Clear;
For Counter := 0 To (TStrings(Source).Count - 1) Do
InsertObject(0, TStrings(Source)[Counter], TStrings(Source).Objects[Counter]);
End
Else
Inherited Assign(Source);
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Clear
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCECListStringList.Clear;
Begin
Windows.SendMessage(FWinCECList, LB_RESETCONTENT, 0, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Delete
Params:
Returns:
------------------------------------------------------------------------------}
procedure TWinCECListStringList.Delete(Index: Integer);
begin
Windows.SendMessage(FWinCECList, LB_DELETESTRING, Index, 0);
end;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Get
Params:
Returns:
------------------------------------------------------------------------------}
Function TWinCECListStringList.Get(Index: Integer): String;
Var
Item: PWideChar;
Begin
If (Index < 0) Or (Index >= Count) Then
Raise Exception.Create('Out of bounds.')
Else
Begin
Item := SysAllocStringLen(nil,Windows.SendMessage(FWinCECList,LB_GETTEXTLEN,Index,0));
Windows.SendMessage(FWinCECList, LB_GETTEXT, Index, LPARAM(Item));
Result := String(WideString(Item));//roozbeh maybe Widestringtostring later
SysFreeString(Item);
End;
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.GetCount
Params:
Returns:
------------------------------------------------------------------------------}
Function TWinCECListStringList.GetCount: Integer;
Begin
Result := Windows.SendMessage(FWinCECList, LB_GETCOUNT, 0, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.GetObject
Params:
Returns:
------------------------------------------------------------------------------}
Function TWinCECListStringList.GetObject(Index: Integer): TObject;
Begin
HWND(Result) := Windows.SendMessage(FWinCECList, LB_GETITEMDATA, Index, 0);
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.Insert
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCECListStringList.Insert(Index: Integer; Const S: String);
var
tmpS : PWideChar;
Begin
tmpS := CreatePWideCharFromString(S);
If FSorted Then
Windows.SendMessage(FWinCECList,LB_ADDSTRING, 0, LPARAM(PWideChar(tmpS)))
Else
Windows.SendMessage(FWinCECList,LB_INSERTSTRING, Index, LPARAM(PWideChar(tmpS)));
DisposePWideChar(tmpS);
End;
{------------------------------------------------------------------------------
Method: TWinCECListStringList.PutObject
Params:
Returns:
------------------------------------------------------------------------------}
Procedure TWinCECListStringList.PutObject(Index: Integer; AObject: TObject);
Begin
Windows.SendMessage(FWinCECList, LB_SETITEMDATA, Index, LPARAM(AObject));
End;
{$IFDEF H_PLUS}
{$UNDEF H_PLUS}
{$ELSE}
{$H-}
{$ENDIF}

View File

@ -0,0 +1,141 @@
// included by win32int.pp
{******************************************************************************
win32listslh.inc
TWin32ListStringList and TWin32CListStringList
******************************************************************************
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.LCL, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
}
{$IFOPT H+}
{$DEFINE H_PLUS}
{$ELSE}
{$H+}
{$ENDIF}
Type
TWinCEListStringList = Class(TStrings)
Private
FWinCEList: HWND;
FSorted: Boolean;
FSender: TWinControl;
FlastInsertedIndex: Integer;
protected
//WinCE Flags
FFlagSort: Cardinal;
FFlagGetText: Cardinal;
FFlagGetTextLen: Cardinal;
FFlagGetCount: Cardinal;
FFlagResetContent: Cardinal;
FFlagDeleteString: Cardinal;
FFlagInsertString: Cardinal;
FFlagAddString: Cardinal;
FFlagGetItemData: Cardinal;
FFlagSetItemData: Cardinal;
FFlagGetItemIndex: cardinal;
FFlagSetItemIndex: cardinal;
FFlagGetSelected: cardinal;
FFlagsetSelected: cardinal;
Protected
function Add(const S: string): Integer; override;
Function Get(Index: Integer): String; Override;
Function GetCount: Integer; Override;
Function GetObject(Index: Integer): TObject; Override;
procedure Put(Index: integer; const S: string); override;
Procedure PutObject(Index: Integer; AObject: TObject); Override;
procedure InitFlags; virtual;
Procedure SetSorted(Val: Boolean); Virtual;
Public
Constructor Create(List : HWND; TheOwner: TWinControl);
Procedure Assign(Source: TPersistent); Override;
Procedure Clear; Override;
Procedure Delete(Index: Integer); Override;
Procedure Insert(Index: Integer; Const S: String); Override;
Procedure Sort; Virtual;
Property Sorted: Boolean Read FSorted Write SetSorted;
End;
TWinCEComboBoxStringList = class(TWinCEListStringList)
private
FEditHeight: Integer;
FItemHeight: Integer;
FDropDownCount: Integer;
protected
function GetComboHeight: integer;
procedure InitFlags; override;
public
procedure Assign(Source: TPersistent); override;
procedure Clear; override;
procedure Delete(Index: integer); override;
procedure Insert(Index: integer; const S: string); override;
property ComboHeight: integer read GetComboHeight;
end;
PWinCECheckListBoxItemRecord = ^TWinCECheckListBoxItemRecord;
TWinCECheckListBoxItemRecord = record
TheObject: TObject;
Checked: Boolean;
end;
TWinCECheckListBoxStrings = class(TWinCEListStringList)
private
FDefaultItem: TWinCECheckListBoxItemRecord;
function GetChecked(const Index: Integer): Boolean;
procedure SetChecked(const Index: Integer; const AValue: Boolean);
function GetItemRecord(const Index: Integer; const CreateNew: boolean): PWinCECheckListBoxItemRecord;
procedure SetItemRecord(const Index: Integer; ItemRecord: PWinCECheckListBoxItemRecord);
protected
function GetObject(Index: Integer): TObject; override;
procedure PutObject(Index: Integer; AObject: TObject); override;
public
constructor Create(List : HWND; TheOwner: TWinControl);
class procedure DeleteItemRecords(const List: HWND);
class procedure DeleteItemRecord(const List: HWND; const Index: integer);
procedure Clear; override;
procedure Delete(Index: Integer); override;
property Checked[const Index: Integer]: Boolean read GetChecked write SetChecked;
end;
TWinCECListStringList = Class(TStrings)
Private
FWinCECList: HWND;
FSender: TWinControl; // Needed to recreate the window
FSorted: Boolean;
Protected
Function Get(Index: Integer): String; Override;
Function GetCount: Integer; Override;
Function GetObject(Index: Integer): TObject; Override;
Procedure PutObject(Index: Integer; AObject: TObject); Override;
Procedure SetSorted(Val: Boolean); Virtual;
Public
Constructor Create(List : HWND; TheOwner: TWinControl);
Procedure Assign(Source: TPersistent); Override;
Procedure Clear; Override;
Procedure Delete(Index: Integer); Override;
Procedure Insert(Index: Integer; Const S: String); Override;
Procedure Sort; Virtual;
Property Sorted: Boolean Read FSorted Write SetSorted;
End;
{$IFDEF H_PLUS}
{$UNDEF H_PLUS}
{$ELSE}
{$H-}
{$ENDIF}