LCL & Cocoa: fix the bugs in TCustomComboBoxEx/TCocoaWSCustomComboBox

This commit is contained in:
rich2014 2023-09-03 22:43:14 +08:00
parent f99643fe6d
commit 9490d8cdc6
3 changed files with 15 additions and 2 deletions

View File

@ -301,7 +301,7 @@ end;
procedure TCustomComboBoxEx.AddItem(const Item: String; AnObject: TObject);
begin
Insert(ItemsEx.Count, Item);
ItemsEx[ItemsEx.Count].Data:=AnObject;
ItemsEx[ItemsEx.Count-1].Data:=AnObject;
end;
procedure TCustomComboBoxEx.AssignItemsEx(AItemsEx: TComboExItems);

View File

@ -300,6 +300,8 @@ type
{ TCocoaReadOnlyComboBoxList }
TCocoaReadOnlyComboBoxList = class(TCocoaComboBoxList)
private
FId: Integer;
protected
FOwner: TCocoaReadOnlyComboBox;
procedure InsertItem(Index: Integer; const S: string; O: TObject); override;
@ -323,6 +325,7 @@ type
isOwnerDrawn: Boolean;
isOwnerMeasure: Boolean;
isComboBoxEx: Boolean;
function acceptsFirstResponder: LCLObjCBoolean; override;
procedure dealloc; override;
function lclGetCallback: ICommonCallback; override;
@ -491,7 +494,16 @@ begin
mn := FOwner.itemAtIndex(Index);
if not Assigned(mn) then Exit;
astr := NSStringUtf8(S);
// for TComboBoxEx, the parameter S passed in is always emtpy,
// and NSPopUpButton always automatically sets the itemIndex according to
// the title, so a unique title needs to be set.
if not FOwner.isComboBoxEx then
astr := NSStringUtf8(S)
else
begin
astr := NSStringUtf8(FId.ToString);
inc(FId);
end;
mn.setTitle(astr);
astr.release;

View File

@ -1880,6 +1880,7 @@ begin
begin
rocmb := NSView(TCocoaReadOnlyComboBox.alloc).lclInitWithCreateParams(AParams);
if not Assigned(rocmb) then Exit;
rocmb.isComboBoxEx:= not (AWinControl is TComboBox);
rocmb.list:=TCocoaReadOnlyComboBoxList.Create(rocmb);
rocmb.setTarget(rocmb);
rocmb.setAction(objcselector('comboboxAction:'));