lazarus/lcl/include/customcombobox.inc
michael f088b13a3e + Initial import
git-svn-id: trunk@2 -
2000-07-13 10:28:31 +00:00

326 lines
10 KiB
PHP

{******************************************************************************
TCustomComboBox
******************************************************************************}
{
current design flaws:
- unknown
Delphi compatability:
- GTK: does not support the different "styles"
- GTK: Behaviour of OnClick event differs
- lots of unknown issues
TODO:
- check for Delphi compatibility
- lot's of testing
- lot's of properties missing (OnClick....!!!!)
Bugs:
- unknwon
}
{------------------------------------------------------------------------------
Method: TCustomComboBox.CreateHandle
Params: ---
Returns: Nothing
Create the underlying interface-object.
------------------------------------------------------------------------------}
procedure TCustomComboBox.CreateHandle;
var NewStrings : TStrings;
begin
inherited CreateHandle;
NewStrings:= TStrings(Pointer(CNSendMessage(LM_GETITEMS, Self, nil)));
NewStrings.Assign(FItems);
FItems.Free;
FItems:= NewStrings;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.AttachSignals
Params: none
Returns: Nothing
Gets called after the window is created but before the controls are created
and the cached propeties are set.
This is the only place where a call to SetCallBack is made.
------------------------------------------------------------------------------}
procedure TCustomComboBox.AttachSignals;
begin
inherited AttachSignals;
Assert(False, Format('Trace:[TCustomComboBox.AttachSignals] %s', [ClassName]));
SetCallback (LM_CHANGED);
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.DestroyHandle
Params: ---
Returns: Nothing
Destroy the underlying interface-object.
------------------------------------------------------------------------------}
procedure TCustomComboBox.DestroyHandle;
var NewStrings : TStrings;
begin
NewStrings:= TStringList.Create;
NewStrings.Assign(FItems);
FItems.Free;
FItems:= NewStrings;
inherited DestroyHandle;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetSorted
Params: val - true means "sort" the combo
Returns: Nothing
Set the "sorted" property of the combobox and Sort the current entries.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetSorted(Val : boolean);
var AMessage : TLMSort;
begin
if Val <> FSorted then begin
with AMessage do begin
Msg:= LM_SORT;
List:= Items;
IsSorted:= Val;
end;
CNSendMessage(LM_SORT, Self, @AMessage);
FSorted:= Val;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetMaxLength
Params: val -
Returns: Nothing
Set the maximum length for user input.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetMaxLength(Val : integer);
begin
if Val < 0 then Val:= 0;
HandleNeeded;
CNSendMessage(LM_SETLIMITTEXT, Self, @Val);
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.GetMaxLength
Params: ---
Returns: the maximum length of user input
Get the maximum length for user input.
------------------------------------------------------------------------------}
function TCustomComboBox.GetMaxLength : integer;
begin
HandleNeeded;
Result:= CNSendMessage(LM_GETLIMITTEXT, Self, nil);
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.DoChange
Params: msg -
Returns: Nothing
Call handler for "OnChange"-event if one is assigned.
------------------------------------------------------------------------------}
procedure TCustomComboBox.DoChange(var Msg);
begin
if Assigned(FOnChange) then FOnChange(Self);
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.GetSelText
Params: ---
Returns: selected text
Returns the selected part of text-field.
------------------------------------------------------------------------------}
function TCustomComboBox.GetSelText : string;
begin
if FStyle < csDropDownList then Result:= Copy(Text, SelStart + 1, SelLength)
else Result:= '';
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetSelText
Params: val - new string for text-field
Returns: nothings
Replace the selected part of text-field with "val".
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetSelText(Val : string);
begin
if FStyle <> csDropDownList then begin
{ First delete the actual selection }
Text:= Concat(Copy(Text, 1, SelStart), Val, Copy(Text, SelStart + SelLength + 1, Length(Text)));
end;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.GetSelStart
Params: ---
Returns: starting index of selected text
Returns starting index of selected text
------------------------------------------------------------------------------}
function TCustomComboBox.GetSelStart : integer;
begin
HandleNeeded;
Result:= CNSendMessage(LM_GETSELSTART, Self, nil);
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetSelStart
Params: val -
Returns: nothing
Sets starting index for selected text.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetSelStart(Val : integer);
begin
HandleNeeded;
CNSendMessage(LM_SETSELSTART, Self, Pointer(Val));
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.GetSelLength
Params: ---
Returns: length of selected text
Returns length of selected text
------------------------------------------------------------------------------}
function TCustomComboBox.GetSelLength : integer;
begin
HandleNeeded;
Result:= CNSendMessage(LM_GETSELLEN, Self, nil);
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetSelLength
Params: val -
Returns: nothing
Sets length of selected text.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetSelLength(Val : integer);
begin
HandleNeeded;
CNSendMessage(LM_SETSELLEN, Self, Pointer(Val));
end;
{------------------------------------------------------------------------------}
{ procedure TCustomComboBox.SetStyle }
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetStyle
Params: val - new style for combobox
Returns: nothing
Sets a new style for the combobox.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetStyle(Val : TComboBoxStyle);
begin
if Val <> FStyle then begin
FStyle:= Val;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetItems
Params: value - stringlist with items for combobox
Returns: nothing
Assigns items for ComboBox from a stringlist.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetItems(Value : TStrings);
begin
if Value <> FItems then begin
FItems.Assign(Value);
end;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.Create
Params: AOwner - owner of the object
Returns: reference to the newly created object
Creates the object.
------------------------------------------------------------------------------}
constructor TCustomComboBox.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
fCompStyle := csComboBox;
SetBounds(1,1,100,25);
FItems:= TStringList.Create;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.Destroy
Params: ---
Returns: nothing
Destroys the object.
------------------------------------------------------------------------------}
destructor TCustomComboBox.Destroy;
begin
FItems.Free;
inherited Destroy;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.GetItemIndex
Params: ---
Returns: index of the currently selected item
Returns index of the currently selected item in the combobox. -1 is returned
if no item is currently selected.
------------------------------------------------------------------------------}
function TCustomComboBox.GetItemIndex : integer;
var Counter : integer;
CacheText : string;
begin
{ I am not sure whether the item remains selected after the user pressed the item }
{ Result:= CNSendMessage(LM_GETITEMINDEX, Self, nil);}
CacheText:= Text;
Result:= -1;
for Counter:= 0 to Items.Count - 1 do begin
if Items.Strings[Counter] = CacheText then begin
Result:= Counter;
Break;
end;
end;
end;
{------------------------------------------------------------------------------
Method: TCustomComboBox.SetItemIndex
Params: Val -
Returns: nothing
Sets ths index of the currently selected item in the combobox.
------------------------------------------------------------------------------}
procedure TCustomComboBox.SetItemIndex(Val : integer);
begin
if (Val < 0) or (Val > FItems.Count) then raise Exception.Create('Out of bounds in TCustomComboBox.SetItemIndex');
HandleNeeded;
CNSendMessage(LM_SETITEMINDEX, Self, Pointer(Val));
end;
{
$Log$
Revision 1.1 2000/07/13 10:28:25 michael
+ Initial import
Revision 1.4 2000/07/09 20:41:44 lazarus
Added Attachsignals method to custombobobox, stoppok
Revision 1.3 2000/06/29 21:08:07 lazarus
some minor improvements &more comments, stoppok
}