Ignore:
Timestamp:
Jul 7, 2010, 4:31:10 PM (14 years ago)
Author:
Kevin Toppenberg
Message:

Upgrade to version 27

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cprs/trunk/CPRS-Lib/ORCtrls.pas

    r456 r829  
    77uses Windows, Messages, SysUtils, Classes, Graphics, Controls, StdCtrls, Forms,
    88     ComCtrls, Commctrl, Buttons, ExtCtrls, Grids, ImgList, Menus, CheckLst,
    9      Accessibility_TLB, Variants;
     9     Variants, VAClasses;
    1010
    1111const
     
    2121
    2222type
    23 
    24   TORStaticText = class(TStaticText)
    25   private
    26      FOnEnter: TNotifyEvent;
    27      FOnExit: TNotifyEvent;
    28   published
    29      property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
    30      property OnExit: TNotifyEvent read FOnExit write FOnExit;
    31      procedure DoEnter; override;
    32      procedure DoExit; override;
     23  IORBlackColorModeCompatible = interface(IInterface)
     24  ['{3554985C-F524-45FA-8C27-4CDD8357DB08}']
     25    procedure SetBlackColorMode(Value: boolean);
    3326  end;
    3427
     
    8174  end;
    8275
    83   TORListBox = class(TListBox)
     76  TORListBox = class(TListBox, IVADynamicProperty, IORBlackColorModeCompatible)
    8477  private
    8578    FFocusIndex: Integer;                        // item with focus when using navigation keys
     
    127120    FMItems: TORStrings;                         // Used to save corresponding M strings ("the pieces")
    128121    FCaption: TStaticText;                       // Used to supply a title to IAccessible interface
    129     FAccessible: IAccessible;
    130122    FCaseChanged: boolean;                       // If true, the names are stored in the database as all caps, but loaded and displayed in mixed-case
    131123    FLookupPiece: integer;                       // If zero, list look-up comes from display string; if non-zero, indicates which piece of the item needs to be used for list lookup
    132     procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT;
     124    FIsPartOfComboBox: boolean;
     125    FBlackColorMode: boolean;
     126    FHideSelection: boolean;
    133127    procedure AdjustScrollBar;
    134128    procedure CreateScrollBar;
     
    214208    procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
    215209    function GetIndexFromY(YPos :integer) :integer;
     210    property isPartOfComboBox: boolean read FIsPartOfComboBox write FIsPartOfComboBox default False;
    216211    property HideSynonyms: boolean read FHideSynonyms write SetHideSynonyms default FALSE;
    217212    property SynonymChars: string read FSynonymChars write SetSynonymChars;
     
    241236    property CheckedState[Index: Integer]: TCheckBoxState read GetCheckedState write SetCheckedState;
    242237    property MItems: TStrings read GetMItems write SetMItems;
    243     procedure MakeAccessible(Accessible: IAccessible);
    244238    function VerifyUnique(SelectIndex: Integer; iText: String): integer;
     239    procedure SetBlackColorMode(Value: boolean);
     240    function SupportsDynamicProperty(PropertyID: integer): boolean;
     241    function GetDynamicProperty(PropertyID: integer): string;
     242    property HideSelection: boolean read FHideSelection write FHideSelection;
    245243  published
    246244    property AllowGrayed: boolean read FAllowGrayed write FAllowGrayed default FALSE;
     
    303301  end;
    304302
    305   TORComboBox = class(TWinControl)
     303  TORComboBox = class(TWinControl, IVADynamicProperty, IORBlackColorModeCompatible)
    306304  private
    307305    FItems: TStrings;                            // points to Items in FListBox
     
    340338    FCharsNeedMatch: integer;                    // how many text need to be matched for auto selection
    341339    FUniqueAutoComplete: Boolean;                // If true only perform autocomplete for unique list items.
     340    FBlackColorMode: boolean;
     341    FDisableHints: boolean;                      // true if hints have been disabled because drop down window was opened
     342    FDropDownStatusChangedCount: integer;        // prevents multiple calls to disabling hint window
     343    procedure DropDownStatusChanged(opened: boolean);
     344    procedure ClearDropDownStatus;
    342345    function EditControl: TWinControl;
    343346    procedure AdjustSizeOfSelf;
     
    440443    procedure SetLookupPiece(const Value: integer);
    441444    procedure SetUniqueAutoComplete(const Value: Boolean);
     445    procedure LoadComboBoxImage;
    442446  protected
    443447    procedure DropPanelBtnPressed(OKBtn, AutoClose: boolean);
     
    452456  public
    453457    constructor Create(AOwner: TComponent); override;
     458    destructor Destroy; override;
    454459    function AddReference(const S: string; AReference: Variant): Integer;
    455460    procedure Clear;
     
    458463    procedure InitLongList(S: string);
    459464    procedure InsertSeparator;
     465    procedure Invalidate; override;
    460466    procedure SetTextAutoComplete(TextToMatch : String);
    461467    function GetIEN(AnIndex: Integer): Int64;
     
    466472    procedure InsertReference(Index: Integer; const S: string; AReference: Variant);
    467473    procedure SelectAll;
    468     function MakeAccessible( Accessible: IAccessible): TORListBox;
     474    procedure SetBlackColorMode(Value: boolean);
     475    function SupportsDynamicProperty(PropertyID: integer): boolean;
     476    function GetDynamicProperty(PropertyID: integer): string;
    469477    property DisplayText[Index: Integer]: string read GetDisplayText;
    470478    property DroppedDown: Boolean read FDroppedDown write SetDroppedDown;
     
    648656
    649657
    650   TCaptionTreeView = class(TTreeView)
     658  TCaptionTreeView = class(TTreeView, IVADynamicProperty)
    651659  private
    652660    procedure SetCaption(const Value: string);
     
    654662  protected
    655663    FCaptionComponent: TStaticText;
     664  public
     665    function SupportsDynamicProperty(PropertyID: integer): boolean;
     666    function GetDynamicProperty(PropertyID: integer): string;
    656667  published
    657668    property Align;
     
    665676    FTag: integer;
    666677    FStringData: string;
    667     FAccessible: IAccessible;
    668678    FCaption: string;
    669     procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT;
    670679    function GetParent: TORTreeNode;
    671680    procedure SetCaption(const Value: string);
     
    679688    function GetORTreeView: TORTreeView;
    680689  public
    681     procedure MakeAccessible(Accessible: IAccessible);
    682690    procedure SetPiece(PieceNum: Integer; const NewPiece: string);
    683691    procedure EnsureVisible;
    684     property Accessible: IAccessible read FAccessible write MakeAccessible;
    685692    property Bold: boolean read GetBold write SetBold;
    686693    property Tag: integer read FTag write FTag;
     
    700707    FPiece: integer;
    701708    FOnAddition: TTVExpandedEvent;
    702     FAccessible: IAccessible;
    703709    FShortNodeCaptions: boolean;
    704710    FOnNodeCaptioning: TNodeCaptioningEvent;
    705     procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT;
    706711    procedure SetShortNodeCaptions(const Value: boolean);
    707712  protected
     
    716721  public
    717722    constructor Create(AOwner: TComponent); override;
    718     procedure MakeAccessible(Accessible: IAccessible);
    719723    function FindPieceNode(Value: string;
    720724                           ParentDelim: Char = #0; StartNode: TTreeNode = nil): TORTreeNode; overload;
     
    776780  TGrayedStyle = (gsNormal, gsQuestionMark, gsBlueQuestionMark);
    777781
    778   TORCheckBox = class(TCheckBox)
     782  TORCheckBox = class(TCheckBox, IORBlackColorModeCompatible)
    779783  private
    780784    FStringData: string;
     
    793797    FAssociate: TControl;
    794798    FFocusOnBox: boolean;
     799    FBlackColorMode: boolean;
    795800    procedure SetFocusOnBox(value: boolean);
    796801    procedure CNMeasureItem    (var Message: TWMMeasureItem);   message CN_MEASUREITEM;
     
    835840    destructor Destroy; override;
    836841    procedure AutoAdjustSize;
     842    procedure SetBlackColorMode(Value: boolean);
    837843    property SingleLine: boolean read FSingleLine;
    838844    property StringData: string read FStringData write FStringData;
     
    899905  end;
    900906
    901   TCaptionListBox = class(TListBox)
     907  TCaptionListBox = class(TListBox, IVADynamicProperty)
    902908  private
    903909    FHoverItemPos: integer;
    904     FAccessible: IAccessible;
    905910    FRightClickSelect: boolean;                  // When true, a right click selects teh item
    906911    FHintOnItem: boolean;
    907912    procedure SetCaption(const Value: string);
    908913    function GetCaption: string;
    909     procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT;
    910914    procedure WMRButtonUp(var Message: TWMRButtonUp); message WM_RBUTTONUP;
    911915    procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
     916    procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
     917    procedure MoveFocusDown;
     918    procedure MoveFocusUp;
    912919  protected
    913920    FCaptionComponent: TStaticText;
    914921    procedure DoEnter; override;
    915922  public
    916     procedure MakeAccessible( Accessible: IAccessible);
     923    function SupportsDynamicProperty(PropertyID: integer): boolean;
     924    function GetDynamicProperty(PropertyID: integer): string;
    917925  published
    918926    property RightClickSelect: boolean read FRightClickSelect write FRightClickSelect default FALSE;
     
    922930  end;
    923931
    924   TCaptionCheckListBox = class(TCheckListBox)
     932  TCaptionCheckListBox = class(TCheckListBox, IVADynamicProperty)
    925933  private
    926934    procedure SetCaption(const Value: string);
     
    928936  protected
    929937    FCaptionComponent: TStaticText;
     938  public
     939    function SupportsDynamicProperty(PropertyID: integer): boolean;
     940    function GetDynamicProperty(PropertyID: integer): string;
    930941  published
    931942    property Caption: string read GetCaption write SetCaption;
    932943  end;
    933944
    934   TCaptionMemo = class(TMemo)
     945  TCaptionMemo = class(TMemo, IVADynamicProperty)
    935946  private
    936947    procedure SetCaption(const Value: string);
     
    938949  protected
    939950    FCaptionComponent: TStaticText;
     951  public
     952    function SupportsDynamicProperty(PropertyID: integer): boolean;
     953    function GetDynamicProperty(PropertyID: integer): string;
    940954  published
    941955    property Caption: string read GetCaption write SetCaption;
    942956  end;
    943957
    944   TCaptionEdit = class(TEdit)
     958  TCaptionEdit = class(TEdit, IVADynamicProperty)
    945959  private
    946960    procedure SetCaption(const Value: string);
     
    948962  protected
    949963    FCaptionComponent: TStaticText;
     964  public
     965    function SupportsDynamicProperty(PropertyID: integer): boolean;
     966    function GetDynamicProperty(PropertyID: integer): string;
    950967  published
    951968    property Align;
     
    953970  end;
    954971
    955   TCaptionRichEdit = class(TRichEdit)
     972  TCaptionRichEdit = class(TRichEdit, IVADynamicProperty)
    956973  private
    957     FAccessible: IAccessible;
    958     procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT;
    959974  protected
    960975    FCaption: string;
    961976  public
    962     procedure MakeAccessible(Accessible: IAccessible);
     977    function SupportsDynamicProperty(PropertyID: integer): boolean;
     978    function GetDynamicProperty(PropertyID: integer): string;
    963979  published
    964980    property Align;
     
    966982  end;
    967983
    968   TCaptionComboBox = class(TComboBox)
     984  TCaptionComboBox = class(TComboBox, IVADynamicProperty)
    969985  private
    970986    procedure SetCaption(const Value: string);
     
    972988  protected
    973989    FCaptionComponent: TStaticText;
     990  public
     991    function SupportsDynamicProperty(PropertyID: integer): boolean;
     992    function GetDynamicProperty(PropertyID: integer): string;
    974993  published
    975994    property Caption: string read GetCaption write SetCaption;
    976995  end;
    977996
    978   TCaptionListView = class(TListView)
     997  TCaptionListView = class(TListView, IVADynamicProperty)
     998  public
     999    function SupportsDynamicProperty(PropertyID: integer): boolean;
     1000    function GetDynamicProperty(PropertyID: integer): string;
    9791001  published
    9801002    property Caption;
    9811003  end;
    9821004
    983   TCaptionStringGrid = class(TStringGrid)
     1005  TCaptionStringGrid = class(TStringGrid, IVADynamicProperty)
    9841006  private
    9851007    FJustToTab: boolean;
    9861008    FCaption: string;
    987     FAccessible: IAccessible;
    988     procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT;
    9891009  protected
    9901010    procedure KeyUp(var Key: Word; Shift: TShiftState); override;
    9911011  public
    992     procedure MakeAccessible( Accessible: IAccessible);
    9931012    procedure IndexToColRow( index: integer; var Col: integer; var Row: integer);
    9941013    function ColRowToIndex( Col: integer; Row: Integer): integer;
     1014    function SupportsDynamicProperty(PropertyID: integer): boolean;
     1015    function GetDynamicProperty(PropertyID: integer): string;
    9951016  published
    9961017    property Caption: string read FCaption write FCaption;
     
    10151036
    10161037uses
    1017   uAccessAPI;
     1038  VAUtils;
    10181039 
    10191040const
     
    14241445    'ORCB_RADIO_DISABLED_UNCHECKED', 'ORCB_RADIO_DISABLED_CHECKED');
    14251446
    1426 var
    1427   ORCBImages: array[TORCBImgIdx] of TBitMap;
    1428 
    1429 function GetORCBBitmap(Idx: TORCBImgIdx): TBitmap;
    1430 begin
    1431   if(not assigned(ORCBImages[Idx])) then
    1432   begin
    1433     ORCBImages[Idx] := TBitMap.Create;
    1434     ORCBImages[Idx].LoadFromResourceName(HInstance, CheckBoxImageResNames[Idx]);
    1435   end;
    1436   Result := ORCBImages[Idx];
     1447   BlackCheckBoxImageResNames: array[TORCBImgIdx] of PChar = (
     1448    'BLACK_ORLB_FLAT_UNCHECKED', 'BLACK_ORLB_FLAT_CHECKED', 'BLACK_ORLB_FLAT_GRAYED',
     1449    'BLACK_ORCB_QUESTIONMARK', 'BLACK_ORCB_BLUEQUESTIONMARK',
     1450    'BLACK_ORCB_DISABLED_UNCHECKED', 'BLACK_ORCB_DISABLED_CHECKED',
     1451    'BLACK_ORCB_DISABLED_GRAYED', 'BLACK_ORCB_DISABLED_QUESTIONMARK',
     1452    'BLACK_ORLB_FLAT_UNCHECKED', 'BLACK_ORLB_FLAT_CHECKED', 'BLACK_ORLB_FLAT_GRAYED',
     1453    'BLACK_ORCB_RADIO_UNCHECKED', 'BLACK_ORCB_RADIO_CHECKED',
     1454    'BLACK_ORCB_RADIO_DISABLED_UNCHECKED', 'BLACK_ORCB_RADIO_DISABLED_CHECKED');
     1455 
     1456var
     1457  ORCBImages: array[TORCBImgIdx, Boolean] of TBitMap;
     1458
     1459function GetORCBBitmap(Idx: TORCBImgIdx; BlackMode: boolean): TBitmap;
     1460var
     1461  ResName: string;
     1462begin
     1463  if(not assigned(ORCBImages[Idx, BlackMode])) then
     1464  begin
     1465    ORCBImages[Idx, BlackMode] := TBitMap.Create;
     1466    if BlackMode then
     1467      ResName := BlackCheckBoxImageResNames[Idx]
     1468    else
     1469      ResName := CheckBoxImageResNames[Idx];
     1470    ORCBImages[Idx, BlackMode].LoadFromResourceName(HInstance, ResName);
     1471  end;
     1472  Result := ORCBImages[Idx, BlackMode];
    14371473end;
    14381474
     
    14401476var
    14411477  i: TORCBImgIdx;
     1478  mode: boolean;
    14421479
    14431480begin
    14441481  for i := low(TORCBImgIdx) to high(TORCBImgIdx) do
    14451482  begin
    1446     if(assigned(ORCBImages[i])) then
    1447       ORCBImages[i].Free;
    1448   end;
    1449 end;
    1450 
    1451 { TORStaticText }
    1452 
    1453 procedure TORStaticText.DoEnter;
    1454 begin
    1455   inherited DoEnter;
    1456   if Assigned(FOnEnter) then
    1457      FOnEnter(Self);
    1458 end;
    1459 
    1460 procedure TORStaticText.DoExit;
    1461 begin
    1462   inherited DoExit;
    1463   if Assigned(FOnExit) then
    1464      FOnExit(Self);
     1483    for Mode := false to true do
     1484    begin
     1485      if(assigned(ORCBImages[i, Mode])) then
     1486        ORCBImages[i, Mode].Free;
     1487    end;
     1488  end;
    14651489end;
    14661490
     
    16581682  FCaseChanged := TRUE;
    16591683  FLookupPiece := 0;
     1684  FIsPartOfComboBox := False;
    16601685end;
    16611686
     
    17681793    SetString(Result, Buf, Len);
    17691794  end;
     1795end;
     1796
     1797function TORListBox.GetDynamicProperty(PropertyID: integer): string;
     1798begin
     1799  if PropertyID = DynaPropAccesibilityCaption then
     1800    Result := GetCaption
     1801  else
     1802    Result := '';
    17701803end;
    17711804
     
    20162049  case Message.CharCode of
    20172050    VK_LBUTTON, VK_RETURN, VK_SPACE:
    2018     if FocusIndex > -1 then
    2019     begin
    2020       if MultiSelect then
     2051    begin
     2052      if (FocusIndex < 0) and (CheckBoxes or MultiSelect) and (Count > 0) then // JNM - 508 compliance
     2053        SetFocusIndex(0);
     2054      if FocusIndex > -1 then
    20212055      begin
    2022         IsSelected := LongBool(Perform(LB_GETSEL, FocusIndex, 0));
    2023         Perform(LB_SETSEL, Longint(not IsSelected), FocusIndex);
    2024       end
    2025       else Perform(LB_SETCURSEL, FocusIndex, 0);
    2026       // Send WM_COMMAND here because LBN_SELCHANGE not triggered by LB_SETSEL
    2027       // and LBN_SELCHANGE is what eventually triggers the Click event.
    2028       // The LBN_SELCHANGE documentation implies we should send the control id, which is
    2029       // 32 bits long, in the high word of WPARAM (16 bits).  Since that won't work - we'll
    2030       // try sending the item index instead.
    2031       //PostMessage() not SendMessage() is Required here for checkboxes, SendMessage() doesn't
    2032       //Allow the Checkbox state on the control to be updated
    2033       if CheckBoxes then
    2034         PostMessage(Parent.Handle, WM_COMMAND, MAKELONG(FocusIndex, LBN_SELCHANGE), LPARAM(Handle))
    2035       else
    2036         SendMessage(Parent.Handle, WM_COMMAND, MAKELONG(FocusIndex, LBN_SELCHANGE), LPARAM(Handle));
     2056        if MultiSelect then
     2057        begin
     2058          IsSelected := LongBool(Perform(LB_GETSEL, FocusIndex, 0));
     2059          Perform(LB_SETSEL, Longint(not IsSelected), FocusIndex);
     2060        end
     2061        else Perform(LB_SETCURSEL, FocusIndex, 0);
     2062        // Send WM_COMMAND here because LBN_SELCHANGE not triggered by LB_SETSEL
     2063        // and LBN_SELCHANGE is what eventually triggers the Click event.
     2064        // The LBN_SELCHANGE documentation implies we should send the control id, which is
     2065        // 32 bits long, in the high word of WPARAM (16 bits).  Since that won't work - we'll
     2066        // try sending the item index instead.
     2067        //PostMessage() not SendMessage() is Required here for checkboxes, SendMessage() doesn't
     2068        //Allow the Checkbox state on the control to be updated
     2069        if CheckBoxes then
     2070          PostMessage(Parent.Handle, WM_COMMAND, MAKELONG(FocusIndex, LBN_SELCHANGE), LPARAM(Handle))
     2071        else
     2072          SendMessage(Parent.Handle, WM_COMMAND, MAKELONG(FocusIndex, LBN_SELCHANGE), LPARAM(Handle));
     2073      end;
    20372074    end;
    20382075    VK_PRIOR:          SetFocusIndex(FocusIndex - FLargeChange);
     
    22362273  begin
    22372274    FLastItemIndex := ItemIndex;
     2275    if (not isPartOfComboBox) and (ItemIndex <> -1) then
     2276      SetFocusIndex(ItemIndex);
    22382277    if Assigned(FOnChange) then FOnChange(Self);
    22392278  end;
     
    22482287{  if (Items.Count > 0) and (Not IsAMouseButtonDown()) and (ItemIndex = -1) then
    22492288    SetFocusIndex(TopIndex);//ItemIndex := TopIndex; }
     2289  if FHideSelection and (ItemIndex < 0) and (FFocusIndex >= 0) then
     2290    ItemIndex := FFocusIndex;
    22502291  inherited DoEnter;
    22512292end;
    22522293
    22532294procedure TORListBox.DoExit;
     2295var
     2296  SaveIndex: integer;
    22542297{ make sure item tip is hidden for this listbox when focus shifts to something else }
    22552298begin
     2299  if FHideSelection then
     2300  begin
     2301    SaveIndex := ItemIndex;
     2302    ItemIndex := -1;
     2303    FFocusIndex := SaveIndex;
     2304  end;
     2305
    22562306  uItemTip.Hide;
    22572307  FItemTipActive := False;
     
    23212371procedure TORListBox.KeyPress(var Key: Char);
    23222372begin
     2373  {inherited KeyPress is changing the ' ' into #0, had to move conditional before inherited.}
     2374  if (Key = ' ') then begin
     2375    ToggleCheckBox(ItemIndex);
     2376    {The space bar causes the focus to jump to an item in the list that starts with
     2377     a space. Disable that function.}
     2378    Key := #0;
     2379  end;
    23232380  inherited;
    2324   if (Key = ' ') then ToggleCheckBox(ItemIndex);
    23252381end;
    23262382
     
    24592515              begin
    24602516                if(FFlatCheckBoxes) then
    2461                   BMap := GetORCBBitmap(iiFlatUnChecked)
     2517                  BMap := GetORCBBitmap(iiFlatUnChecked, FBlackColorMode)
    24622518                else
    2463                   BMap := GetORCBBitmap(iiUnchecked);
     2519                  BMap := GetORCBBitmap(iiUnchecked, FBlackColorMode);
    24642520              end;
    24652521            cbChecked:
    24662522              begin
    24672523                if(FFlatCheckBoxes) then
    2468                   BMap := GetORCBBitmap(iiFlatChecked)
     2524                  BMap := GetORCBBitmap(iiFlatChecked, FBlackColorMode)
    24692525                else
    2470                   BMap := GetORCBBitmap(iiChecked);
     2526                  BMap := GetORCBBitmap(iiChecked, FBlackColorMode);
    24712527              end;
    24722528            else // cbGrayed:
    24732529              begin
    24742530                if(FFlatCheckBoxes) then
    2475                   BMap := GetORCBBitmap(iiFlatGrayed)
     2531                  BMap := GetORCBBitmap(iiFlatGrayed, FBlackColorMode)
    24762532                else
    2477                   BMap := GetORCBBitmap(iiGrayed);
     2533                  BMap := GetORCBBitmap(iiGrayed, FBlackColorMode);
    24782534              end;
    24792535          end;
     
    24822538        begin
    24832539          if(FFlatCheckBoxes) then
    2484             BMap := GetORCBBitmap(iiFlatGrayed)
     2540            BMap := GetORCBBitmap(iiFlatGrayed, FBlackColorMode)
    24852541          else
    2486             BMap := GetORCBBitmap(iiGrayed);
     2542            BMap := GetORCBBitmap(iiGrayed, FBlackColorMode);
    24872543        end;
    24882544        TmpR := Rect;
     
    25842640    end;
    25852641  end;                                              // -- special long list processing - end
     2642  if (Value = SFI_END) or (not (Value < Items.Count)) then Value := Items.Count - 1;
    25862643  if (Value = SFI_TOP) or (Value < 0) then Value := 0;
    2587   if (Value = SFI_END) or (not (Value < Items.Count)) then Value := Items.Count - 1;
    25882644  FFocusIndex := Value;
    2589   ItemIndex := Value;
     2645  if Focused or (not FHideSelection) then
     2646    ItemIndex := Value;
    25902647  if MultiSelect then Perform(LB_SETCARETINDEX, FFocusIndex, 0) // LPARAM=0, scrolls into view
    25912648  else
     
    28502907end;
    28512908
     2909function TORListBox.SupportsDynamicProperty(PropertyID: integer): boolean;
     2910begin
     2911  Result := (PropertyID = DynaPropAccesibilityCaption);
     2912end;
     2913
    28522914procedure TORListBox.SetHideSynonyms(Value :boolean);
    28532915var
     
    29302992  Strings: TStringList;
    29312993  i, Pos: Integer;
    2932   ItemRec: PItemRec;
     2994  ItemRec, ItemRec2: PItemRec;
    29332995  SaveListMode: Boolean;
    29342996  RealVerify: Boolean;
     
    29603022      begin
    29613023        Pos := Items.AddObject(Strings[i], ItemRec^.UserObject);
    2962         References[Pos] := ItemRec^.Reference;
     3024        // CQ 11491 - Changing TabPositions, etc. was wiping out check box status.
     3025        FFromSelf := True;
     3026        ItemRec2 := PItemRec(SendMessage(Handle,LB_GETITEMDATA, Pos, 0));
     3027        FFromSelf := False;
     3028        if(assigned(ItemRec2)) then
     3029        begin
     3030          ItemRec2^.Reference := ItemRec^.Reference;
     3031          ItemRec2^.CheckedState := ItemRec^.CheckedState;
     3032        end;
    29633033      end;
    29643034    end;
     
    35053575end;
    35063576
     3577procedure TORListBox.SetBlackColorMode(Value: boolean);
     3578begin
     3579  FBlackColorMode := Value;
     3580end;
     3581
    35073582procedure TORListBox.SetCaption(const Value: string);
    35083583begin
     
    35273602end;
    35283603
    3529 procedure TORListBox.MakeAccessible(Accessible: IAccessible);
    3530 begin
    3531   if Assigned(FAccessible) and Assigned(Accessible) then
    3532     raise Exception.Create(Caption + ' List Box is already Accessible!')
    3533   else
    3534     FAccessible := Accessible;
    3535 end;
    3536 
    3537 procedure TORListBox.WMGetObject(var Message: TMessage);
    3538 begin
    3539   if (Message.LParam = integer(OBJID_CLIENT)) and Assigned(FAccessible) then
    3540     Message.Result := GetLResult(Message.wParam, FAccessible)
    3541   else
    3542     inherited;
     3604// In Delphi 2006, hint windows will cause the TORComboBox drop down list to
     3605// move behind a Stay on Top form.  Hints are also problematic with item tips in
     3606// the drop down list, so we disable them when ever a drop down list is open,
     3607// on all forms, not just stay on top forms.
     3608var
     3609  uDropPanelOpenCount: integer = 0;
     3610  uOldShowHintsSetting: boolean;
     3611
     3612procedure DropDownPanelOpened;
     3613begin
     3614  if uDropPanelOpenCount=0 then
     3615    uOldShowHintsSetting := Application.ShowHint;
     3616  Application.ShowHint := FALSE;
     3617  inc(uDropPanelOpenCount);
     3618end;
     3619
     3620procedure DropDownPanelClosed;
     3621begin
     3622  dec(uDropPanelOpenCount);
     3623  if uDropPanelOpenCount<=0 then
     3624  begin
     3625    uDropPanelOpenCount := 0;
     3626    if not Application.ShowHint then
     3627      Application.ShowHint := uOldShowHintsSetting
     3628  end;
    35433629end;
    35443630
     
    36903776const
    36913777  ComboBoxImages: array[boolean] of string = ('BMP_CBODOWN_DISABLED', 'BMP_CBODOWN');
    3692  
     3778  BlackComboBoxImages: array[boolean] of string = ('BLACK_BMP_CBODOWN_DISABLED', 'BLACK_BMP_CBODOWN');
     3779
    36933780procedure TORComboEdit.CreateParams(var Params: TCreateParams);
    36943781{ sets a one line edit box to multiline style so the editing rectangle can be changed }
     
    37403827  FCheckBoxEditColor := clBtnFace;
    37413828  FListBox := TORListBox.Create(Self);
     3829  FListBox.isPartOfComboBox := True;
    37423830  FListBox.Parent := Self;
    37433831  FListBox.TabStop := False;
     
    38663954end;
    38673955
     3956procedure TORComboBox.DropDownStatusChanged(opened: boolean);
     3957begin
     3958  if opened then
     3959  begin
     3960    if not FDropPanel.Visible then
     3961    begin
     3962      if FDropDownStatusChangedCount = 0 then
     3963      begin
     3964        FDisableHints := TRUE;
     3965        DropDownPanelOpened;
     3966      end;
     3967      inc(FDropDownStatusChangedCount);
     3968    end;
     3969  end
     3970  else
     3971  begin
     3972    dec(FDropDownStatusChangedCount);
     3973    if FDropDownStatusChangedCount <= 0 then
     3974    begin
     3975      if FDisableHints then
     3976      begin
     3977        DropDownPanelClosed;
     3978        FDisableHints := FALSE;
     3979      end;
     3980      FDropDownStatusChangedCount := 0;
     3981    end;
     3982  end;
     3983end;
     3984
     3985procedure TORComboBox.ClearDropDownStatus;
     3986begin
     3987  FDropDownStatusChangedCount := 1;
     3988  DropDownStatusChanged(FALSE);
     3989end;
     3990
     3991destructor TORComboBox.Destroy;
     3992begin
     3993  ClearDropDownStatus;
     3994  inherited;
     3995end;
     3996
    38683997procedure TORComboBox.DoEnter;
    38693998{var
     
    39024031  end;
    39034032  inherited DoExit;
     4033end;
     4034
     4035procedure TORComboBox.LoadComboBoxImage;
     4036var
     4037  imageName: string;
     4038begin
     4039  if assigned(FDropBtn) then
     4040  begin
     4041    if FBlackColorMode then
     4042      imageName := BlackComboBoxImages[inherited Enabled]
     4043    else
     4044      imageName := ComboBoxImages[inherited Enabled];
     4045    FDropBtn.Glyph.LoadFromResourceName(hInstance, imageName);
     4046  end;
    39044047end;
    39054048
     
    40984241
    40994242procedure TORComboBox.FwdKeyPress(Sender: TObject; var Key: Char);
     4243var
     4244  KeyCode: integer;
    41004245{ prevents return from being used by editbox (otherwise sends a newline & text vanishes) }
    41014246begin
    4102   // may want to make the tab beep if tab key (#9) - can't tab until list raised
    4103   if (Key in [#9, #13]) or (FListBox.FCheckBoxes and (Key = #32)) then
    4104   begin
     4247  KeyCode := ord(Key);
     4248  if (KeyCode = VK_RETURN) and (Style = orcsDropDown) and DroppedDown then
     4249  begin
     4250    DroppedDown := FALSE;
    41054251    Key := #0;
    4106     Exit;
    4107   end;
    4108   if Assigned(FOnKeyPress) then FOnKeyPress(Self, Key);
     4252  end
     4253  else
     4254  begin
     4255    // may want to make the tab beep if tab key (#9) - can't tab until list raised
     4256    if (KeyCode = VK_RETURN) or (KeyCode = VK_TAB) or (FListBox.FCheckBoxes and (KeyCode = VK_SPACE)) then
     4257    begin
     4258      Key := #0;
     4259      Exit;
     4260    end;
     4261    if Assigned(FOnKeyPress) then FOnKeyPress(Self, Key);
     4262  end;
    41094263end;
    41104264
     
    41684322      FCheckedState := FListBox.GetCheckedString;
    41694323    end;
     4324    DropDownStatusChanged(TRUE);
    41704325    FDropPanel.Visible := True;
    41714326    FDropPanel.BringToFront;
     
    41784333    uItemTip.Hide;
    41794334    FDropPanel.Hide;
     4335    DropDownStatusChanged(FALSE);
    41804336    if(FListBox.FCheckBoxes) and (assigned(FOnChange)) and
    41814337      (FCheckedState <> FListBox.GetCheckedString) then
     
    42654421    begin
    42664422      if FDropBtn <> nil then FDropBtn.Free;
    4267       if FDropPanel <> nil then FDropPanel.Free;
     4423      if FDropPanel <> nil then
     4424      begin
     4425        ClearDropDownStatus;
     4426        FDropPanel.Free;
     4427      end;
    42684428      FDropBtn := nil;
    42694429      FDropPanel := nil;
     
    42804440      if(assigned(FEditPanel) and (csDesigning in ComponentState)) then
    42814441        FEditPanel.ControlStyle := FEditPanel.ControlStyle - [csAcceptsControls];
    4282       FDropBtn.Glyph.LoadFromResourceName(hInstance, ComboBoxImages[inherited Enabled]);
     4442      LoadComboBoxImage;
     4443//      FDropBtn.Glyph.LoadFromResourceName(hInstance, ComboBoxImages[inherited Enabled]);
    42834444      FDropBtn.OnMouseDown := DropButtonDown;
    42844445      FDropBtn.OnMouseUp := DropButtonUp;
     
    42924453        FListBox.FParentCombo := Self;
    42934454        FListBox.Parent := FDropPanel;
     4455        ClearDropDownStatus;
    42944456        if FListBox.FScrollBar <> nil then FListBox.FScrollBar.Parent := FDropPanel;  // if long
    42954457      end else
     
    43284490end;
    43294491
     4492function TORComboBox.SupportsDynamicProperty(PropertyID: integer): boolean;
     4493begin
     4494  Result := (PropertyID = DynaPropAccesibilityCaption);
     4495end;
     4496
    43304497// Since TORComboBox is composed of several controls (FEditBox, FListBox, FDropBtn), the
    43314498// following functions and procedures map public and published properties to their related
     
    43734540end;
    43744541
     4542procedure TORComboBox.Invalidate;
     4543begin
     4544  inherited;
     4545  FEditBox.Invalidate;
     4546  FListBox.Invalidate;
     4547  if assigned(FEditPanel) then
     4548    FEditPanel.Invalidate;
     4549  if assigned(FDropBtn) then
     4550    FDropBtn.Invalidate;
     4551  if assigned(FDropPanel) then
     4552    FDropPanel.Invalidate;
     4553end;
     4554
    43754555function TORComboBox.GetAutoSelect: Boolean;
    43764556begin
     
    43934573end;
    43944574
     4575function TORComboBox.GetDynamicProperty(PropertyID: integer): string;
     4576begin
     4577  if PropertyID = DynaPropAccesibilityCaption then
     4578    Result := GetCaption
     4579  else
     4580    Result := '';
     4581end;
     4582
    43954583function TORComboBox.GetItemHeight: Integer;
    43964584begin
     
    45164704begin
    45174705  FEditBox.AutoSelect := Value;
     4706end;
     4707
     4708procedure TORComboBox.SetBlackColorMode(Value: boolean);
     4709begin
     4710  if FBlackColorMode <> Value then
     4711  begin
     4712    FBlackColorMode := Value;
     4713    FListBox.SetBlackColorMode(Value);
     4714    LoadComboBoxImage;
     4715  end;
    45184716end;
    45194717
     
    47744972  if (inherited GetEnabled <> Value) then
    47754973  begin
     4974    DroppedDown := FALSE;
    47764975    inherited SetEnabled(Value);
    47774976    if assigned(FDropBtn) then
    4778       FDropBtn.Glyph.LoadFromResourceName(hInstance, ComboBoxImages[Value]);
     4977      LoadComboBoxImage;
     4978//      FDropBtn.Glyph.LoadFromResourceName(hInstance, ComboBoxImages[Value]);
    47794979  end;
    47804980end;
     
    48375037begin
    48385038  result := FListBox.Caption;
    4839 end;
    4840 
    4841 function TORComboBox.MakeAccessible(Accessible: IAccessible): TORListBox;
    4842 begin
    4843   FListBox.MakeAccessible(Accessible);
    4844   result := FListBox;
    48455039end;
    48465040
     
    52615455        ORCtrls.SetPiece(FStringData, FDelim, FPiece, Value);
    52625456    end;
    5263 end;
    5264 
    5265 procedure TORTreeNode.MakeAccessible(Accessible: IAccessible);
    5266 begin
    5267   if Assigned(FAccessible) and Assigned(Accessible) then
    5268     raise Exception.Create(Text + ' Tree Node is already Accessible!')
    5269   else
    5270   begin
    5271     FAccessible := Accessible;
    5272   end;
    5273 end;
    5274 
    5275 procedure TORTreeNode.WMGetObject(var Message: TMessage);
    5276 begin
    5277   if (Message.LParam = integer(OBJID_CLIENT)) and Assigned(FAccessible) then
    5278     Message.Result := GetLResult(Message.wParam, FAccessible)
    5279   else
    5280     inherited;
    52815457end;
    52825458
     
    55225698  else
    55235699    Result := '';
    5524 end;
    5525 
    5526 procedure TORTreeView.MakeAccessible(Accessible: IAccessible);
    5527 begin
    5528   if Assigned(FAccessible) and Assigned(Accessible) then
    5529     raise Exception.Create(Text + ' Tree View is already Accessible!')
    5530   else
    5531   begin
    5532     FAccessible := Accessible;
    5533   end;
    5534 end;
    5535 
    5536 procedure TORTreeView.WMGetObject(var Message: TMessage);
    5537 begin
    5538   if (Message.LParam = integer(OBJID_CLIENT)) and Assigned(FAccessible) then
    5539     Message.Result := GetLResult(Message.wParam, FAccessible)
    5540   else
    5541     inherited;
    55425700end;
    55435701
     
    59086066              end;
    59096067            end;
    5910             Bitmap := GetORCBBitmap(ImgIdx);
     6068            Bitmap := GetORCBBitmap(ImgIdx, FBlackColorMode);
    59116069          end
    59126070          else
     
    60506208            R.Top:= FocusRect.Top
    60516209          else
     6210          begin
    60526211            R.Top:= ((ClientHeight - Bitmap.Height + 1) div 2) - 1;
    6053 
     6212            if R.Top < 0 then R.Top := 0           
     6213          end;
    60546214          Draw(R.Left, R.Top, Bitmap);
    60556215        end;
     
    61456305end;
    61466306
     6307procedure TORCheckBox.SetBlackColorMode(Value: boolean);
     6308begin
     6309  if FBlackColorMode <> Value then
     6310  begin
     6311    FBlackColorMode := Value;
     6312    Invalidate;
     6313  end;
     6314end;
     6315
    61476316procedure TORCheckBox.AutoAdjustSize;
    61486317var
     
    62766445    if DoCtrl then
    62776446      Ctrl.Enabled := Checked;
    6278     if(Ctrl is TWinControl) then
     6447
     6448    // added (csAcceptsControls in Ctrl.ControlStyle) below to prevent disabling of
     6449    // child sub controls, like the TBitBtn in the TORComboBox.  If the combo box is
     6450    // already disabled, we don't want to disable the button as well - when we do, we
     6451    // lose the disabled glyph that is stored on that button for the combo box.
     6452
     6453    if(Ctrl is TWinControl) and (csAcceptsControls in Ctrl.ControlStyle) then
    62796454    begin
    62806455      for i := 0 to TWinControl(Ctrl).ControlCount-1 do
     
    65006675end;
    65016676
    6502 procedure TCaptionListBox.MakeAccessible(Accessible: IAccessible);
    6503 begin
    6504   if Assigned(FAccessible) and Assigned(Accessible) then
    6505     raise Exception.Create(Caption + ' List Box is already Accessible!')
     6677function TCaptionListBox.GetDynamicProperty(PropertyID: integer): string;
     6678begin
     6679  if PropertyID = DynaPropAccesibilityCaption then
     6680    Result := GetCaption
    65066681  else
    6507     FAccessible := Accessible;
     6682    Result := '';
     6683end;
     6684
     6685
     6686procedure TCaptionListBox.MoveFocusUp;
     6687begin
     6688  if ItemIndex > 0 then
     6689    Perform(LB_SETCARETINDEX, ItemIndex - 1, 0);
     6690end;
     6691
     6692procedure TCaptionListBox.MoveFocusDown;
     6693begin
     6694  if ItemIndex < (Items.Count-1) then
     6695    Perform(LB_SETCARETINDEX, ItemIndex + 1, 0);
    65086696end;
    65096697
     
    65226710end;
    65236711
    6524 procedure TCaptionListBox.WMGetObject(var Message: TMessage);
    6525 begin
    6526   if (Message.LParam = integer(OBJID_CLIENT)) and Assigned(FAccessible) then
    6527     Message.Result := GetLResult(Message.wParam, FAccessible)
    6528   else
    6529     inherited;
     6712function TCaptionListBox.SupportsDynamicProperty(PropertyID: integer): boolean;
     6713begin
     6714  Result := (PropertyID = DynaPropAccesibilityCaption);
     6715end;
     6716
     6717procedure TCaptionListBox.WMKeyDown(var Message: TWMKeyDown);
     6718var
     6719  IsSelected: LongBool;
     6720begin
     6721  if Boolean(Hi(GetKeyState(VK_CONTROL))) and MultiSelect then
     6722    case Message.CharCode of
     6723      VK_SPACE:
     6724        begin
     6725          IsSelected := LongBool(Perform(LB_GETSEL, ItemIndex, 0));
     6726          Perform(LB_SETSEL, Longint(not IsSelected), ItemIndex);
     6727        end;
     6728      VK_LEFT, VK_UP: MoveFocusUp;
     6729      VK_RIGHT, VK_DOWN: MoveFocusDown;
     6730      else inherited;
     6731    end
     6732  else inherited;
    65306733end;
    65316734
     
    65916794end;
    65926795
     6796function TCaptionCheckListBox.GetDynamicProperty(PropertyID: integer): string;
     6797begin
     6798  if PropertyID = DynaPropAccesibilityCaption then
     6799    Result := GetCaption
     6800  else
     6801    Result := '';
     6802end;
     6803
    65936804procedure TCaptionCheckListBox.SetCaption(const Value: string);
    65946805begin
     
    66056816end;
    66066817
     6818function TCaptionCheckListBox.SupportsDynamicProperty(
     6819  PropertyID: integer): boolean;
     6820begin
     6821  Result := (PropertyID = DynaPropAccesibilityCaption);
     6822end;
     6823
    66076824{ TCaptionMemo }
    66086825
     
    66136830  else
    66146831    result := FCaptionComponent.Caption;
     6832end;
     6833
     6834function TCaptionMemo.GetDynamicProperty(PropertyID: integer): string;
     6835begin
     6836  if PropertyID = DynaPropAccesibilityCaption then
     6837    Result := GetCaption
     6838  else
     6839    Result := '';
    66156840end;
    66166841
     
    66296854end;
    66306855
     6856function TCaptionMemo.SupportsDynamicProperty(PropertyID: integer): boolean;
     6857begin
     6858  Result := (PropertyID = DynaPropAccesibilityCaption);
     6859end;
     6860
    66316861{ TCaptionEdit }
    66326862
     
    66376867  else
    66386868    result := FCaptionComponent.Caption;
     6869end;
     6870
     6871function TCaptionEdit.GetDynamicProperty(PropertyID: integer): string;
     6872begin
     6873  if PropertyID = DynaPropAccesibilityCaption then
     6874    Result := GetCaption
     6875  else
     6876    Result := '';
    66396877end;
    66406878
     
    66536891end;
    66546892
     6893function TCaptionEdit.SupportsDynamicProperty(PropertyID: integer): boolean;
     6894begin
     6895  Result := (PropertyID = DynaPropAccesibilityCaption);
     6896end;
     6897
    66556898{ TCaptionRichEdit }
    66566899
    6657 procedure TCaptionRichEdit.MakeAccessible(Accessible: IAccessible);
    6658 begin
    6659   if Assigned(FAccessible) and Assigned(Accessible) then
    6660     raise Exception.Create(Caption + ' Rich Edit is already Accessible!')
     6900function TCaptionRichEdit.GetDynamicProperty(PropertyID: integer): string;
     6901begin
     6902  if PropertyID = DynaPropAccesibilityCaption then
     6903    Result := FCaption
    66616904  else
    6662     FAccessible := Accessible;
    6663 end;
    6664 
    6665 procedure TCaptionRichEdit.WMGetObject(var Message: TMessage);
    6666 begin
    6667   if (Message.LParam = integer(OBJID_CLIENT)) and Assigned(FAccessible) then
    6668     Message.Result := GetLResult(Message.wParam, FAccessible)
     6905    Result := '';
     6906end;
     6907
     6908
     6909function TCaptionRichEdit.SupportsDynamicProperty(PropertyID: integer): boolean;
     6910begin
     6911  Result := (PropertyID = DynaPropAccesibilityCaption);
     6912end;
     6913
     6914{ TCaptionTreeView}
     6915
     6916function TCaptionTreeView.GetCaption: string;
     6917begin
     6918    result := inherited Caption;
     6919end;
     6920
     6921function TCaptionTreeView.GetDynamicProperty(PropertyID: integer): string;
     6922begin
     6923  if PropertyID = DynaPropAccesibilityCaption then
     6924    Result := GetCaption
    66696925  else
    6670     inherited;
    6671 end;
    6672 
    6673 { TCaptionTreeView}
    6674 
    6675 function TCaptionTreeView.GetCaption: string;
    6676 begin
    6677     result := inherited Caption;
     6926    Result := '';
    66786927end;
    66796928
     
    66936942end;
    66946943
     6944function TCaptionTreeView.SupportsDynamicProperty(PropertyID: integer): boolean;
     6945begin
     6946  Result := (PropertyID = DynaPropAccesibilityCaption);
     6947end;
     6948
    66956949{ TCaptionComboBox }
    66966950
     
    67016955  else
    67026956    result := FCaptionComponent.Caption;
     6957end;
     6958
     6959function TCaptionComboBox.GetDynamicProperty(PropertyID: integer): string;
     6960begin
     6961  if PropertyID = DynaPropAccesibilityCaption then
     6962    Result := GetCaption
     6963  else
     6964    Result := '';
    67036965end;
    67046966
     
    67176979end;
    67186980
     6981function TCaptionComboBox.SupportsDynamicProperty(PropertyID: integer): boolean;
     6982begin
     6983  Result := (PropertyID = DynaPropAccesibilityCaption);
     6984end;
     6985
    67196986{ TORAlignSpeedButton }
    67206987
     
    67427009  result := (ColCount - FixedCols) * (Row - FixedRows) +
    67437010      (Col - FixedCols) + 1;
     7011end;
     7012
     7013function TCaptionStringGrid.GetDynamicProperty(PropertyID: integer): string;
     7014begin
     7015  if PropertyID = DynaPropAccesibilityCaption then
     7016    Result := FCaption
     7017  else
     7018    Result := '';
    67447019end;
    67457020
     
    67617036end;
    67627037
    6763 procedure TCaptionStringGrid.MakeAccessible(Accessible: IAccessible);
    6764 begin
    6765   if Assigned(FAccessible) and Assigned(Accessible) then
    6766     raise Exception.Create(Caption + 'String Grid is already Accessible!')
    6767   else
    6768     FAccessible := Accessible;
    6769 end;
    6770 
    6771 procedure TCaptionStringGrid.WMGetObject(var Message: TMessage);
    6772 begin
    6773   if (Message.LParam = integer(OBJID_CLIENT)) and Assigned(FAccessible) then
    6774     Message.Result := GetLResult(Message.wParam, FAccessible)
    6775   else
    6776     inherited;
     7038
     7039function TCaptionStringGrid.SupportsDynamicProperty(
     7040  PropertyID: integer): boolean;
     7041begin
     7042  Result := (PropertyID = DynaPropAccesibilityCaption);
    67777043end;
    67787044
     
    68107076    if LongList then
    68117077    begin
    6812       //Currently Do nothing for LongLists
    6813      { if CompareText(iText, Copy(DisplayText[SelectIndex+1], 1, Length(iText))) = 0 then
    6814         Result := -1;}
     7078      //Implemented for CQ: 10092, PSI-04-057
     7079      //asume long lists are alphabetically ordered...
     7080      if CompareText(iText, Copy(DisplayText[SelectIndex+1], 1, Length(iText))) = 0 then
     7081        Result := -1;
    68157082    end
    68167083    else //Not a LongList
     
    68367103end;
    68377104
     7105{ TCaptionListView }
     7106
     7107function TCaptionListView.GetDynamicProperty(PropertyID: integer): string;
     7108begin
     7109  if PropertyID = DynaPropAccesibilityCaption then
     7110    Result := Caption
     7111  else
     7112    Result := '';
     7113end;
     7114
     7115function TCaptionListView.SupportsDynamicProperty(PropertyID: integer): boolean;
     7116begin
     7117  Result := (PropertyID = DynaPropAccesibilityCaption);
     7118end;
     7119
    68387120initialization
    68397121  //uItemTip := TItemTip.Create(Application);  // all listboxes share a single ItemTip window
Note: See TracChangeset for help on using the changeset viewer.