{%MainUnit ../stdctrls.pp} {****************************************************************************** TCustomComboBox ****************************************************************************** ***************************************************************************** * * * 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. * * * ***************************************************************************** } {------------------------------------------------------------------------------ Method: TCustomComboBox.CreateWnd Params: --- Returns: Nothing Create the underlying interface-object. ------------------------------------------------------------------------------} procedure TCustomComboBox.CreateWnd; var NewStrings: TStrings; begin inherited CreateWnd; // get the interface based item list NewStrings:= TWSCustomComboBoxClass(WidgetSetClass).GetItems(Self); // then delete internal list if (FItems<>NewStrings) and (FItems<>nil) then begin NewStrings.Assign(FItems); FItems.Free; end; // and use the interface based list FItems:= NewStrings; if FItemIndex <> -1 then TWSCustomComboBoxClass(WidgetSetClass).SetItemIndex(Self, FItemIndex); TWSCustomComboBoxClass(WidgetSetClass).SetStyle(Self, FStyle); TWSCustomComboBoxClass(WidgetSetClass).SetArrowKeysTraverseList(Self, FArrowKeysTraverseList); end; {------------------------------------------------------------------------------ Method: TCustomComboBox.DestroyWnd Params: --- Returns: Nothing Destroy the underlying interface-object. ------------------------------------------------------------------------------} procedure TCustomComboBox.DestroyWnd; var NewStrings : TStrings; begin if not HandleAllocated then begin if (length(Name) div (length(Name) div 10000))=0 then ; end; // create an internal list for storing items internally NewStrings:= TStringList.Create; // copy from interface based list if FItems<>nil then begin NewStrings.Assign(FItems); // delete interface based list FItems.Free; end; // and use the internal list FItems:= NewStrings; inherited DestroyWnd; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); ------------------------------------------------------------------------------} procedure TCustomComboBox.DrawItem(Index: Integer; ARect: TRect; State: TOwnerDrawState); begin //TControlCanvas(FCanvas).UpdateTextFlags; if Assigned(FOnDrawItem) then FOnDrawItem(Self, Index, ARect, State) else if not (odPainted in State) then begin FCanvas.FillRect(ARect); FCanvas.TextOut(ARect.Left + 2, ARect.Top, Items[Index]); end; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.InitializeWnd Params: --- Returns: Nothing Initialize window after it has been created. ------------------------------------------------------------------------------} procedure TCustomComboBox.InitializeWnd; var ASelStart, ASelLength : integer; begin inherited InitializeWnd; if FSelStart <> FSelLength then begin ASelStart:= FSelStart; ASelLength:= FSelLength; SelStart:= ASelStart; SelLength:= ASelLength; end; 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); begin if (Val <> FSorted) then begin FSorted:= Val; UpdateSorted; 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; if Val<>MaxLength then begin fMaxlength:=Val; if HandleAllocated then TWSCustomComboBoxClass(WidgetSetClass).SetMaxLength(Self, Val); end; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.GetMaxLength Params: --- Returns: the maximum length of user input Get the maximum length for user input. ------------------------------------------------------------------------------} function TCustomComboBox.GetMaxLength : integer; begin if HandleAllocated then fMaxLength := TWSCustomComboBoxClass(WidgetSetClass).GetMaxLength(Self); Result:=fMaxLength; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.DoChange Params: msg - Returns: Nothing Call handler for "OnChange"-event if one is assigned. ------------------------------------------------------------------------------} procedure TCustomComboBox.LMChange(var Msg); begin Change; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.Change; Called on change ------------------------------------------------------------------------------} procedure TCustomComboBox.Change; begin inherited Changed; if Assigned(FOnChange) then FOnChange(Self); end; {------------------------------------------------------------------------------ procedure TCustomComboBox.Select; Returns the selected part of text-field. ------------------------------------------------------------------------------} procedure TCustomComboBox.Select; begin if Assigned(FOnSelect) then FOnSelect(Self) else Change; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.DropDown; Called whenever the list popups. ------------------------------------------------------------------------------} procedure TCustomComboBox.DropDown; begin if Assigned(FOnDropDown) then FOnDropDown(Self); end; {------------------------------------------------------------------------------ procedure TCustomComboBox.CloseUp; Called whenever the list hides. ------------------------------------------------------------------------------} procedure TCustomComboBox.CloseUp; begin if [csLoading,csDestroying,csDesigning]*ComponentState<>[] then exit; EditingDone; if Assigned(FOnCloseUp) then FOnCloseUp(Self); end; {------------------------------------------------------------------------------ procedure TCustomComboBox.AdjustDropDown; ------------------------------------------------------------------------------} procedure TCustomComboBox.AdjustDropDown; var Count, MinItemsWidth, MinItemsHeight: Integer; begin if (not HandleAllocated) or (not DroppedDown) then exit; Count := Items.Count; if Count > DropDownCount then Count := DropDownCount; if Count < 1 then Count := 1; MinItemsWidth:=ItemWidth; MinItemsHeight:=Count*ItemHeight; SetComboMinDropDownSize(Handle,MinItemsWidth,MinItemsHeight,Count); end; {------------------------------------------------------------------------------ Method: TCustomComboBox.GetSelText Params: --- Returns: selected text Returns the selected part of text-field. ------------------------------------------------------------------------------} function TCustomComboBox.GetSelText: string; begin //debugln('TCustomComboBox.GetSelText '); if FStyle in [csDropDown, csSimple] then Result:= Copy(Text, SelStart, 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(const Val: string); var OldText, NewText: string; begin //debugln('TCustomComboBox.SetSelText ',Val); if FStyle in [csDropDown, csSimple] then begin OldText:=Text; NewText:=LeftStr(OldText,SelStart-1)+Val +RightStr(OldText,length(OldText)-SelStart-SelLength+1); Text:=NewText; end; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.GetSelStart Params: --- Returns: starting index of selected text Returns starting index of selected text ------------------------------------------------------------------------------} function TCustomComboBox.GetSelStart : integer; begin if HandleAllocated then fSelStart:=TWSCustomComboBoxClass(WidgetSetClass).GetSelStart(Self); Result:=fSelStart; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.SetSelStart Params: val - Returns: nothing Sets starting index for selected text. ------------------------------------------------------------------------------} procedure TCustomComboBox.SetSelStart(Val : integer); begin fSelStart:=Val; if HandleAllocated then TWSCustomComboBoxClass(WidgetSetClass).SetSelStart(Self, Val); end; {------------------------------------------------------------------------------ Method: TCustomComboBox.GetSelLength Params: --- Returns: length of selected text Returns length of selected text ------------------------------------------------------------------------------} function TCustomComboBox.GetSelLength : integer; begin if HandleAllocated then fSelLength := TWSCustomComboBoxClass(WidgetSetClass).GetSelLength(Self); Result:=fSelLength; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.SetSelLength Params: val - Returns: nothing Sets length of selected text. ------------------------------------------------------------------------------} procedure TCustomComboBox.SetSelLength(Val : integer); begin fSelLength:=Val; if HandleAllocated then TWSCustomComboBoxClass(WidgetSetClass).SetSelLength(Self, Val); end; {------------------------------------------------------------------------------ Method: TCustomComboBox.SelectAll Params: - Returns: nothing Select entire text. ------------------------------------------------------------------------------} procedure TCustomComboBox.SelectAll; var CurText: String; begin //debugln('TCustomComboBox.SelectAll '); if (FStyle in [csDropDown, csSimple]) then begin CurText:=Text; if (CurText <> '') then begin SetSelStart(0); SetSelLength(Length(CurText)); end; end; end; {------------------------------------------------------------------------------ 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; if HandleAllocated and ([csLoading,csDestroying]*ComponentState=[]) then TWSCustomComboBoxClass(WidgetSetClass).SetStyle(Self, Val); end; end; procedure TCustomComboBox.SetArrowKeysTraverseList(Value : Boolean); begin if Value <> FArrowKeysTraverseList then begin FArrowKeysTraverseList := Value; if HandleAllocated and ([csLoading,csDestroying]*ComponentState=[]) then TWSCustomComboBoxClass(WidgetSetClass).SetArrowKeysTraverseList(Self, Value); end; end; procedure TCustomComboBox.KeyDown(var Key: Word; Shift: TShiftState); var skip : Boolean; begin Skip := False; if AutoDropDown or ((Shift *[ssCtrl] = [ssCtrl]) and (Key = VK_DOWN)) or FReturnArrowState then begin case Key of VK_TAB,VK_RETURN: begin if FReturnArrowState = True then begin SetArrowKeysTraverseList(False); //we need this here, else we cannot traverse popup list FReturnArrowState := False; end; DroppedDown := False; end; else begin if ArrowKeysTraverseList = False then begin SetArrowKeysTraverseList(True); //we need this here, else we cannot traverse popup list FReturnArrowState := True; Skip := True; end; //AutoDropDown := True; DroppedDown := True; end; end; end; if Style=csDropDownList then begin //debugln('TCustomComboBox.KeyDown '); // DropDownList: allow only navigation keys if not (Key in [VK_UP,VK_DOWN,VK_END,VK_HOME,VK_PRIOR,VK_NEXT,VK_TAB, VK_RETURN]) then begin Key:=0; end; end; if Skip then Key := 0 else inherited KeyDown(Key, Shift); end; {------------------------------------------------------------------------------ function TCustomComboBox.SelectItem(const AnItem: String): Boolean; Selects the item with the Text of AnItem ------------------------------------------------------------------------------} function TCustomComboBox.SelectItem(const AnItem: String): Boolean; var i: integer; ValueChanged: boolean; begin i:=Items.IndexOf(AnItem); if i>=0 then begin Result:=true; ValueChanged:=ItemIndex<>i; ItemIndex:=i; Text:=Items[i]; if ValueChanged then begin Click; Select; end; end else Result:=false; end; {------------------------------------------------------------------------------ function TCustomComboBox.GetItemCount: Integer; Returns the number of items ------------------------------------------------------------------------------} function TCustomComboBox.GetItemCount: Integer; begin Result:=Items.Count; end; {------------------------------------------------------------------------------ function TCustomComboBox.GetItemHeight: Integer; Gets default ItemHeight. ------------------------------------------------------------------------------} function TCustomComboBox.GetItemHeight: Integer; begin Result:=FItemHeight; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.SetDropDownCount(const AValue: Integer); Sets the number of items that fits into the drop down list. ------------------------------------------------------------------------------} procedure TCustomComboBox.SetDropDownCount(const AValue: Integer); begin FDropDownCount:=AValue; // ToDo end; {------------------------------------------------------------------------------ procedure TCustomComboBox.SetItemHeight(const AValue: Integer); Sets default ItemHeight. 0 or negative values are ignored. ------------------------------------------------------------------------------} procedure TCustomComboBox.SetItemHeight(const AValue: Integer); begin if AValue=FItemHeight then exit; FItemHeight:=AValue; // ToDo end; {------------------------------------------------------------------------------ function TCustomComboBox.GetDroppedDown: Boolean; Returns true, if list is shown. ------------------------------------------------------------------------------} function TCustomComboBox.GetDroppedDown: Boolean; begin Result:=FDroppedDown; end; {------------------------------------------------------------------------------ function TCustomComboBox.GetItemWidth: Integer; The ItemWidth is the minimum pixels, that is allocated for the items in the dropdown list. ------------------------------------------------------------------------------} function TCustomComboBox.GetItemWidth: Integer; begin Result:=FItemWidth; end; {------------------------------------------------------------------------------ function TCustomComboBox.GetDroppedDown: Boolean; ------------------------------------------------------------------------------} procedure TCustomComboBox.SetDroppedDown(const AValue: Boolean); begin if FDroppedDown=AValue then exit; if (not HandleAllocated) or (csLoading in ComponentState) then exit; ComboBoxDropDown(Handle,AValue); end; {------------------------------------------------------------------------------ procedure TCustomComboBox.SetItemWidth(const AValue: Integer); The ItemWidth is the minimum pixels, that is allocated for the items in the dropdown list. ------------------------------------------------------------------------------} procedure TCustomComboBox.SetItemWidth(const AValue: Integer); begin if FItemWidth=AValue then exit; FItemWidth:=AValue; AdjustDropDown; 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(TheOwner : TComponent); begin inherited Create(TheOwner); fCompStyle := csComboBox; SetInitialBounds(0,0,100,25); FItems := TStringlist.Create; FItemIndex:=-1; FDropDownCount:=8; FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := Self; ArrowKeysTraverseList := True; TabStop := true; ParentColor := false; end; {------------------------------------------------------------------------------ Method: TCustomComboBox.Destroy Params: --- Returns: nothing Destroys the object. ------------------------------------------------------------------------------} destructor TCustomComboBox.Destroy; begin if HandleAllocated then DestroyHandle; FCanvas.Free; FCanvas:=nil; FItems.Free; FItems:=nil; inherited Destroy; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.AddItem(const Item: String; AnObject: TObject); Adds an Item with an associated object to Items ------------------------------------------------------------------------------} procedure TCustomComboBox.AddItem(const Item: String; AnObject: TObject); begin Items.AddObject(Item,AnObject); end; {------------------------------------------------------------------------------ procedure TCustomComboBox.AddHistoryItem(const Item: string; MaxHistoryCount: integer; SetAsText, CaseSensitive: boolean); Adds an Item as first item. Removes the Item from old positions and removes last item if history is full. ------------------------------------------------------------------------------} procedure TCustomComboBox.AddHistoryItem(const Item: string; MaxHistoryCount: integer; SetAsText, CaseSensitive: boolean); begin AddHistoryItem(Item,nil,MaxHistoryCount,SetAsText,CaseSensitive); end; {------------------------------------------------------------------------------ procedure TCustomComboBox.AddHistoryItem(const Item: string; AnObject: TObject; MaxHistoryCount: integer; SetAsText, CaseSensitive: boolean); Adds an Item as first item. Removes the Item from old positions and removes last item if history is full. ------------------------------------------------------------------------------} procedure TCustomComboBox.AddHistoryItem(const Item: string; AnObject: TObject; MaxHistoryCount: integer; SetAsText, CaseSensitive: boolean); var i: integer; begin // insert as first if (Items.Count=0) or (CaseSensitive and (AnsiCompareText(Items[0],Item)<>0)) or (not CaseSensitive and (Items[0]<>Item)) then begin Items.InsertObject(0,Item,AnObject); end; // delete old for i:=Items.Count-1 downto 1 do begin if (CaseSensitive and (AnsiCompareText(Items[i],Item)=0)) or (not CaseSensitive and (Items[i]=Item)) then Items.Delete(i); end; // delete overflow items while Items.Count>MaxHistoryCount do Items.Delete(Items.Count-1); // set as text if SetAsText then Text:=Item; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.Clear; Removes all Items ------------------------------------------------------------------------------} procedure TCustomComboBox.Clear; begin Items.Clear; Text:=''; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.ClearSelection; Unselects all items. ------------------------------------------------------------------------------} procedure TCustomComboBox.ClearSelection; begin ItemIndex := -1; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.MeasureItem(Index: Integer; var TheHeight: Integer); ------------------------------------------------------------------------------} procedure TCustomComboBox.MeasureItem(Index: Integer; var TheHeight: Integer); begin if Assigned(OnMeasureItem) then OnMeasureItem(Self,Index,TheHeight); 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; begin if HandleAllocated then FItemIndex:= TWSCustomComboBoxClass(WidgetSetClass).GetItemIndex(Self); Result:=FItemIndex; 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=GetItemIndex then exit; FItemIndex:= Val; //if (FItemIndex>=0) and (not (csLoading in ComponentState)) then // Text:=FItems[FItemIndex]; if HandleAllocated then TWSCustomComboBoxClass(WidgetSetClass).SetItemIndex(Self, FItemIndex); end; {------------------------------------------------------------------------------ Procedure TCustomComboBox.LMDrawListItem(var TheMessage : TLMDrawListItem); Handler for custom drawing items. ------------------------------------------------------------------------------} Procedure TCustomComboBox.LMDrawListItem(var TheMessage : TLMDrawListItem); begin with TheMessage.DrawListItemStruct^ do begin FCanvas.Handle := DC; if Font<>nil then FCanvas.Font := Font; if Brush<>nil then FCanvas.Brush := Brush; if (ItemID >= 0) and (odSelected in ItemState) then begin FCanvas.Brush.Color := clHighlight; FCanvas.Font.Color := clHighlightText end; DrawItem(ItemID, Area, ItemState); if odFocused in ItemState then {DrawFocusRect(hDC, rcItem)}; FCanvas.Handle := 0; end; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.CNCommand(var TheMessage: TLMCommand); Handler for various notifications. ------------------------------------------------------------------------------} procedure TCustomComboBox.CNCommand(var TheMessage: TLMCommand); begin case TheMessage.NotifyCode of {CBN_DBLCLK: DblClick; CBN_EDITCHANGE: Change;} CBN_DROPDOWN: begin FDroppedDown:=true; DropDown; AdjustDropDown; end; {CBN_SELCHANGE: begin Text := Items[ItemIndex]; Click; Select; end;} CBN_CLOSEUP: begin FDroppedDown:=false; CloseUp; end; {CBN_SETFOCUS: begin FIsFocused := True; FFocusChanged := True; SetIme; end; CBN_KILLFOCUS: begin FIsFocused := False; FFocusChanged := True; ResetIme; end;} end; end; {------------------------------------------------------------------------------ procedure TCustomComboBox.UpdateSorted; ------------------------------------------------------------------------------} procedure TCustomComboBox.UpdateSorted; begin if not HandleAllocated then exit; TWSCustomComboBoxClass(WidgetSetClass).Sort(Self, Items, FSorted); end; // included by stdctrls.pp { $Log$ Revision 1.49 2004/11/27 22:29:56 vincents fixed setting itemindex, if it had been changed by the interface before Revision 1.48 2004/10/17 14:40:38 micha fix parentcolor initialization, in createwnd is too late Revision 1.47 2004/09/20 21:01:04 micha convert LM_SETPROPERTIES to interface methods for TCustomComboBox Revision 1.46 2004/09/07 10:26:16 micha fix logs to get rid of comment level 2 warning Revision 1.45 2004/09/07 09:44:46 micha convert lcl messages to new interface using methods: LM_G/SETSELSTART, LM_G/SETSELLEN, LM_G/SETLIMITTEXT Revision 1.44 2004/09/01 10:25:58 mattias added some project flags to start getting rid of TProjectType Revision 1.43 2004/08/30 10:49:20 mattias fixed focus catch for combobox csDropDownList Revision 1.42 2004/08/13 16:40:47 mazen + TCharater type used to allow UTF8 keyboard with gtk2 Revision 1.41 2004/07/16 21:49:00 mattias added RTTI controls Revision 1.40 2004/07/10 18:17:30 mattias added Delphi ToDo support, Application.WndProc, small bugfixes from Colin Revision 1.39 2004/05/30 08:53:27 mattias TComboBox.Clear now clears Text as well Revision 1.38 2004/04/10 17:58:57 mattias implemented mainunit hints for include files Revision 1.37 2004/02/23 08:19:04 micha revert intf split Revision 1.35 2004/02/13 18:21:31 mattias fixed combo chane Revision 1.34 2004/01/21 10:19:16 micha enable tabstops for controls; implement tabstops in win32 intf Revision 1.33 2003/10/16 23:54:27 marc Implemented new gtk keyevent handling Revision 1.32 2003/09/20 13:27:49 mattias varois improvements for ParentColor from Micha Revision 1.31 2003/08/28 09:10:00 mattias listbox and comboboxes now set sort and selection at handle creation Revision 1.30 2003/08/27 09:20:44 mattias added TFrame definition, no implementation Revision 1.29 2003/07/26 13:26:56 mattias fixed WindowProc Revision 1.28 2003/06/12 16:18:23 mattias applied TComboBox fix for grabbing keys from Yoyong Revision 1.27 2003/06/10 13:35:54 mattias implemented TComboBox dropdown from Yoyong Revision 1.26 2003/06/07 09:34:21 mattias added ambigius compiled unit test for packages Revision 1.25 2003/04/11 17:10:20 mattias added but not implemented ComboBoxDropDown Revision 1.24 2003/01/01 10:46:59 mattias fixes for win32 listbox/combobox from Karl Brandt Revision 1.23 2002/11/17 11:10:04 mattias TComboBox and TListBox accelerated and now supports objects Revision 1.22 2002/11/17 00:18:11 mattias fixed combobox createhandle Revision 1.21 2002/11/15 23:40:40 mattias added combobox createhandle old list assign Revision 1.20 2002/10/05 10:37:21 lazarus MG: fixed TComboBox.ItemIndex on CreateWnd Revision 1.19 2002/10/04 20:46:51 lazarus MG: improved TComboBox.SetItemIndex Revision 1.18 2002/10/04 14:24:14 lazarus MG: added DrawItem to TComboBox/TListBox Revision 1.17 2002/10/03 18:04:46 lazarus MG: started customdrawitem Revision 1.16 2002/10/03 14:47:30 lazarus MG: added TComboBox.OnPopup+OnCloseUp+ItemWidth Revision 1.15 2002/10/02 14:23:23 lazarus MG: added various history lists Revision 1.14 2002/09/16 16:06:21 lazarus MG: replaced halt with raiseexception Revision 1.13 2002/09/16 15:42:17 lazarus MG: fixed calling DestroyHandle if not HandleAllocated Revision 1.12 2002/08/31 11:37:09 lazarus MG: fixed destroying combobox Revision 1.11 2002/08/30 06:46:03 lazarus Use comboboxes. Use history. Prettify the dialog. Preselect text on show. Make the findreplace a dialog. Thus removing resiying code (handled by Anchors now anyway). Make Anchors work again and publish them for various controls. SelStart and Co. for TEdit, SelectAll procedure for TComboBox and TEdit. Clean up and fix some bugs for TComboBox, plus selection stuff. Revision 1.10 2002/08/29 00:07:01 lazarus MG: fixed TComboBox and InvalidateControl Revision 1.9 2002/08/27 18:45:13 lazarus MG: propedits text improvements from Andrew, uncapturing, improved comobobox Revision 1.8 2002/05/10 06:05:51 lazarus MG: changed license to LGPL Revision 1.7 2002/04/18 08:09:03 lazarus MG: added include comments Revision 1.6 2002/03/25 17:59:20 lazarus GTK Cleanup Shane Revision 1.5 2001/06/04 09:32:17 lazarus MG: fixed bugs and cleaned up messages Revision 1.4 2001/01/28 03:51:42 lazarus Fixed the problem with Changed for ComboBoxs Shane Revision 1.3 2000/11/29 21:22:35 lazarus New Object Inspector code Shane Revision 1.2 2000/07/23 19:03:10 lazarus changed some comments, stoppok 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 }