mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-23 20:43:32 +02:00
326 lines
10 KiB
PHP
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
|
|
|
|
}
|