| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748 |
- --- TB2Common.pas 2005-06-29 15:10:10.000000000 +-0400
- +++ TB2Common.pas 2005-08-12 08:33:58.000000000 +-0400
- @@ -882,46 +882,88 @@
- Result := CreateFontIndirect(LogFont);
- end;
-
- procedure DrawRotatedText(const DC: HDC; AText: String; const ARect: TRect;
- const AFormat: Cardinal);
- { Like DrawText, but draws the text at a 270 degree angle.
- - The only format flag this function respects is DT_HIDEPREFIX. Text is always
- - drawn centered. }
- + The format flag this function respects are
- + DT_NOPREFIX, DT_HIDEPREFIX, DT_CENTER, DT_END_ELLIPSIS, DT_NOCLIP }
- var
- RotatedFont, SaveFont: HFONT;
- TextMetrics: TTextMetric;
- - X, Y, P, I, SU, FU: Integer;
- + X, Y, P, I, SU, FU, W: Integer;
- SaveAlign: UINT;
- SavePen, Pen: HPEN;
- + Clip: Boolean;
- +
- + function GetSize(DC: HDC; const S: string): Integer;
- + var
- + Size: TSize;
- + begin
- + GetTextExtentPoint32(DC, PChar(S), Length(S), Size);
- + Result := Size.cx;
- + end;
- +
- begin
- + if Length(AText) = 0 then Exit;
- +
- RotatedFont := CreateRotatedFont(DC);
- SaveFont := SelectObject(DC, RotatedFont);
-
- GetTextMetrics(DC, TextMetrics);
- X := ARect.Left + ((ARect.Right - ARect.Left) - TextMetrics.tmHeight) div 2;
- - Y := ARect.Top + ((ARect.Bottom - ARect.Top) - GetTextWidth(DC, AText, True)) div 2;
- +
- + Clip := (AFormat and DT_NOCLIP) <> DT_NOCLIP;
-
- { Find the index of the character that should be underlined. Delete '&'
- characters from the string. Like DrawText, only the last prefixed character
- will be underlined. }
- P := 0;
- I := 1;
- - while I <= Length(AText) do begin
- - if AText[I] in LeadBytes then
- - Inc(I)
- - else if AText[I] = '&' then begin
- - Delete(AText, I, 1);
- - { Note: PChar cast is so that if Delete deleted the last character in
- - the string, we don't step past the end of the string (which would cause
- - an AV if AText is now empty), but rather look at the null character
- - and treat it as an accelerator key like DrawText. }
- - if PChar(AText)[I-1] <> '&' then
- - P := I;
- - end;
- - Inc(I);
- + if (AFormat and DT_NOPREFIX) <> DT_NOPREFIX then
- + while I <= Length(AText) do begin
- + if AText[I] in LeadBytes then
- + Inc(I)
- + else if AText[I] = '&' then begin
- + Delete(AText, I, 1);
- + { Note: PChar cast is so that if Delete deleted the last character in
- + the string, we don't step past the end of the string (which would cause
- + an AV if AText is now empty), but rather look at the null character
- + and treat it as an accelerator key like DrawText. }
- + if PChar(AText)[I-1] <> '&' then
- + P := I;
- + end;
- + Inc(I);
- + end;
- +
- + if (AFormat and DT_END_ELLIPSIS) = DT_END_ELLIPSIS then
- + begin
- + if (Length(AText) > 1) and (GetSize(DC, AText) > ARect.Bottom - ARect.Top) then
- + begin
- + W := ARect.Bottom - ARect.Top;
- + if W > 2 then
- + begin
- + Delete(AText, Length(AText), 1);
- + while (Length(AText) > 1) and (GetSize(DC, AText + '...') > W) do
- + Delete(AText, Length(AText), 1);
- + end
- + else AText := AText[1];
- + if P > Length(AText) then P := 0;
- + AText := AText + '...';
- + end;
- + end;
- +
- + if (AFormat and DT_CENTER) = DT_CENTER then
- + Y := ARect.Top + ((ARect.Bottom - ARect.Top) - GetSize(DC, AText)) div 2
- + else
- + Y := ARect.Top;
- +
- + if Clip then
- + begin
- + SaveDC(DC);
- + with ARect do IntersectClipRect(DC, Left, Top, Right, Bottom);
- end;
-
- SaveAlign := SetTextAlign(DC, TA_BOTTOM);
- TextOut(DC, X, Y, PChar(AText), Length(AText));
- SetTextAlign(DC, SaveAlign);
- { Underline }
- @@ -933,12 +975,14 @@
- SavePen := SelectObject(DC, Pen);
- MoveToEx(DC, X, Y + SU, nil);
- LineTo(DC, X, Y + FU);
- SelectObject(DC, SavePen);
- DeleteObject(Pen);
- end;
- +
- + if Clip then RestoreDC(DC, -1);
-
- SelectObject(DC, SaveFont);
- DeleteObject(RotatedFont);
- end;
-
- function NeedToPlaySound(const Alias: String): Boolean;
- --- TB2Dock.pas 2005-07-15 14:35:04.000000000 +-0400
- +++ TB2Dock.pas 2005-08-11 10:16:22.000000000 +-0400
- @@ -76,15 +76,12 @@
- {$ENDIF}
-
- { Internal }
- FDisableArrangeToolbars: Integer; { Increment to disable ArrangeToolbars }
- FArrangeToolbarsNeeded: Boolean;
- FNonClientWidth, FNonClientHeight: Integer;
- - DockList: TList; { List of the toolbars docked, and those floating and have LastDock
- - pointing to the dock. Items are casted in TTBCustomDockableWindow's. }
- - DockVisibleList: TList; { Similar to DockList, but lists only docked and visible toolbars }
-
- { Property access methods }
- //function GetVersion: TToolbar97Version;
- procedure SetAllowDrag(Value: Boolean);
- procedure SetBackground(Value: TTBBasicBackground);
- procedure SetBackgroundOnToolbars(Value: Boolean);
- @@ -96,20 +93,17 @@
- function GetToolbarCount: Integer;
- function GetToolbars(Index: Integer): TTBCustomDockableWindow;
-
- { Internal }
- procedure BackgroundChanged(Sender: TObject);
- procedure ChangeDockList(const Insert: Boolean; const Bar: TTBCustomDockableWindow);
- - procedure ChangeWidthHeight(const NewWidth, NewHeight: Integer);
- procedure CommitPositions;
- procedure DrawNCArea(const DrawToDC: Boolean; const ADC: HDC;
- const Clip: HRGN);
- function GetDesignModeRowOf(const XY: Integer): Integer;
- - function HasVisibleToolbars: Boolean;
- procedure RelayMsgToFloatingBars(var Message: TMessage);
- - function ToolbarVisibleOnDock(const AToolbar: TTBCustomDockableWindow): Boolean;
- procedure ToolbarVisibilityChanged(const Bar: TTBCustomDockableWindow;
- const ForceRemove: Boolean);
-
- { Messages }
- procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
- procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
- @@ -122,27 +116,36 @@
- procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
- procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT;
- procedure WMPrint(var Message: TMessage); message WM_PRINT;
- procedure WMPrintClient(var Message: TMessage); message WM_PRINTCLIENT;
- procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
- protected
- + DockList: TList; { List of the toolbars docked, and those floating and have LastDock
- + pointing to the dock. Items are casted in TTBCustomDockableWindow's. }
- + DockVisibleList: TList; { Similar to DockList, but lists only docked and visible toolbars }
- + function Accepts(ADockableWindow: TTBCustomDockableWindow): Boolean; virtual;
- procedure AlignControls(AControl: TControl; var Rect: TRect); override;
- + procedure ChangeWidthHeight(const NewWidth, NewHeight: Integer);
- procedure DrawBackground(DC: HDC; const DrawRect: TRect); virtual;
- function GetPalette: HPALETTE; override;
- + function HasVisibleToolbars: Boolean;
- procedure InvalidateBackgrounds;
- procedure Loaded; override;
- procedure Notification(AComponent: TComponent; Operation: TOperation); override;
- procedure SetParent(AParent: TWinControl); override;
- + function ToolbarVisibleOnDock(const AToolbar: TTBCustomDockableWindow): Boolean;
- procedure Paint; override;
- function UsingBackground: Boolean; virtual;
- + property ArrangeToolbarsNeeded: Boolean read FArrangeToolbarsNeeded write FArrangeToolbarsNeeded;
- + property DisableArrangeToolbars: Integer read FDisableArrangeToolbars write FDisableArrangeToolbars;
- public
- constructor Create(AOwner: TComponent); override;
- procedure CreateParams(var Params: TCreateParams); override;
- destructor Destroy; override;
-
- - procedure ArrangeToolbars;
- + procedure ArrangeToolbars; virtual;
- procedure BeginUpdate;
- procedure EndUpdate;
- function GetCurrentRowSize(const Row: Integer; var AFullSize: Boolean): Integer;
- function GetHighestRow(const HighestEffective: Boolean): Integer;
- function GetMinRowSize(const Row: Integer;
- const ExcludeControl: TTBCustomDockableWindow): Integer;
- @@ -257,12 +260,13 @@
- TTBShrinkMode = (tbsmNone, tbsmWrap, tbsmChevron);
-
- TTBCustomDockableWindow = class(TCustomControl)
- private
- { Property variables }
- FAutoResize: Boolean;
- + FDblClickUndock: Boolean;
- FDockPos, FDockRow, FEffectiveDockPos, FEffectiveDockRow: Integer;
- FDocked: Boolean;
- FCurrentDock, FDefaultDock, FLastDock: TTBDock;
- FCurrentSize: Integer;
- FFloating: Boolean;
- FOnClose, FOnDockChanged, FOnMove, FOnRecreated,
- @@ -419,12 +423,13 @@
- function PaletteChanged(Foreground: Boolean): Boolean; override;
- procedure SetParent(AParent: TWinControl); override;
-
- { Methods accessible to descendants }
- procedure Arrange;
- function CalcNCSizes: TPoint; virtual;
- + function CanDockTo(ADock: TTBDock): Boolean; virtual;
- procedure ChangeSize(AWidth, AHeight: Integer);
- function ChildControlTransparent(Ctl: TControl): Boolean; dynamic;
- procedure Close;
- procedure ControlExistsAtPos(const P: TPoint; var ControlExists: Boolean); virtual;
- function DoArrange(CanMoveControls: Boolean; PreviousDockType: TTBDockType;
- NewFloating: Boolean; NewDock: TTBDock): TPoint; virtual; abstract;
- @@ -443,13 +448,16 @@
- function IsAutoResized: Boolean;
- procedure ResizeBegin(SizeHandle: TTBSizeHandle); dynamic;
- procedure ResizeEnd; dynamic;
- procedure ResizeTrack(var Rect: TRect; const OrigRect: TRect); dynamic;
- procedure ResizeTrackAccept; dynamic;
- procedure SizeChanging(const AWidth, AHeight: Integer); virtual;
- + property EffectiveDockPosAccess: Integer read FEffectiveDockPos write FEffectiveDockPos;
- + property EffectiveDockRowAccess: Integer read FEffectiveDockRow write FEffectiveDockRow;
- public
- + property DblClickUndock: Boolean read FDblClickUndock write FDblClickUndock default True;
- property Docked: Boolean read FDocked;
- property Canvas;
- property CurrentDock: TTBDock read FCurrentDock write SetCurrentDock stored False;
- property CurrentSize: Integer read FCurrentSize write FCurrentSize;
- property DockPos: Integer read FDockPos write SetDockPos default -1;
- property DockRow: Integer read FDockRow write SetDockRow default 0;
- @@ -1011,12 +1019,17 @@
- SetBounds(Left, Top-NewHeight+Height, NewWidth, NewHeight);
- alRight:
- SetBounds(Left-NewWidth+Width, Top, NewWidth, NewHeight);
- end;
- end;
-
- +function TTBDock.Accepts(ADockableWindow: TTBCustomDockableWindow): Boolean;
- +begin
- + Result := AllowDrag;
- +end;
- +
- procedure TTBDock.AlignControls(AControl: TControl; var Rect: TRect);
- begin
- ArrangeToolbars;
- end;
-
- function CompareDockRowPos(const Item1, Item2, ExtraData: Pointer): Integer; far;
- @@ -2523,12 +2536,13 @@
- [csAcceptsControls, csClickEvents, csDoubleClicks, csSetCaption] -
- [csCaptureMouse{capturing is done manually}, csOpaque];
- FAutoResize := True;
- FActivateParent := True;
- FBorderStyle := bsSingle;
- FCloseButton := True;
- + FDblClickUndock := True;
- FDockableTo := [dpTop, dpBottom, dpLeft, dpRight];
- FDockableWindowStyles := [tbdsResizeEightCorner, tbdsResizeClipCursor];
- FDockPos := -1;
- FDragHandleStyle := dhSingle;
- FEffectiveDockRow := -1;
- FHideWhenInactive := True;
- @@ -3020,12 +3034,17 @@
-
- procedure TTBCustomDockableWindow.RemoveDockForm(const Form: TTBCustomForm);
- begin
- RemoveFromList(FDockForms, Form);
- end;
-
- +function TTBCustomDockableWindow.CanDockTo(ADock: TTBDock): Boolean;
- +begin
- + Result := ADock.Position in DockableTo;
- +end;
- +
- function TTBCustomDockableWindow.IsAutoResized: Boolean;
- begin
- Result := AutoResize or Assigned(CurrentDock) or Floating;
- end;
-
- procedure TTBCustomDockableWindow.ChangeSize(AWidth, AHeight: Integer);
- @@ -3912,13 +3931,14 @@
- if FDragSplitting then
- MouseOverDock := CurrentDock
- else begin
- { Check if it can dock }
- MouseOverDock := nil;
- if StartDocking and not PreventDocking then
- - for I := 0 to DockList.Count-1 do begin
- + {for I := 0 to DockList.Count-1 do begin} {rl-}
- + for I := DockList.Count-1 downto 0 do begin {rl+} // Robert Lee: CurrentDock should not have the priority
- Dock := DockList[I];
- if CheckIfCanDockTo(Dock, FindDockedSize(Dock).BoundsRect) then begin
- MouseOverDock := Dock;
- Accept := True;
- if Assigned(MouseOverDock.FOnRequestDock) then
- MouseOverDock.FOnRequestDock(MouseOverDock, Self, Accept);
- @@ -3988,17 +4008,12 @@
- if not IsRectEmpty(MoveRect) then
- Dropped;
- end;
-
- procedure BuildDockList;
-
- - function AcceptableDock(const D: TTBDock): Boolean;
- - begin
- - Result := D.FAllowDrag and (D.Position in DockableTo);
- - end;
- -
- procedure Recurse(const ParentCtl: TWinControl);
- var
- D: TTBDockPosition;
- I: Integer;
- begin
- if ContainsControl(ParentCtl) or not ParentCtl.Showing then
- @@ -4009,25 +4024,25 @@
- if (Controls[I] is TTBDock) and (TTBDock(Controls[I]).Position = D) then
- Recurse(TWinControl(Controls[I]));
- for I := 0 to ParentCtl.ControlCount-1 do
- if (Controls[I] is TWinControl) and not(Controls[I] is TTBDock) then
- Recurse(TWinControl(Controls[I]));
- end;
- - if (ParentCtl is TTBDock) and AcceptableDock(TTBDock(ParentCtl)) and
- + if (ParentCtl is TTBDock) and TTBDock(ParentCtl).Accepts(Self) and CanDockTo(TTBDock(ParentCtl)) and
- (DockList.IndexOf(ParentCtl) = -1) then
- DockList.Add(ParentCtl);
- end;
-
- var
- ParentForm: TTBCustomForm;
- DockFormsList: TList;
- I, J: Integer;
- begin
- { Manually add CurrentDock to the DockList first so that it gets priority
- over other docks }
- - if Assigned(CurrentDock) and AcceptableDock(CurrentDock) then
- + if Assigned(CurrentDock) and CurrentDock.Accepts(Self) and CanDockTo(CurrentDock) then
- DockList.Add(CurrentDock);
- ParentForm := TBGetToolWindowParentForm(Self);
- DockFormsList := TList.Create;
- try
- if Assigned(FDockForms) then begin
- for I := 0 to Screen.{$IFDEF JR_D3}CustomFormCount{$ELSE}FormCount{$ENDIF}-1 do begin
- @@ -4313,25 +4328,26 @@
- end;
- end;
-
- procedure TTBCustomDockableWindow.DoubleClick;
- begin
- if Docked then begin
- - if DockMode = dmCanFloat then begin
- + if DblClickUndock and (DockMode = dmCanFloat) then begin
- Floating := True;
- MoveOnScreen(True);
- end;
- end
- - else
- - if Assigned(LastDock) then
- - Parent := LastDock
- - else
- - if Assigned(DefaultDock) then begin
- - FDockRow := ForceDockAtTopRow;
- - FDockPos := ForceDockAtLeftPos;
- - Parent := DefaultDock;
- + else if Floating then begin
- + if Assigned(LastDock) then
- + Parent := LastDock
- + else
- + if Assigned(DefaultDock) then begin
- + FDockRow := ForceDockAtTopRow;
- + FDockPos := ForceDockAtLeftPos;
- + Parent := DefaultDock;
- + end;
- end;
- end;
-
- function TTBCustomDockableWindow.IsMovable: Boolean;
- begin
- Result := (Docked and CurrentDock.FAllowDrag) or Floating;
- --- TB2DsgnItemEditor.pas 2005-01-27 00:48:54.000000000 +-0400
- +++ TB2DsgnItemEditor.pas 2005-05-17 19:26:48.000000000 +-0400
- @@ -149,12 +149,18 @@
- function GetValue: String; override;
- end;
-
- procedure TBRegisterItemClass(AClass: TTBCustomItemClass;
- const ACaption: String; ResInstance: HINST);
-
- +type
- + TTBDsgnEditorHook = procedure(Sender: TTBItemEditForm) of object;
- +
- +procedure TBRegisterDsgnEditorHook(Hook: TTBDsgnEditorHook);
- +procedure TBUnregisterDsgnEditorHook(Hook: TTBDsgnEditorHook);
- +
- implementation
-
- {$R *.DFM}
-
- uses
- TypInfo, CommCtrl, TB2Version, TB2Common, TB2DsgnConverter;
- @@ -176,12 +182,13 @@
- ImageIndex: Integer;
- end;
-
- var
- ItemClasses: TList;
- ItemImageList: TImageList;
- + EditFormHooks: TList;
-
- {$IFNDEF JR_D6}
- function CreateSelectionList: TDesignerSelectionList;
- begin
- Result := TDesignerSelectionList.Create;
- end;
- @@ -237,13 +244,24 @@
- end;
-
- procedure TBRegisterItemClass(AClass: TTBCustomItemClass;
- const ACaption: String; ResInstance: HINST);
- var
- Info: PItemClassInfo;
- + I: Integer;
- begin
- + if ItemClasses <> nil then
- + for I := ItemClasses.Count - 1 downto 0 do
- + begin
- + Info := ItemClasses[I];
- + if Info.ItemClass = AClass then
- + begin
- + Dispose(Info);
- + ItemClasses.Delete(I);
- + end;
- + end;
- New(Info);
- Info.ItemClass := AClass;
- Info.Caption := ACaption;
- Info.ImageIndex := LoadItemImage(ResInstance, Uppercase(AClass.ClassName));
- ItemClasses.Add(Info);
- end;
- @@ -357,12 +375,17 @@
- Item.Caption := Info.Caption;
- Item.ImageIndex := GetItemClassImage(Info.ItemClass);
- Item.Tag := Integer(Info.ItemClass);
- Item.OnClick := MoreItemClick;
- MoreMenu.Add(Item);
- end;
- + { Run the hooks }
- +
- + if EditFormHooks <> nil then
- + for I := 0 to EditFormHooks.Count - 1 do
- + TTBDsgnEditorHook(EditFormHooks[I]^)(Self);
- end;
-
- destructor TTBItemEditForm.Destroy;
- begin
- inherited;
- if Assigned(FNotifyItemList) then begin
- @@ -1332,17 +1355,47 @@
-
- function TTBItemsPropertyEditor.GetValue: String;
- begin
- Result := '(TB2000 Items)';
- end;
-
- +
- +procedure TBRegisterDsgnEditorHook(Hook: TTBDsgnEditorHook);
- +var
- + H: ^TTBDsgnEditorHook;
- +begin
- + New(H);
- + H^ := Hook;
- + EditFormHooks.Add(H);
- +end;
- +
- +procedure TBUnregisterDsgnEditorHook(Hook: TTBDsgnEditorHook);
- +var
- + H: ^TTBDsgnEditorHook;
- + I: Integer;
- +begin
- + for I := EditFormHooks.Count - 1 downto 0 do
- + begin
- + H := EditFormHooks[I];
- + if (TMethod(H^).Code = TMethod(Hook).Code) and
- + (TMethod(H^).Data = TMethod(Hook).Data) then
- + begin
- + Dispose(H);
- + EditFormHooks.Delete(I);
- +// Break;
- + end;
- + end;
- +end;
- +
- initialization
- ItemImageList := TImageList.Create(nil);
- ItemImageList.Handle := ImageList_LoadImage(HInstance, 'TB2_DSGNEDITORIMAGES',
- 16, 0, clFuchsia, IMAGE_BITMAP, 0);
- ItemClasses := TList.Create;
- + EditFormHooks := TList.Create;
- AddModuleUnloadProc(UnregisterModuleItemClasses);
- finalization
- RemoveModuleUnloadProc(UnregisterModuleItemClasses);
- FreeItemClasses;
- FreeAndNil(ItemImageList);
- + FreeAndNil(EditFormHooks);
- end.
- --- TB2ExtItems.pas 2005-07-03 21:49:52.000000000 +-0400
- +++ TB2ExtItems.pas 2005-07-11 04:36:00.000000000 +-0400
- @@ -40,12 +40,17 @@
- TTBEditItemOptions = set of TTBEditItemOption;
-
- const
- EditItemDefaultEditOptions = [];
- EditItemDefaultEditWidth = 64;
-
- +{ Change reasons for TTBEditItem.Text property }
- + tcrSetProperty = 0; // direct assignment to TTBEditItem.Text property
- + tcrActionLink = 1; // change comes from an action link
- + tcrEditControl = 2; // change is caused by typing in edit area
- +
- type
- TTBEditItem = class;
- TTBEditItemViewer = class;
-
- TTBAcceptTextEvent = procedure(Sender: TObject; var NewText: String;
- var Accept: Boolean) of object;
- @@ -93,12 +98,13 @@
- TTBEditItem = class(TTBCustomItem)
- private
- FCharCase: TEditCharCase;
- FEditCaption: String;
- FEditOptions: TTBEditItemOptions;
- FEditWidth: Integer;
- + FExtendedAccept: Boolean;
- FMaxLength: Integer;
- FOnAcceptText: TTBAcceptTextEvent;
- FOnBeginEdit: TTBBeginEditEvent;
- FText: String;
- function IsEditCaptionStored: Boolean;
- function IsEditOptionsStored: Boolean;
- @@ -109,16 +115,21 @@
- procedure SetEditOptions(Value: TTBEditItemOptions);
- procedure SetEditWidth(Value: Integer);
- procedure SetMaxLength(Value: Integer);
- procedure SetText(Value: String);
- protected
- procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
- + function DoAcceptText(var NewText: string): Boolean; virtual;
- procedure DoBeginEdit(Viewer: TTBEditItemViewer); virtual;
- + procedure DoTextChanging(const OldText: String; var NewText: String; Reason: Integer); virtual;
- + procedure DoTextChanged(Reason: Integer); virtual;
- function GetActionLinkClass: TTBCustomItemActionLinkClass; override;
- function GetItemViewerClass(AView: TTBView): TTBItemViewerClass; override;
- function NeedToRecreateViewer(AViewer: TTBItemViewer): Boolean; override;
- + property ExtendedAccept: Boolean read FExtendedAccept write FExtendedAccept default False;
- + procedure SetTextEx(Value: String; Reason: Integer);
- public
- constructor Create(AOwner: TComponent); override;
- procedure Clear;
- procedure Click; override;
- published
- property Action;
- @@ -143,12 +154,14 @@
-
- property OnAcceptText: TTBAcceptTextEvent read FOnAcceptText write FOnAcceptText;
- property OnBeginEdit: TTBBeginEditEvent read FOnBeginEdit write FOnBeginEdit;
- property OnClick;
- property OnSelect;
- end;
- +
- + TEditClass = class of TEdit;
-
- TTBEditItemViewer = class(TTBItemViewer)
- private
- FEditControl: TEdit;
- FEditControlStatus: set of (ecsContinueLoop, ecsAccept, ecsClose);
- function EditLoop(const CapHandle: HWND): Boolean;
- @@ -160,12 +173,13 @@
- function CaptionShown: Boolean; override;
- function DoExecute: Boolean; override;
- function GetAccRole: Integer; override;
- function GetAccValue(var Value: WideString): Boolean; override;
- function GetCaptionText: String; override;
- procedure GetCursor(const Pt: TPoint; var ACursor: HCURSOR); override;
- + function GetEditControlClass: TEditClass; virtual;
- procedure GetEditRect(var R: TRect); virtual;
- procedure MouseDown(Shift: TShiftState; X, Y: Integer;
- var MouseDownOnMenu: Boolean); override;
- procedure MouseUp(X, Y: Integer; MouseWasDownOnMenu: Boolean); override;
- procedure Paint(const Canvas: TCanvas; const ClientAreaRect: TRect;
- IsSelected, IsPushed, UseDisabledShadow: Boolean); override;
- @@ -363,13 +377,13 @@
- begin
- if IsOnAcceptTextLinked then TTBEditItem(FClient).OnAcceptText := Value;
- end;
-
- procedure TTBEditItemActionLink.SetText(const Value: String);
- begin
- - if IsTextLinked then TTBEditItem(FClient).Text := Value;
- + if IsTextLinked then TTBEditItem(FClient).SetTextEx(Value , tcrActionLink);
- end;
-
-
- { TTBEditItem }
-
- constructor TTBEditItem.Create(AOwner: TComponent);
- @@ -387,13 +401,13 @@
- begin
- if not CheckDefaults or (Self.EditCaption = '') then
- Self.EditCaption := EditCaption;
- if not CheckDefaults or (Self.EditOptions = []) then
- Self.EditOptions := EditOptions;
- if not CheckDefaults or (Self.Text = '') then
- - Self.Text := Text;
- + Self.SetTextEx(Text, tcrActionLink);
- if not CheckDefaults or not Assigned(Self.OnAcceptText) then
- Self.OnAcceptText := OnAcceptText;
- end;
- end;
-
- function TTBEditItem.GetActionLinkClass: TTBCustomItemActionLinkClass;
- @@ -494,21 +508,47 @@
- if FMaxLength <> Value then begin
- FMaxLength := Value;
- Change(False);
- end;
- end;
-
- +function TTBEditItem.DoAcceptText(var NewText: string): Boolean;
- +begin
- + Result := True;
- + if Assigned(FOnAcceptText) then FOnAcceptText(Self, NewText, Result);
- +end;
- +
- +procedure TTBEditItem.DoTextChanging(const OldText: String; var NewText: String; Reason: Integer);
- +begin
- + case FCharCase of
- + ecUpperCase: NewText := AnsiUpperCase(NewText);
- + ecLowerCase: NewText := AnsiLowerCase(NewText);
- + end;
- +end;
- +
- +procedure TTBEditItem.DoTextChanged(Reason: Integer);
- +begin
- +end;
- +
- procedure TTBEditItem.SetText(Value: String);
- begin
- - case FCharCase of
- - ecUpperCase: Value := AnsiUpperCase(Value);
- - ecLowerCase: Value := AnsiLowerCase(Value);
- - end;
- + DoTextChanging(FText, Value, tcrSetProperty);
- + if FText <> Value then begin
- + FText := Value;
- + Change(False);
- + DoTextChanged(tcrSetProperty);
- + end;
- +end;
- +
- +procedure TTBEditItem.SetTextEx(Value: String; Reason: Integer);
- +begin
- + DoTextChanging(FText, Value, Reason);
- if FText <> Value then begin
- FText := Value;
- Change(False);
- + DoTextChanged(Reason);
- end;
- end;
-
-
- { TTBEditItemViewer }
-
- @@ -516,20 +556,15 @@
- var
- Item: TTBEditItem;
-
- procedure AcceptText;
- var
- S: String;
- - Accept: Boolean;
- begin
- S := FEditControl.Text;
- - Accept := True;
- - if Assigned(Item.FOnAcceptText) then
- - Item.FOnAcceptText(Self, S, Accept);
- - if Accept then
- - Item.Text := S;
- + if Item.DoAcceptText(S) then Item.SetTextEx(S, tcrEditControl);
- end;
-
- begin
- Item := TTBEditItem(Self.Item);
- if FEditControl = nil then
- Exit;
- @@ -555,12 +590,17 @@
- { Someone has stolen the focus from us, so 'cancel mode'. (We have to
- handle WM_KILLFOCUS in addition to the upstream WM_CANCELMODE handling
- since we don't always hold the mouse capture.) }
- View.CancelMode;
- FEditControlStatus := [ecsClose];
- end;
- +end;
- +
- +function TTBEditItemViewer.GetEditControlClass: TEditClass;
- +begin
- + Result := TEdit;
- end;
-
- procedure TTBEditItemViewer.GetEditRect(var R: TRect);
- var
- Item: TTBEditItem;
- DC: HDC;
- @@ -785,12 +825,13 @@
- end;
-
- var
- Item: TTBEditItem;
- R: TRect;
- ActiveWnd, FocusWnd: HWND;
- + S: string;
- begin
- Item := TTBEditItem(Self.Item);
- GetEditRect(R);
- if IsRectEmpty(R) then begin
- Result := False;
- Exit;
- @@ -798,14 +839,14 @@
-
- ActiveWnd := GetActiveWindow;
- FocusWnd := GetFocus;
-
- { Create the edit control }
- InflateRect(R, -3, -3);
- - //View.FreeNotification(Self);
- - FEditControl := TEdit.Create(nil);
- + //View.FreeNotification (Self);
- + FEditControl := GetEditControlClass.Create(nil);
- try
- FEditControl.Name := Format('%s_edit_control_%p', [ClassName,
- Pointer(FEditControl)]);
- FEditControl.Visible := False;
- FEditControl.BorderStyle := bsNone;
- FEditControl.AutoSize := False;
- @@ -826,14 +867,19 @@
- else
- ActiveWnd := 0;
-
- FEditControlStatus := [ecsContinueLoop];
- ControlMessageLoop;
- finally
- + S := FEditControl.Text;
- FreeAndNil(FEditControl);
- end;
- +
- + with TTBEditItem(Item) do
- + if (FEditControlStatus = [ecsContinueLoop]) and ExtendedAccept then
- + if DoAcceptText(S) then SetTextEx(S, tcrEditControl);
-
- { ensure the area underneath the edit control is repainted immediately }
- View.Window.Update;
- { If app is still active, set focus to previous control and restore capture
- to CapHandle if another control hasn't taken it }
- if GetActiveWindow <> 0 then begin
- --- TB2Item.pas 2005-06-23 16:55:44.000000000 +-0400
- +++ TB2Item.pas 2005-08-12 08:32:48.000000000 +-0400
- @@ -38,12 +38,20 @@
- XP with themes enabled. }
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, CommCtrl, Menus, ActnList, ImgList, TB2Anim;
-
- +const
- + WM_TB2K_POPUPSHOWING = WM_USER + 554;
- +
- + { Parameter in LParam of WM_TB2K_POPUPSHOWING }
- + TPS_ANIMSTART = 1; // animation query: if Result <> 0, do not animate!
- + TPS_ANIMFINISHED = 2; // only fired when animation thread is done
- + TPS_NOANIM = 3; // fired when animation is done, or if showing with no animation
- +
- type
- TTBCustomItem = class;
- TTBCustomItemClass = class of TTBCustomItem;
- TTBCustomItemActionLink = class;
- TTBCustomItemActionLinkClass = class of TTBCustomItemActionLink;
- TTBItemViewer = class;
- @@ -79,13 +87,13 @@
- tboLongHintInMenuOnly, tboNoAutoHint, tboNoRotation, tboSameWidth,
- tboShowHint, tboToolbarStyle, tboToolbarSize);
- TTBItemOptions = set of TTBItemOption;
- TTBItemStyle = set of (tbisSubmenu, tbisSelectable, tbisSeparator,
- tbisEmbeddedGroup, tbisClicksTransparent, tbisCombo, tbisNoAutoOpen,
- tbisSubitemsEditable, tbisNoLineBreak, tbisRightAlign, tbisDontSelectFirst,
- - tbisRedrawOnSelChange, tbisRedrawOnMouseOverChange);
- + tbisRedrawOnSelChange, tbisRedrawOnMouseOverChange, tbisStretch);
- TTBPopupAlignment = (tbpaLeft, tbpaRight, tbpaCenter);
- TTBPopupEvent = procedure(Sender: TTBCustomItem; FromLink: Boolean) of object;
- TTBSelectEvent = procedure(Sender: TTBCustomItem; Viewer: TTBItemViewer;
- Selecting: Boolean) of object;
-
- ETBItemError = class(Exception);
- @@ -94,12 +102,24 @@
- private
- FLastWidth, FLastHeight: Integer;
- end;
- {$IFNDEF JR_D5}
- TImageIndex = type Integer;
- {$ENDIF}
- + TTBPopupPositionRec = record
- + PositionAsSubmenu: Boolean;
- + Alignment: TTBPopupAlignment;
- + Opposite: Boolean;
- + MonitorRect: TRect;
- + ParentItemRect: TRect;
- + NCSizeX: Integer;
- + NCSizeY: Integer;
- + X, Y, W, H: Integer;
- + AnimDir: TTBAnimationDirection;
- + PlaySound: Boolean;
- + end;
-
- TTBCustomItem = class(TComponent)
- private
- FActionLink: TTBCustomItemActionLink;
- FAutoCheck: Boolean;
- FCaption: String;
- @@ -185,12 +205,14 @@
- procedure DoPopup(Sender: TTBCustomItem; FromLink: Boolean); virtual;
- procedure EnabledChanged; virtual;
- function GetActionLinkClass: TTBCustomItemActionLinkClass; dynamic;
- function GetChevronParentView: TTBView; virtual;
- procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
- function GetItemViewerClass(AView: TTBView): TTBItemViewerClass; virtual;
- + procedure GetPopupPosition(ParentView: TTBView;
- + PopupWindow: TTBPopupWindow; var PopupPositionRec: TTBPopupPositionRec); virtual;
- function GetPopupWindowClass: TTBPopupWindowClass; virtual;
- procedure IndexError;
- procedure Loaded; override;
- function NeedToRecreateViewer(AViewer: TTBItemViewer): Boolean; virtual;
- procedure Notification(AComponent: TComponent; Operation: TOperation); override;
- function OpenPopup(const SelectFirstItem, TrackRightButton: Boolean;
- @@ -317,21 +339,21 @@
- procedure CalcSize(const Canvas: TCanvas; var AWidth, AHeight: Integer);
- virtual;
- function CaptionShown: Boolean; dynamic;
- function DoExecute: Boolean; virtual;
- procedure DrawItemCaption(const Canvas: TCanvas; ARect: TRect;
- const ACaption: String; ADrawDisabledShadow: Boolean; AFormat: UINT); virtual;
- - procedure Entering; virtual;
- + procedure Entering(OldSelected: TTBItemViewer); virtual;
- function GetAccRole: Integer; virtual;
- function GetAccValue(var Value: WideString): Boolean; virtual;
- function GetCaptionText: String; virtual;
- procedure GetCursor(const Pt: TPoint; var ACursor: HCURSOR); virtual;
- function GetImageList: TCustomImageList;
- function ImageShown: Boolean;
- function IsRotated: Boolean;
- - function IsToolbarSize: Boolean;
- + function IsToolbarSize: Boolean; virtual;
- function IsPtInButtonPart(X, Y: Integer): Boolean; virtual;
- procedure KeyDown(var Key: Word; Shift: TShiftState); virtual;
- procedure Leaving; virtual;
- procedure LosingCapture; virtual;
- procedure MouseDown(Shift: TShiftState; X, Y: Integer;
- var MouseDownOnMenu: Boolean); virtual;
- @@ -354,13 +376,13 @@
- constructor Create(AView: TTBView; AItem: TTBCustomItem; AGroupLevel: Integer); virtual;
- destructor Destroy; override;
- procedure Execute(AGivePriority: Boolean);
- function GetAccObject: IDispatch;
- function GetHintText: String;
- function IsAccessible: Boolean;
- - function IsToolbarStyle: Boolean;
- + function IsToolbarStyle: Boolean; virtual;
- function ScreenToClient(const P: TPoint): TPoint;
- end;
- PTBItemViewerArray = ^TTBItemViewerArray;
- TTBItemViewerArray = array[0..$7FFFFFFF div SizeOf(TTBItemViewer)-1] of TTBItemViewer;
- TTBViewOrientation = (tbvoHorizontal, tbvoVertical, tbvoFloating);
- TTBEnterToolbarLoopOptions = set of (tbetMouseDown, tbetExecuteSelected,
- @@ -452,12 +474,16 @@
- function GetRootView: TTBView;
- function HandleWMGetObject(var Message: TMessage): Boolean;
- procedure InitiateActions;
- procedure KeyDown(var Key: Word; Shift: TShiftState); virtual;
- procedure Notification(AComponent: TComponent; Operation: TOperation); override;
- procedure SetAccelsVisibility(AShowAccels: Boolean);
- + procedure SetState(AState: TTBViewState);
- + property DoneActionData: TTBDoneActionData read FDoneActionData write FDoneActionData;
- + property ShowDownArrow: Boolean read FShowDownArrow; {vb+}
- + property ShowUpArrow: Boolean read FShowUpArrow; {vb+}
- public
- constructor CreateView(AOwner: TComponent; AParentView: TTBView;
- AParentItem: TTBCustomItem; AWindow: TWinControl;
- AIsToolbar, ACustomizing, AUsePriorityList: Boolean); virtual;
- destructor Destroy; override;
- procedure BeginUpdate;
- @@ -663,19 +689,22 @@
- procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
- procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT;
- procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
- procedure WMPrint(var Message: TMessage); message WM_PRINT;
- procedure WMPrintClient(var Message: TMessage); message WM_PRINTCLIENT;
- procedure WMTB2kStepAnimation(var Message: TMessage); message WM_TB2K_STEPANIMATION;
- + procedure WMTB2kAnimationEnded (var Message: TMessage); message WM_TB2K_ANIMATIONENDED;
- protected
- procedure CreateParams(var Params: TCreateParams); override;
- procedure CreateWnd; override;
- procedure DestroyWindowHandle; override;
- + function GetNCSize: TPoint; dynamic;
- function GetViewClass: TTBViewClass; dynamic;
- procedure Paint; override;
- procedure PaintScrollArrows; virtual;
- + property AnimationDirection: TTBAnimationDirection read FAnimationDirection;
- public
- constructor CreatePopupWindow(AOwner: TComponent; const AParentView: TTBView;
- const AItem: TTBCustomItem; const ACustomizing: Boolean); virtual;
- destructor Destroy; override;
- procedure BeforeDestruction; override;
-
- @@ -811,26 +840,12 @@
-
- procedure TBInitToolbarSystemFont;
-
- var
- ToolbarFont: TFont;
-
- -
- -implementation
- -
- -uses
- - MMSYSTEM, TB2Consts, TB2Common, IMM, TB2Acc;
- -
- -var
- - LastPos: TPoint;
- -
- -threadvar
- - ClickWndRefCount: Integer;
- - ClickWnd: HWND;
- - ClickList: TList;
- -
- type
- TTBModalHandler = class
- private
- FCreatedWnd: Boolean;
- FInited: Boolean;
- FWnd: HWND;
- @@ -842,12 +857,29 @@
- procedure Loop(const RootView: TTBView; const AMouseDown, AExecuteSelected,
- AFromMSAA, TrackRightButton: Boolean);
- property RootPopup: TTBPopupWindow read FRootPopup write FRootPopup;
- property Wnd: HWND read FWnd;
- end;
-
- +function ProcessDoneAction(const DoneActionData: TTBDoneActionData;
- + const ReturnClickedItemOnly: Boolean): TTBCustomItem;
- +
- +implementation
- +
- +uses
- + MMSYSTEM, TB2Consts, TB2Common, IMM, TB2Acc;
- +
- +var
- + LastPos: TPoint;
- +
- +threadvar
- + ClickWndRefCount: Integer;
- + ClickWnd: HWND;
- + ClickList: TList;
- +
- +type
- PItemChangedNotificationData = ^TItemChangedNotificationData;
- TItemChangedNotificationData = record
- Proc: TTBItemChangedProc;
- RefCount: Integer;
- end;
-
- @@ -1678,16 +1710,17 @@
- Click;
- end;
-
- var
- PlayedSound: Boolean = False;
-
- -function TTBCustomItem.CreatePopup(const ParentView: TTBView;
- - const ParentViewer: TTBItemViewer; const PositionAsSubmenu, SelectFirstItem,
- - Customizing: Boolean; const APopupPoint: TPoint;
- - const Alignment: TTBPopupAlignment): TTBPopupWindow;
- +procedure TTBCustomItem.GetPopupPosition(ParentView: TTBView;
- + PopupWindow: TTBPopupWindow; var PopupPositionRec: TTBPopupPositionRec);
- +var
- + X2, Y2: Integer;
- + RepeatCalcX: Boolean;
-
- function CountObscured(X, Y, W, H: Integer): Integer;
- var
- I: Integer;
- P: TPoint;
- V: TTBItemViewer;
- @@ -1705,129 +1738,24 @@
- if V.Show and (V.BoundsRect.Left >= X) and (V.BoundsRect.Right <= W) and
- (V.BoundsRect.Top >= Y) and (V.BoundsRect.Bottom <= H) then
- Inc(Result);
- end;
- end;
-
- -var
- - EventItem, ParentItem: TTBCustomItem;
- - Opposite: Boolean;
- - ChevronParentView: TTBView;
- - X, X2, Y, Y2, W, H: Integer;
- - P: TPoint;
- - RepeatCalcX: Boolean;
- - ParentItemRect: TRect;
- - MonitorRect: TRect;
- - AnimDir: TTBAnimationDirection;
- begin
- - EventItem := ItemContainingItems(Self);
- - if EventItem <> Self then
- - EventItem.DoPopup(Self, True);
- - DoPopup(Self, False);
- -
- - ChevronParentView := GetChevronParentView;
- - if ChevronParentView = nil then
- - ParentItem := Self
- - else
- - ParentItem := ChevronParentView.FParentItem;
- -
- - Opposite := Assigned(ParentView) and (vsOppositePopup in ParentView.FState);
- - Result := GetPopupWindowClass.CreatePopupWindow(nil, ParentView, ParentItem,
- - Customizing);
- - try
- - if Assigned(ChevronParentView) then begin
- - ChevronParentView.FreeNotification(Result.View);
- - Result.View.FChevronParentView := ChevronParentView;
- - Result.View.FIsToolbar := True;
- - Result.View.Style := Result.View.Style +
- - (ChevronParentView.Style * [vsAlwaysShowHints]);
- - Result.Color := clBtnFace;
- - end;
- -
- - { Calculate ParentItemRect, and MonitorRect (the rectangle of the monitor
- - that the popup window will be confined to) }
- - if Assigned(ParentView) then begin
- - ParentView.ValidatePositions;
- - ParentItemRect := ParentViewer.BoundsRect;
- - P := ParentView.FWindow.ClientToScreen(Point(0, 0));
- - OffsetRect(ParentItemRect, P.X, P.Y);
- - if not IsRectEmpty(ParentView.FMonitorRect) then
- - MonitorRect := ParentView.FMonitorRect
- - else
- - MonitorRect := GetRectOfMonitorContainingRect(ParentItemRect, False);
- - end
- - else begin
- - ParentItemRect.TopLeft := APopupPoint;
- - ParentItemRect.BottomRight := APopupPoint;
- - MonitorRect := GetRectOfMonitorContainingPoint(APopupPoint, False);
- - end;
- - Result.View.FMonitorRect := MonitorRect;
- -
- - { Initialize item positions and size of the popup window }
- - if ChevronParentView = nil then
- - Result.View.FMaxHeight := (MonitorRect.Bottom - MonitorRect.Top) -
- - (PopupMenuWindowNCSize * 2)
- - else
- - Result.View.WrapOffset := (MonitorRect.Right - MonitorRect.Left) -
- - (PopupMenuWindowNCSize * 2);
- - if SelectFirstItem then
- - Result.View.Selected := Result.View.FirstSelectable;
- - Result.View.UpdatePositions;
- - W := Result.Width;
- - H := Result.Height;
- -
- - { Calculate initial X,Y position of the popup window }
- - if Assigned(ParentView) then begin
- - if not PositionAsSubmenu then begin
- - if ChevronParentView = nil then begin
- - if (ParentView = nil) or (ParentView.FOrientation <> tbvoVertical) then begin
- - if GetSystemMetrics(SM_MENUDROPALIGNMENT) = 0 then
- - X := ParentItemRect.Left
- - else
- - X := ParentItemRect.Right - W;
- - Y := ParentItemRect.Bottom;
- - end
- - else begin
- - X := ParentItemRect.Left - W;
- - Y := ParentItemRect.Top;
- - end;
- - end
- - else begin
- - if ChevronParentView.FOrientation <> tbvoVertical then begin
- - X := ParentItemRect.Right - W;
- - Y := ParentItemRect.Bottom;
- - end
- - else begin
- - X := ParentItemRect.Left - W;
- - Y := ParentItemRect.Top;
- - end;
- - end;
- - end
- - else begin
- - X := ParentItemRect.Right - PopupMenuWindowNCSize;
- - Y := ParentItemRect.Top - PopupMenuWindowNCSize;
- - end;
- - end
- - else begin
- - X := APopupPoint.X;
- - Y := APopupPoint.Y;
- - case Alignment of
- - tbpaRight: Dec(X, W);
- - tbpaCenter: Dec(X, W div 2);
- - end;
- - end;
- -
- + with PopupPositionRec do
- + begin
- { Adjust the Y position of the popup window }
- { If the window is going off the bottom of the monitor, try placing it
- above the parent item }
- if (Y + H > MonitorRect.Bottom) and
- ((ParentView = nil) or (ParentView.FOrientation <> tbvoVertical)) then begin
- if not PositionAsSubmenu then
- Y2 := ParentItemRect.Top
- else
- - Y2 := ParentItemRect.Bottom + PopupMenuWindowNCSize;
- + Y2 := ParentItemRect.Bottom + NCSizeY;
- Dec(Y2, H);
- { Only place it above the parent item if it isn't going to go off the
- top of the monitor }
- if Y2 >= MonitorRect.Top then
- Y := Y2;
- end;
- @@ -1897,23 +1825,23 @@
- runs out of space on the screen, switch directions }
- repeat
- RepeatCalcX := False;
- X2 := X;
- if Opposite or (X2 + W > MonitorRect.Right) then begin
- if Assigned(ParentView) then
- - X2 := ParentItemRect.Left + PopupMenuWindowNCSize;
- + X2 := ParentItemRect.Left + NCSizeX;
- Dec(X2, W);
- if not Opposite then
- - Include(Result.View.FState, vsOppositePopup)
- + Include(PopupWindow.View.FState, vsOppositePopup)
- else begin
- if X2 < MonitorRect.Left then begin
- Opposite := False;
- RepeatCalcX := True;
- end
- else
- - Include(Result.View.FState, vsOppositePopup);
- + Include(PopupWindow.View.FState, vsOppositePopup);
- end;
- end;
- until not RepeatCalcX;
- X := X2;
- if X < MonitorRect.Left then
- X := MonitorRect.Left;
- @@ -1934,14 +1862,149 @@
- else begin
- if X + W div 2 >= ParentItemRect.Left + (ParentItemRect.Right - ParentItemRect.Left) div 2 then
- Include(AnimDir, tbadRight)
- else
- Include(AnimDir, tbadLeft);
- end;
- - Result.FAnimationDirection := AnimDir;
- + end;
- +end;
- +
- +function TTBCustomItem.CreatePopup(const ParentView: TTBView;
- + const ParentViewer: TTBItemViewer; const PositionAsSubmenu, SelectFirstItem,
- + Customizing: Boolean; const APopupPoint: TPoint;
- + const Alignment: TTBPopupAlignment): TTBPopupWindow;
- +var
- + EventItem, ParentItem: TTBCustomItem;
- + Opposite: Boolean;
- + ChevronParentView: TTBView;
- + X, Y, W, H: Integer;
- + P: TPoint;
- + ParentItemRect: TRect;
- + MonitorRect: TRect;
- + PopupRec: TTBPopupPositionRec;
- + NCSize: TPoint;
- +begin
- + EventItem := ItemContainingItems(Self);
- + if EventItem <> Self then
- + EventItem.DoPopup(Self, True);
- + DoPopup(Self, False);
- +
- + ChevronParentView := GetChevronParentView;
- + if ChevronParentView = nil then
- + ParentItem := Self
- + else
- + ParentItem := ChevronParentView.FParentItem;
- +
- + Opposite := Assigned(ParentView) and (vsOppositePopup in ParentView.FState);
- + Result := GetPopupWindowClass.CreatePopupWindow(nil, ParentView, ParentItem,
- + Customizing);
- + try
- + if Assigned(ChevronParentView) then begin
- + ChevronParentView.FreeNotification(Result.View);
- + Result.View.FChevronParentView := ChevronParentView;
- + Result.View.FIsToolbar := True;
- + Result.View.Style := Result.View.Style +
- + (ChevronParentView.Style * [vsAlwaysShowHints]);
- + Result.Color := clBtnFace;
- + end;
-
- + { Calculate ParentItemRect, and MonitorRect (the rectangle of the monitor
- + that the popup window will be confined to) }
- + if Assigned(ParentView) then begin
- + ParentView.ValidatePositions;
- + ParentItemRect := ParentViewer.BoundsRect;
- + P := ParentView.FWindow.ClientToScreen(Point(0, 0));
- + OffsetRect(ParentItemRect, P.X, P.Y);
- + if not IsRectEmpty(ParentView.FMonitorRect) then
- + MonitorRect := ParentView.FMonitorRect
- + else
- + {MonitorRect := GetRectOfMonitorContainingPoint(APopupPoint, False);} {vb-}
- + MonitorRect := GetRectOfMonitorContainingPoint(APopupPoint, True); {vb+}
- + end
- + else begin
- + ParentItemRect.TopLeft := APopupPoint;
- + ParentItemRect.BottomRight := APopupPoint;
- + {MonitorRect := GetRectOfMonitorContainingPoint(APopupPoint, False);} {vb-}
- + MonitorRect := GetRectOfMonitorContainingPoint(APopupPoint, True); {vb+}
- + end;
- + Result.View.FMonitorRect := MonitorRect;
- +
- + { Initialize item positions and size of the popup window }
- + NCSize := Result.GetNCSize;
- + if ChevronParentView = nil then
- + Result.View.FMaxHeight := (MonitorRect.Bottom - MonitorRect.Top) -
- + (NCSize.Y * 2)
- + else
- + Result.View.WrapOffset := (MonitorRect.Right - MonitorRect.Left) -
- + (NCSize.X * 2);
- + if SelectFirstItem then
- + Result.View.Selected := Result.View.FirstSelectable;
- + Result.View.UpdatePositions;
- + W := Result.Width;
- + H := Result.Height;
- +
- + { Calculate initial X,Y position of the popup window }
- + if Assigned(ParentView) then begin
- + if not PositionAsSubmenu then begin
- + if ChevronParentView = nil then begin
- + if (ParentView = nil) or (ParentView.FOrientation <> tbvoVertical) then begin
- + if GetSystemMetrics(SM_MENUDROPALIGNMENT) = 0 then
- + X := ParentItemRect.Left
- + else
- + X := ParentItemRect.Right - W;
- + Y := ParentItemRect.Bottom;
- + end
- + else begin
- + X := ParentItemRect.Left - W;
- + Y := ParentItemRect.Top;
- + end;
- + end
- + else begin
- + if ChevronParentView.FOrientation <> tbvoVertical then begin
- + X := ParentItemRect.Right - W;
- + Y := ParentItemRect.Bottom;
- + end
- + else begin
- + X := ParentItemRect.Left - W;
- + Y := ParentItemRect.Top;
- + end;
- + end;
- + end
- + else begin
- + X := ParentItemRect.Right - NCSize.X;
- + Y := ParentItemRect.Top - NCSize.Y;
- + end;
- + end
- + else begin
- + X := APopupPoint.X;
- + Y := APopupPoint.Y;
- + case Alignment of
- + tbpaRight: Dec(X, W);
- + tbpaCenter: Dec(X, W div 2);
- + end;
- + end;
- +
- + PopupRec.PositionAsSubmenu := PositionAsSubmenu;
- + PopupRec.Alignment := Alignment;
- + PopupRec.Opposite := Opposite;
- + PopupRec.MonitorRect := MonitorRect;
- + PopupRec.ParentItemRect := ParentItemRect;
- + PopupRec.NCSizeX := NCSize.X;
- + PopupRec.NCSizeY := NCSize.Y;
- + PopupRec.X := X;
- + PopupRec.Y := Y;
- + PopupRec.W := W;
- + PopupRec.H := H;
- + PopupRec.AnimDir := [];
- + PopupRec.PlaySound := True;
- + GetPopupPosition(ParentView, Result, PopupRec);
- + X := PopupRec.X;
- + Y := PopupRec.Y;
- + W := PopupRec.W;
- + H := PopupRec.H;
- + Result.FAnimationDirection := PopupRec.AnimDir;
- Result.SetBounds(X, Y, W, H);
- if Assigned(ParentView) then begin
- Result.FreeNotification(ParentView);
- ParentView.FOpenViewerWindow := Result;
- ParentView.FOpenViewerView := Result.View;
- ParentView.FOpenViewer := ParentViewer;
- @@ -1949,13 +2012,13 @@
- Include(ParentView.FState, vsDropDownMenus);
- ParentView.Invalidate(ParentViewer);
- ParentView.FWindow.Update;
- end;
- end;
- Include(Result.View.FState, vsDrawInOrder);
- - if not NeedToPlaySound('MenuPopup') then begin
- + if not PopupRec.PlaySound or not NeedToPlaySound('MenuPopup') then begin
- { Don't call PlaySound if we don't have to }
- Result.Visible := True;
- end
- else begin
- if not PlayedSound then begin
- { Work around Windows 2000 "bug" where there's a 1/3 second delay upon the
- @@ -2626,12 +2689,13 @@
- P := Pos(#9, Result);
- if P <> 0 then
- SetLength(Result, P-1);
- end;
-
- function TTBItemViewer.GetHintText: String;
- +var P: Integer;
- begin
- Result := GetShortHint(Item.Hint);
- { If there is no short hint, use the caption for the hint. Like Office,
- strip any trailing colon or ellipsis. }
- if (Result = '') and not(tboNoAutoHint in Item.EffectiveOptions) and
- (not(tbisSubmenu in Item.ItemStyle) or (tbisCombo in Item.ItemStyle) or
- @@ -2643,15 +2707,22 @@
- if not TCustomAction(Item.ActionLink.Action).DoHint(Result) then
- Result := '';
- { Note: TControlActionLink.DoShowHint actually misinterprets the result
- of DoHint, but we get it right... }
- end;
- { Add shortcut text }
- - if (Result <> '') and Application.HintShortCuts and
- - (Item.ShortCut <> scNone) then
- - Result := Format('%s (%s)', [Result, ShortCutToText(Item.ShortCut)]);
- + if (Result <> '') and Application.HintShortCuts then
- + begin
- + { Custom shortcut }
- + P := Pos(#9, Item.Caption);
- + if (P <> 0) and (P < Length(Item.Caption)) then
- + Result := Format('%s (%s)', [Result, Copy(Item.Caption, P+ 1, MaxInt)])
- + else
- + if (Item.ShortCut <> scNone) then
- + Result := Format('%s (%s)', [Result, ShortCutToText(Item.ShortCut)]);
- + end;
- end;
-
- function TTBItemViewer.CaptionShown: Boolean;
- begin
- Result := (GetCaptionText <> '') and (not IsToolbarSize or
- (Item.ImageIndex < 0) or (Item.DisplayMode in [nbdmTextOnly, nbdmImageAndText])) or
- @@ -3283,13 +3354,13 @@
-
- procedure TTBItemViewer.LosingCapture;
- begin
- View.Invalidate(Self);
- end;
-
- -procedure TTBItemViewer.Entering;
- +procedure TTBItemViewer.Entering(OldSelected: TTBItemViewer);
- begin
- if Assigned(Item.FOnSelect) then
- Item.FOnSelect(Item, Self, True);
- end;
-
- procedure TTBItemViewer.Leaving;
- @@ -4086,13 +4157,13 @@
- FMouseOverSelected := NewMouseOverSelected;
- if Assigned(OldSelected) and (tbisRedrawOnSelChange in OldSelected.Item.ItemStyle) then
- Invalidate(OldSelected);
- if Assigned(Value) then begin
- if tbisRedrawOnSelChange in Value.Item.ItemStyle then
- Invalidate(Value);
- - Value.Entering;
- + Value.Entering(OldSelected);
- end;
- NotifyFocusEvent;
-
- { Handle automatic opening of a child popup }
- if vsModal in FState then begin
- { If the view is a toolbar, immediately open any child popup }
- @@ -4379,13 +4450,13 @@
- if LastLine and not DidWrap and (AOrientation <> tbvoFloating) then begin
- { In case the toolbar is docked next to a taller/wider toolbar... }
- HighestWidthOnLine := TotalSize.X;
- HighestHeightOnLine := TotalSize.Y;
- end;
- { Make separators on toolbars as tall/wide as the tallest/widest item }
- - if tbisSeparator in Item.ItemStyle then begin
- + if [tbisSeparator, tbisStretch] * Item.ItemStyle <> [] then begin
- if AOrientation <> tbvoVertical then
- Pos.BoundsRect.Bottom := Pos.BoundsRect.Top + HighestHeightOnLine
- else
- Pos.BoundsRect.Right := Pos.BoundsRect.Left + HighestWidthOnLine;
- end
- else begin
- @@ -5692,12 +5763,16 @@
-
- { Note: This doesn't remove the selection from a top-level toolbar item.
- Unfortunately, we can't do 'Selected := nil' because it would destroy
- child popups and that must'nt happen for the reason stated above. }
- end;
-
- +procedure TTBView.SetState(AState: TTBViewState);
- +begin
- + FState := AState;
- +end;
-
- { TTBModalHandler }
-
- const
- LSFW_LOCK = 1;
- LSFW_UNLOCK = 2;
- @@ -6181,15 +6256,16 @@
-
-
- { TTBPopupView }
-
- procedure TTBPopupView.AutoSize(AWidth, AHeight: Integer);
- begin
- - with FWindow do
- - SetBounds(Left, Top, AWidth + (PopupMenuWindowNCSize * 2),
- - AHeight + (PopupMenuWindowNCSize * 2));
- + with TTBPopupWindow(FWindow) do
- + with GetNCSize do
- + SetBounds(Left, Top, AWidth + (X * 2),
- + AHeight + (Y * 2));
- end;
-
- function TTBPopupView.GetFont: TFont;
- begin
- Result := (Owner as TTBPopupWindow).Font;
- end;
- @@ -6260,12 +6336,18 @@
- restored without generating a WM_PAINT message. }
- if Assigned(FView) then
- FView.CloseChildPopups;
- inherited;
- end;
-
- +function TTBPopupWindow.GetNCSize: TPoint;
- +begin
- + Result.X := PopupMenuWindowNCSize;
- + Result.Y := PopupMenuWindowNCSize;
- +end;
- +
- function TTBPopupWindow.GetViewClass: TTBViewClass;
- begin
- Result := TTBPopupView;
- end;
-
- procedure TTBPopupWindow.CreateParams(var Params: TCreateParams);
- @@ -6343,26 +6425,36 @@
- {$IFNDEF TB2K_NO_ANIMATION}
- if ((FView.ParentView = nil) or not(vsNoAnimation in FView.FParentView.FState)) and
- Showing and (FView.Selected = nil) and not IsWindowVisible(WindowHandle) and
- SystemParametersInfo(SPI_GETMENUANIMATION, 0, @Animate, 0) and Animate then begin
- Blend := SystemParametersInfo(SPI_GETMENUFADE, 0, @Animate, 0) and Animate;
- if Blend or (FAnimationDirection <> []) then begin
- - TBStartAnimation(WindowHandle, Blend, FAnimationDirection);
- - Exit;
- + if SendMessage(WindowHandle, WM_TB2K_POPUPSHOWING, TPS_ANIMSTART, 0) = 0 then
- + begin
- + { Start animation only if WM_TB2K_POPUPSHOWING returns zero (or not handled) }
- + TBStartAnimation(WindowHandle, Blend, FAnimationDirection);
- + Exit;
- + end;
- end;
- end;
- {$ENDIF}
-
- { No animation... }
- if not Showing then begin
- { Call TBEndAnimation to ensure WS_EX_LAYERED style is removed before
- hiding, otherwise windows under the popup window aren't repainted
- properly. }
- TBEndAnimation(WindowHandle);
- end;
- SetWindowPos(WindowHandle, 0, 0, 0, 0, 0, ShowFlags[Showing]);
- + if Showing then SendNotifyMessage(WindowHandle, WM_TB2K_POPUPSHOWING, TPS_NOANIM, 0);
- +end;
- +
- +procedure TTBPopupWindow.WMTB2kAnimationEnded(var Message: TMessage);
- +begin
- + SendNotifyMessage(WindowHandle, WM_TB2K_POPUPSHOWING, TPS_ANIMFINISHED, 0);
- end;
-
- procedure TTBPopupWindow.WMTB2kStepAnimation(var Message: TMessage);
- begin
- TBStepAnimation(Message);
- end;
- @@ -6426,14 +6518,14 @@
- begin
- { do nothing -- ignore Alt+F4 keypresses }
- end;
-
- procedure TTBPopupWindow.WMNCCalcSize(var Message: TWMNCCalcSize);
- begin
- - InflateRect(Message.CalcSize_Params^.rgrc[0],
- - -PopupMenuWindowNCSize, -PopupMenuWindowNCSize);
- + with GetNCSize do
- + InflateRect(Message.CalcSize_Params^.rgrc[0], -X, -Y);
- inherited;
- end;
-
- procedure PopupWindowNCPaintProc(Wnd: HWND; DC: HDC; AppData: Longint);
- var
- R: TRect;
- --- TB2MRU.pas 2005-01-05 21:56:50.000000000 +-0400
- +++ TB2MRU.pas 2005-08-02 18:38:34.000000000 +-0400
- @@ -50,12 +50,13 @@
- procedure ClickHandler(Sender: TObject);
- procedure SetHidePathExtension(Value: Boolean);
- procedure SetList(Value: TStrings);
- procedure SetMaxItems(Value: Integer);
- protected
- property Container: TTBCustomItem read FContainer;
- + function GetFirstKey: Integer; virtual;
- function GetItemClass: TTBCustomItemClass; virtual;
- procedure SetItemCaptions; virtual;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure Add(Filename: String);
- @@ -293,37 +294,39 @@
- Ini.DeleteKey(Section, FPrefix + IntToStr(I));
- end;
- end;
-
- procedure TTBMRUList.SetItemCaptions;
- var
- - I, J: Integer;
- + I, J, N: Integer;
- Key: Char;
- S: String;
- Buf: array[0..MAX_PATH-1] of Char;
- begin
- while FList.Count > FMaxItems do
- FList.Delete(FList.Count-1);
- + N := GetFirstKey;
- for I := 0 to FContainer.Count-1 do begin
- Key := #0;
- - if I < 9 then
- - Key := Chr(Ord('1') + I)
- + if N < 9 then
- + Key := Chr(Ord('1') + N)
- else begin
- { No more numbers; try letters }
- - J := I - 9;
- + J := N - 9;
- if J < 26 then
- Key := Chr(Ord('A') + J);
- end;
- S := FList[I];
- if HidePathExtension and (GetFileTitle(PChar(S), Buf, SizeOf(Buf)) = 0) then
- S := Buf;
- S := EscapeAmpersands(S);
- if Key <> #0 then
- FContainer[I].Caption := Format('&%s %s', [Key, S])
- else
- FContainer[I].Caption := S;
- + Inc(N);
- end;
- end;
-
- procedure TTBMRUList.ClickHandler(Sender: TObject);
- var
- I: Integer;
- @@ -358,12 +361,17 @@
-
- function TTBMRUList.GetItemClass: TTBCustomItemClass;
- begin
- Result := TTBCustomItem;
- end;
-
- +function TTBMRUList.GetFirstKey: Integer;
- +begin
- + Result := 0;
- +end;
- +
-
- { TTBMRUListItem }
-
- constructor TTBMRUListItem.Create(AOwner: TComponent);
- begin
- inherited;
- --- TB2Reg.pas 2005-01-05 21:56:50.000000000 +-0400
- +++ TB2Reg.pas 2005-06-07 04:59:48.000000000 +-0400
- @@ -33,19 +33,12 @@
- uses
- Windows, SysUtils, Classes, Graphics, Controls, Dialogs, ActnList, ImgList,
- {$IFDEF JR_D6} DesignIntf, DesignEditors, VCLEditors, {$ELSE} DsgnIntf, {$ENDIF}
- TB2Toolbar, TB2ToolWindow, TB2Dock, TB2Item, TB2ExtItems, TB2MRU, TB2MDI,
- TB2DsgnItemEditor;
-
- -procedure Register;
- -
- -implementation
- -
- -uses
- - ImgEdit;
- -
- {$IFDEF JR_D5}
-
- { TTBImageIndexPropertyEditor }
-
- { Unfortunately TComponentImageIndexPropertyEditor seems to be gone in
- Delphi 6, so we have to use our own image index property editor class }
- @@ -64,12 +57,31 @@
- procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
- var AWidth: Integer); {$IFNDEF JR_D6} override; {$ENDIF}
- procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
- const ARect: TRect; ASelected: Boolean); {$IFNDEF JR_D6} override; {$ENDIF}
- end;
-
- +{ TTBItemImageIndexPropertyEditor }
- +
- +type
- + TTBItemImageIndexPropertyEditor = class(TTBImageIndexPropertyEditor)
- + public
- + function GetImageListAt (Index: Integer): TCustomImageList; override;
- + end;
- +
- +{$ENDIF}
- +
- +procedure Register;
- +
- +implementation
- +
- +uses
- + ImgEdit;
- +
- +{$IFDEF JR_D5}
- +
- function TTBImageIndexPropertyEditor.GetAttributes: TPropertyAttributes;
- begin
- Result := [paMultiSelect, paValueList, paRevertable];
- end;
-
- function TTBImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
- @@ -125,18 +137,12 @@
- if Assigned(ImgList) then
- Inc(AWidth, ImgList.Width);
- end;
-
- { TTBItemImageIndexPropertyEditor }
-
- -type
- - TTBItemImageIndexPropertyEditor = class(TTBImageIndexPropertyEditor)
- - protected
- - function GetImageListAt(Index: Integer): TCustomImageList; override;
- - end;
- -
- function TTBItemImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
- var
- C: TPersistent;
- Item: TTBCustomItem;
- begin
- Result := nil;
- --- TB2Toolbar.pas 2005-07-30 13:17:20.000000000 +-0400
- +++ TB2Toolbar.pas 2005-08-01 11:16:18.000000000 +-0400
- @@ -891,12 +891,17 @@
- if Assigned(FView.Selected) then begin
- Item := FView.Selected.Item;
- if not(tboLongHintInMenuOnly in Item.EffectiveOptions) then
- Hint := Item.Hint
- else
- Hint := '';
- +
- + with TTBItemViewerAccess(FView.Find(Item)) do
- + begin
- + MouseMove(X - BoundsRect.Left, Y - BoundsRect.Top);
- + end;
- end
- else
- Hint := '';
- end;
- { Call TrackMouseEvent to be sure that we are notified when the mouse leaves
- the window. We won't get a CM_MOUSELEAVE message if the mouse moves
- --- TB2ToolWindow.pas 2005-01-05 21:56:50.000000000 +-0400
- +++ TB2ToolWindow.pas 2005-02-23 04:57:58.000000000 +-0400
- @@ -192,20 +192,30 @@
- end;
-
- function TTBToolWindow.CalcSize(ADock: TTBDock): TPoint;
- begin
- Result.X := FBarWidth;
- Result.Y := FBarHeight;
- - if Assigned(ADock) and (FullSize or Stretch) then begin
- - { If docked and stretching, return the minimum size so that the toolbar
- - can shrink below FBarWidth/FBarHeight }
- - if not(ADock.Position in [dpLeft, dpRight]) then
- - Result.X := FMinClientWidth
- - else
- - Result.Y := FMinClientHeight;
- - end;
- + if Assigned(ADock) then
- + if FullSize then
- + begin
- + { If docked and full size, return the size corresponding to docked size }
- + if not(ADock.Position in [dpLeft, dpRight]) then
- + Result.X := ADock.ClientWidth - (Width - ClientWidth)
- + else
- + Result.Y := ADock.ClientHeight - (Height - ClientHeight);
- + end
- + else if Stretch then
- + begin
- + { If docked and stretching, return the minimum size so that the toolbar
- + can shrink below FBarWidth/FBarHeight }
- + if not(ADock.Position in [dpLeft, dpRight]) then
- + Result.X := FMinClientWidth
- + else
- + Result.Y := FMinClientHeight;
- + end;
- end;
-
- procedure TTBToolWindow.GetBaseSize(var ASize: TPoint);
- begin
- ASize := CalcSize(CurrentDock);
- end;
|