mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 20:19:29 +02:00
Merged revision(s) 54948-54949 #b54495505b-#b54495505b, 54956 #9edd2d5ad2, 54964 #d208ef2dad, 54970 #aa4dfd880b, 55020 #da1e03941c from trunk:
lcl: grids: high-DPI: rewrite ColWidth&RowHeight scaling so that it's Delphi and Lazarus 1.6 compatible. ........ lcl: grids: add (forgotten) *IsStored functions to DefaultColWidth and DefaultRowHeight properties. (related revision: r54948 #b54495505b) ........ lcl: grids: keep *IsStored functions to DefaultColWidth and DefaultRowHeight properties protected-only (related revision: r54949 #80a8c39f9d) ........ lcl: label: fix CalcFittingFontHeight. Patch by Luca Olivetti ........ lcl: grids: add Options2 = [goScrollToLastCol, goScrollToLastRow]. Issue #31766 ........ lcl: treeview: High-DPI: fix scaling of non-themed node icons. Issue #31829 ........ git-svn-id: branches/fixes_1_8@55052 -
This commit is contained in:
parent
b1bef4a1f5
commit
2f9eb3a4eb
@ -572,6 +572,7 @@ type
|
||||
//property ImeMode;
|
||||
//property ImeName;
|
||||
property Options;
|
||||
property Options2;
|
||||
property OptionsExtra;
|
||||
property ParentBiDiMode;
|
||||
property ParentColor default false;
|
||||
@ -1447,13 +1448,13 @@ end;
|
||||
function TCustomDBGrid.DefaultFieldColWidth(F: TField): Integer;
|
||||
begin
|
||||
if not HandleAllocated or (F=nil) then
|
||||
result:=GetRealDefaultColWidth
|
||||
result:=DefaultColWidth
|
||||
else begin
|
||||
if F.DisplayWidth = 0 then
|
||||
if Canvas.HandleAllocated then
|
||||
result := Canvas.TextWidth( F.DisplayName ) + 3
|
||||
else
|
||||
Result := GetRealDefaultColWidth
|
||||
Result := DefaultColWidth
|
||||
else
|
||||
result := F.DisplayWidth * CalcCanvasCharWidth(Canvas);
|
||||
end;
|
||||
@ -1610,7 +1611,7 @@ begin
|
||||
{$ifdef dbgDBGrid}
|
||||
DebugLn('%s.GetBufferCount', [ClassName]);
|
||||
{$endif}
|
||||
Result := ClientHeight div GetRealDefaultRowHeight;
|
||||
Result := ClientHeight div DefaultRowHeight;
|
||||
if dgTitles in Options then
|
||||
Dec(Result, 1);
|
||||
end;
|
||||
|
248
lcl/grids.pas
248
lcl/grids.pas
@ -117,6 +117,12 @@ type
|
||||
);
|
||||
TGridOptions = set of TGridOption;
|
||||
|
||||
TGridOption2 = (
|
||||
goScrollToLastCol, // allow scrolling to last column (so that last column can be leftcol)
|
||||
goScrollToLastRow // allow scrolling to last row (so that last row can be toprow)
|
||||
);
|
||||
TGridOptions2 = set of TGridOption2;
|
||||
|
||||
TGridSaveOptions = (
|
||||
soDesign, // Save grid structure (col/row count and Options)
|
||||
soAttributes, // Save grid attributes (Font,Brush,TextStyle)
|
||||
@ -179,6 +185,7 @@ const
|
||||
|
||||
DefaultGridOptions = [goFixedVertLine, goFixedHorzLine,
|
||||
goVertLine, goHorzLine, goRangeSelect, goSmoothScroll ];
|
||||
DefaultGridOptions2 = [];
|
||||
|
||||
|
||||
type
|
||||
@ -749,6 +756,7 @@ type
|
||||
FUpdateCount: Integer;
|
||||
FGCache: TGridDataCache;
|
||||
FOptions: TGridOptions;
|
||||
FOptions2: TGridOptions2;
|
||||
FOnDrawCell: TOnDrawcell;
|
||||
FOnBeforeSelection: TOnSelectEvent;
|
||||
FOnSelection: TOnSelectEvent;
|
||||
@ -830,6 +838,8 @@ type
|
||||
function GetColCount: Integer;
|
||||
function GetColWidths(Acol: Integer): Integer;
|
||||
function GetColumns: TGridColumns;
|
||||
function GetDefColWidth: Integer;
|
||||
function GetDefRowHeight: Integer;
|
||||
function GetEditorBorderStyle: TBorderStyle;
|
||||
function GetBorderWidth: Integer;
|
||||
function GetTitleImageInfo(aColumnIndex:Integer; out aWidth, aHeight: Integer;
|
||||
@ -878,6 +888,7 @@ type
|
||||
procedure SetGridLineWidth(const AValue: Integer);
|
||||
procedure SetLeftCol(const AValue: Integer);
|
||||
procedure SetOptions(const AValue: TGridOptions);
|
||||
procedure SetOptions2(const AValue: TGridOptions2);
|
||||
procedure SetRangeSelectMode(const AValue: TRangeSelectMode);
|
||||
procedure SetRow(AValue: Integer);
|
||||
procedure SetRowCount(AValue: Integer);
|
||||
@ -942,6 +953,8 @@ type
|
||||
procedure CreateParams(var Params: TCreateParams); override;
|
||||
procedure Click; override;
|
||||
procedure DblClick; override;
|
||||
function DefaultColWidthIsStored: Boolean;
|
||||
function DefaultRowHeightIsStored: Boolean;
|
||||
procedure DefineProperties(Filer: TFiler); override;
|
||||
procedure DestroyHandle; override;
|
||||
function DialogChar(var Message: TLMKey): boolean; override;
|
||||
@ -1141,8 +1154,8 @@ type
|
||||
property ColumnClickSorts: boolean read FColumnClickSorts write SetColumnClickSorts default false;
|
||||
property Columns: TGridColumns read GetColumns write SetColumns stored IsColumnsStored;
|
||||
property ColWidths[aCol: Integer]: Integer read GetColWidths write SetColWidths;
|
||||
property DefaultColWidth: Integer read FDefColWidth write SetDefColWidth default 0;
|
||||
property DefaultRowHeight: Integer read FDefRowHeight write SetDefRowHeight default 0;
|
||||
property DefaultColWidth: Integer read GetDefColWidth write SetDefColWidth stored DefaultColWidthIsStored;
|
||||
property DefaultRowHeight: Integer read GetDefRowHeight write SetDefRowHeight stored DefaultRowHeightIsStored;
|
||||
property DefaultDrawing: Boolean read FDefaultDrawing write SetDefaultDrawing default True;
|
||||
property DefaultTextStyle: TTextStyle read FDefaultTextStyle write FDefaultTextStyle;
|
||||
property DragDx: Integer read FDragDx write FDragDx;
|
||||
@ -1181,6 +1194,7 @@ type
|
||||
property LeftCol:Integer read GetLeftCol write SetLeftCol;
|
||||
property MouseWheelOption: TMouseWheelOption read FMouseWheelOption write FMouseWheelOption default mwCursor;
|
||||
property Options: TGridOptions read FOptions write SetOptions default DefaultGridOptions;
|
||||
property Options2: TGridOptions2 read FOptions2 write SetOptions2 default DefaultGridOptions2;
|
||||
property RangeSelectMode: TRangeSelectMode read FRangeSelectMode write SetRangeSelectMode default rsmSingle;
|
||||
property Row: Integer read FRow write SetRow;
|
||||
property RowCount: Integer read GetRowCount write SetRowCount default 5;
|
||||
@ -1245,8 +1259,6 @@ type
|
||||
procedure EndUpdate(aRefresh: boolean = true);
|
||||
procedure EraseBackground(DC: HDC); override;
|
||||
function Focused: Boolean; override;
|
||||
function GetRealDefaultColWidth: integer;
|
||||
function GetRealDefaultRowHeight: integer;
|
||||
function HasMultiSelection: Boolean;
|
||||
procedure InvalidateCell(aCol, aRow: Integer); overload;
|
||||
procedure InvalidateCol(ACol: Integer);
|
||||
@ -1407,6 +1419,7 @@ type
|
||||
property Font;
|
||||
property GridLineWidth;
|
||||
property Options;
|
||||
property Options2;
|
||||
//property ParentBiDiMode;
|
||||
//property ParentColor;
|
||||
//property ParentFont;
|
||||
@ -1509,6 +1522,7 @@ type
|
||||
property HeaderPushZones;
|
||||
property MouseWheelOption;
|
||||
property Options;
|
||||
property Options2;
|
||||
//property ParentBiDiMode;
|
||||
property ParentColor default false;
|
||||
property ParentFont;
|
||||
@ -1733,6 +1747,7 @@ type
|
||||
property HeaderPushZones;
|
||||
property MouseWheelOption;
|
||||
property Options;
|
||||
property Options2;
|
||||
property ParentBiDiMode;
|
||||
property ParentColor default false;
|
||||
property ParentFont;
|
||||
@ -2074,7 +2089,7 @@ begin
|
||||
Result:=integer(PtrUInt(FRows[aRow]))
|
||||
else
|
||||
Result:=-1;
|
||||
if Result<0 then Result:=GetRealDefaultRowHeight;
|
||||
if Result<0 then Result:=DefaultRowHeight;
|
||||
end;
|
||||
|
||||
function TCustomGrid.GetTopRow: Longint;
|
||||
@ -2270,14 +2285,14 @@ begin
|
||||
NewSize := AValue;
|
||||
if NewSize<0 then begin
|
||||
AValue:=-1;
|
||||
NewSize := GetRealDefaultColWidth;
|
||||
NewSize := DefaultColWidth;
|
||||
end;
|
||||
|
||||
OldSize := integer(PtrUInt(FCols[ACol]));
|
||||
if NewSize<>OldSize then begin
|
||||
|
||||
if OldSize<0 then
|
||||
OldSize := GetRealDefaultColWidth;
|
||||
OldSize := DefaultColWidth;
|
||||
|
||||
Bigger := NewSize>OldSize;
|
||||
SetRawColWidths(ACol, AValue);
|
||||
@ -2495,7 +2510,7 @@ begin
|
||||
Result:=-1;
|
||||
end;
|
||||
if Result<0 then
|
||||
Result:=GetRealDefaultColWidth;
|
||||
Result:=DefaultColWidth;
|
||||
end;
|
||||
|
||||
procedure TCustomGrid.SetEditor(AValue: TWinControl);
|
||||
@ -2629,6 +2644,13 @@ begin
|
||||
VisualChange;
|
||||
end;
|
||||
|
||||
procedure TCustomGrid.SetOptions2(const AValue: TGridOptions2);
|
||||
begin
|
||||
if FOptions2=AValue then exit;
|
||||
FOptions2:=AValue;
|
||||
VisualChange;
|
||||
end;
|
||||
|
||||
procedure TCustomGrid.SetScrollBars(const AValue: TScrollStyle);
|
||||
begin
|
||||
if FScrollBars=AValue then exit;
|
||||
@ -2752,14 +2774,14 @@ begin
|
||||
NewSize := AValue;
|
||||
if NewSize<0 then begin
|
||||
AValue:=-1;
|
||||
NewSize := GetRealDefaultRowHeight;
|
||||
NewSize := DefaultRowHeight;
|
||||
end;
|
||||
|
||||
OldSize := integer(PtrUInt(FRows[ARow]));
|
||||
if AValue<>OldSize then begin
|
||||
|
||||
if OldSize<0 then
|
||||
OldSize := GetRealDefaultRowHeight;
|
||||
OldSize := DefaultRowHeight;
|
||||
|
||||
bigger := NewSize > OldSize;
|
||||
|
||||
@ -2919,8 +2941,14 @@ begin
|
||||
Target.RowCount := RowCount;
|
||||
Target.FixedCols := FixedCols;
|
||||
Target.FixedRows := FixedRows;
|
||||
Target.DefaultRowHeight := DefaultRowHeight;
|
||||
Target.DefaultColWidth := DefaultColWidth;
|
||||
if DefaultRowHeightIsStored then
|
||||
Target.DefaultRowHeight := DefaultRowHeight
|
||||
else
|
||||
Target.DefaultRowHeight := -1;
|
||||
if DefaultColWidthIsStored then
|
||||
Target.DefaultColWidth := DefaultColWidth
|
||||
else
|
||||
Target.DefaultColWidth := -1;
|
||||
if not Columns.Enabled then
|
||||
Target.FCols.Assign(FCols);
|
||||
Target.FRows.Assign(FRows);
|
||||
@ -2994,6 +3022,7 @@ begin
|
||||
if AValue=fDefColwidth then
|
||||
Exit;
|
||||
FDefColWidth:=AValue;
|
||||
FRealizedDefColWidth := 0;
|
||||
|
||||
if EditorMode then
|
||||
ColRowToOffset(True, True, FCol, OldLeft, OldRight);
|
||||
@ -3015,6 +3044,7 @@ begin
|
||||
if (AValue<>fDefRowHeight) or (csLoading in ComponentState) then
|
||||
begin
|
||||
FDefRowheight:=AValue;
|
||||
FRealizedDefRowHeight := 0;
|
||||
|
||||
if EditorMode then
|
||||
ColRowToOffSet(False,True, FRow, OldTop, OldBottom);
|
||||
@ -4545,8 +4575,8 @@ begin
|
||||
end;
|
||||
SB_PAGELEFT: TrySmoothScrollBy(-(ClientWidth-FGCache.FixedWidth)*RTLSign, 0);
|
||||
SB_PAGERIGHT: TrySmoothScrollBy((ClientWidth-FGCache.FixedWidth)*RTLSign, 0);
|
||||
SB_LINELEFT: TrySmoothScrollBy(-GetRealDefaultColWidth*RTLSign, 0);
|
||||
SB_LINERIGHT: TrySmoothScrollBy(GetRealDefaultColWidth*RTLSign, 0);
|
||||
SB_LINELEFT: TrySmoothScrollBy(-DefaultColWidth*RTLSign, 0);
|
||||
SB_LINERIGHT: TrySmoothScrollBy(DefaultColWidth*RTLSign, 0);
|
||||
end;
|
||||
|
||||
if EditorMode then
|
||||
@ -4568,8 +4598,8 @@ begin
|
||||
end;
|
||||
SB_PAGEUP: TrySmoothScrollBy(0, -(ClientHeight-FGCache.FixedHeight));
|
||||
SB_PAGEDOWN: TrySmoothScrollBy(0, ClientHeight-FGCache.FixedHeight);
|
||||
SB_LINEUP: TrySmoothScrollBy(0, -GetRealDefaultRowHeight);
|
||||
SB_LINEDOWN: TrySmoothScrollBy(0, GetRealDefaultRowHeight);
|
||||
SB_LINEUP: TrySmoothScrollBy(0, -DefaultRowHeight);
|
||||
SB_LINEDOWN: TrySmoothScrollBy(0, DefaultRowHeight);
|
||||
end;
|
||||
|
||||
if EditorMode then
|
||||
@ -4866,7 +4896,7 @@ end;
|
||||
procedure TCustomGrid.GetSBVisibility(out HsbVisible,VsbVisible:boolean);
|
||||
var
|
||||
autoVert,autoHorz: boolean;
|
||||
ClientW,ClientH: Integer;
|
||||
ClientW,ClientH,ExtraW,ExtraH: Integer;
|
||||
BarW,BarH: Integer;
|
||||
begin
|
||||
AutoVert := ScrollBarAutomatic(ssVertical);
|
||||
@ -4883,22 +4913,40 @@ begin
|
||||
GetSystemMetrics(SM_SWSCROLLBARSPACING);
|
||||
if ScrollBarIsVisible(SB_HORZ) then
|
||||
ClientH := ClientH + BarH;
|
||||
ExtraW := 0;
|
||||
if goScrollToLastCol in FOptions2 then
|
||||
begin
|
||||
Inc(ExtraW, ClientWidth - FGCache.FixedWidth);
|
||||
if ColCount>FixedCols then
|
||||
Dec(ExtraW, ColWidths[ColCount-1]);
|
||||
end;
|
||||
ExtraH := 0;
|
||||
if goScrollToLastRow in FOptions2 then
|
||||
begin
|
||||
Inc(ExtraH, ClientHeight - FGCache.FixedHeight);
|
||||
if RowCount>FixedRows then
|
||||
Dec(ExtraH, RowHeights[RowCount-1]);
|
||||
end;
|
||||
|
||||
// first find out if scrollbars need to be visible by
|
||||
// comparing against client bounds free of bars
|
||||
HsbVisible := (FScrollBars in [ssHorizontal, ssBoth]) or
|
||||
(AutoHorz and (FGCache.GridWidth>ClientW));
|
||||
(AutoHorz and (FGCache.GridWidth+ExtraW>ClientW));
|
||||
|
||||
VsbVisible := (FScrollBars in [ssVertical, ssBoth]) or
|
||||
(AutoVert and (FGCache.GridHeight>ClientH));
|
||||
(AutoVert and (FGCache.GridHeight+ExtraH>ClientH));
|
||||
|
||||
// then for automatic scrollbars check if grid bounds are
|
||||
// in some part of area occupied by scrollbars
|
||||
if ExtraW>0 then
|
||||
Dec(ExtraW, BarW);
|
||||
if not HsbVisible and AutoHorz and VsbVisible then
|
||||
HsbVisible := FGCache.GridWidth > (ClientW-BarW);
|
||||
HsbVisible := FGCache.GridWidth+ExtraW > (ClientW-BarW);
|
||||
|
||||
if ExtraH>0 then
|
||||
Dec(ExtraH, BarH);
|
||||
if not VsbVisible and AutoVert and HsbVisible then
|
||||
VsbVisible := FGCache.GridHeight > (ClientH-BarH);
|
||||
VsbVisible := FGCache.GridHeight+ExtraH > (ClientH-BarH);
|
||||
|
||||
if AutoHorz then
|
||||
HsbVisible := HsbVisible and not AutoFillColumns;
|
||||
@ -4924,26 +4972,44 @@ procedure TCustomGrid.GetSBRanges(const HsbVisible, VsbVisible: boolean; out
|
||||
begin
|
||||
HsbRange := 0;
|
||||
HsbPos := 0;
|
||||
if HsbVisible then begin
|
||||
if not GetSmoothScroll(SB_Horz) then begin
|
||||
if HsbVisible then
|
||||
begin
|
||||
if not GetSmoothScroll(SB_Horz) then
|
||||
begin
|
||||
if (FGCache.MaxTopLeft.x>=0) and (FGCache.MaxTopLeft.x<=ColCount-1) then
|
||||
HsbRange := integer(PtrUInt(FGCache.AccumWidth[FGCache.MaxTopLeft.x]))+ClientWidth-FGCache.FixedWidth
|
||||
end
|
||||
else
|
||||
end else
|
||||
begin
|
||||
HsbRange:=GridWidth - GetBorderWidth;
|
||||
if goScrollToLastCol in FOptions2 then
|
||||
begin
|
||||
Inc(HsbRange, ClientWidth - FGCache.FixedWidth);
|
||||
if ColCount>FixedCols then
|
||||
Dec(HsbRange, ColWidths[ColCount-1]);
|
||||
end;
|
||||
end;
|
||||
if (FTopLeft.x>=0) and (FTopLeft.x<=ColCount-1) then
|
||||
HsbPos := integer(PtrUInt(FGCache.AccumWidth[FTopLeft.x]))+FGCache.TLColOff-FGCache.FixedWidth;
|
||||
end;
|
||||
|
||||
VsbRange := 0;
|
||||
VsbPos := 0;
|
||||
if VsbVisible then begin
|
||||
if not GetSmoothScroll(SB_Vert) then begin
|
||||
if VsbVisible then
|
||||
begin
|
||||
if not GetSmoothScroll(SB_Vert) then
|
||||
begin
|
||||
if (FGCache.MaxTopLeft.y>=0) and (FGCache.MaxTopLeft.y<=RowCount-1) then
|
||||
VsbRange := integer(PtrUInt(FGCache.AccumHeight[FGCache.MaxTopLeft.y]))+ClientHeight-FGCache.FixedHeight
|
||||
end
|
||||
else
|
||||
end else
|
||||
begin
|
||||
VSbRange:= GridHeight - GetBorderWidth;
|
||||
if goScrollToLastRow in FOptions2 then
|
||||
begin
|
||||
Inc(VsbRange, ClientHeight - FGCache.FixedHeight);
|
||||
if RowCount>FixedRows then
|
||||
Dec(VsbRange, RowHeights[RowCount-1]);
|
||||
end;
|
||||
end;
|
||||
if (FTopLeft.y>=0) and (FTopLeft.y<=RowCount-1) then
|
||||
VsbPos := integer(PtrUInt(FGCache.AccumHeight[FTopLeft.y]))+FGCache.TLRowOff-FGCache.FixedHeight;
|
||||
end;
|
||||
@ -5164,22 +5230,22 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomGrid.GetRealDefaultColWidth: integer;
|
||||
function TCustomGrid.GetDefColWidth: integer;
|
||||
begin
|
||||
if FDefColWidth = 0 then
|
||||
if FDefColWidth<0 then
|
||||
begin
|
||||
if FRealizedDefColWidth = 0 then
|
||||
if FRealizedDefColWidth <= 0 then
|
||||
FRealizedDefColWidth := MulDiv(DEFCOLWIDTH, Font.PixelsPerInch, 96);
|
||||
Result := FRealizedDefColWidth;
|
||||
end else
|
||||
Result := FDefColWidth;
|
||||
end;
|
||||
|
||||
function TCustomGrid.GetRealDefaultRowHeight: integer;
|
||||
function TCustomGrid.GetDefRowHeight: integer;
|
||||
begin
|
||||
if FDefRowHeight = 0 then
|
||||
if FDefRowHeight<0 then
|
||||
begin
|
||||
if FRealizedDefRowHeight = 0 then
|
||||
if FRealizedDefRowHeight <= 0 then
|
||||
FRealizedDefRowHeight := GetDefaultRowHeight;
|
||||
Result := FRealizedDefRowHeight;
|
||||
end else
|
||||
@ -6624,6 +6690,16 @@ begin
|
||||
{$IfDef dbgGrid}DebugLn('DoubleClick END');{$Endif}
|
||||
end;
|
||||
|
||||
function TCustomGrid.DefaultColWidthIsStored: Boolean;
|
||||
begin
|
||||
Result := FDefColWidth>=0;
|
||||
end;
|
||||
|
||||
function TCustomGrid.DefaultRowHeightIsStored: Boolean;
|
||||
begin
|
||||
Result := FDefRowHeight>=0;
|
||||
end;
|
||||
|
||||
procedure TCustomGrid.DefineProperties(Filer: TFiler);
|
||||
|
||||
function SonRowsIguales(aGrid: TCustomGrid): boolean;
|
||||
@ -6831,15 +6907,19 @@ begin
|
||||
end;
|
||||
|
||||
for i := FRows.Count - 1 downto 0 do
|
||||
FRows[i] := Pointer(Round(PtrInt(FRows[i]) * AYProportion));
|
||||
FRows[i] := {%H-}Pointer(Round({%H-}PtrInt(FRows[i]) * AYProportion));
|
||||
|
||||
for i := FCols.Count - 1 downto 0 do
|
||||
FCols[i] := Pointer(Round(PtrInt(FCols[i]) * AXProportion));
|
||||
FCols[i] := {%H-}Pointer(Round({%H-}PtrInt(FCols[i]) * AXProportion));
|
||||
|
||||
FDefColWidth := Round(FDefColWidth * AXProportion);
|
||||
FDefRowHeight := Round(FDefRowHeight * AYProportion);
|
||||
FRealizedDefRowHeight := 0;
|
||||
FRealizedDefColWidth := 0;
|
||||
if DefaultColWidthIsStored then
|
||||
DefaultColWidth := Round(DefaultColWidth * AXProportion)
|
||||
else
|
||||
FRealizedDefColWidth := 0;
|
||||
if DefaultRowHeightIsStored then
|
||||
DefaultRowHeight := Round(DefaultRowHeight * AYProportion)
|
||||
else
|
||||
FRealizedDefRowHeight := 0;
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
@ -7648,33 +7728,41 @@ begin
|
||||
FGCache.MaxTLOffset.x:=0;
|
||||
FGCache.MaxTLOffset.y:=0;
|
||||
W:=0;
|
||||
for i:=ColCount-1 downto FFixedCols do begin
|
||||
W:=W+GetColWidths(i);
|
||||
if W<=FGCache.ScrollWidth then
|
||||
FGCache.MaxTopLeft.x:=i
|
||||
else
|
||||
if not(goScrollToLastCol in FOptions2) then
|
||||
begin
|
||||
for i:=ColCount-1 downto FFixedCols do
|
||||
begin
|
||||
if GetSmoothScroll(SB_Horz) then
|
||||
W:=W+GetColWidths(i);
|
||||
if W<=FGCache.ScrollWidth then
|
||||
FGCache.MaxTopLeft.x:=i
|
||||
else
|
||||
begin
|
||||
FGCache.MaxTopLeft.x:=i;
|
||||
FGCache.MaxTLOffset.x:=W-FGCache.ScrollWidth;
|
||||
if GetSmoothScroll(SB_Horz) then
|
||||
begin
|
||||
FGCache.MaxTopLeft.x:=i;
|
||||
FGCache.MaxTLOffset.x:=W-FGCache.ScrollWidth;
|
||||
end;
|
||||
Break;
|
||||
end;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
H:=0;
|
||||
for i:=RowCount-1 downto FFixedRows do begin
|
||||
H:=H+GetRowHeights(i);
|
||||
if H<=FGCache.ScrollHeight then
|
||||
FGCache.MaxTopLeft.y:=i
|
||||
else
|
||||
if not(goScrollToLastRow in FOptions2) then
|
||||
begin
|
||||
for i:=RowCount-1 downto FFixedRows do
|
||||
begin
|
||||
if GetSmoothScroll(SB_Vert) then
|
||||
H:=H+GetRowHeights(i);
|
||||
if H<=FGCache.ScrollHeight then
|
||||
FGCache.MaxTopLeft.y:=i
|
||||
else
|
||||
begin
|
||||
FGCache.MaxTopLeft.y:=i;
|
||||
FGCache.MaxTLOffset.y:=H-FGCache.ScrollHeight
|
||||
if GetSmoothScroll(SB_Vert) then
|
||||
begin
|
||||
FGCache.MaxTopLeft.y:=i;
|
||||
FGCache.MaxTLOffset.y:=H-FGCache.ScrollHeight
|
||||
end;
|
||||
Break;
|
||||
end;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
FGCache.MaxTopLeft.x:=Max(FGCache.MaxTopLeft.x, FixedCols);
|
||||
@ -8922,7 +9010,9 @@ begin
|
||||
Cfg.SetValue('grid/design/fixedcols', FixedCols);
|
||||
Cfg.SetValue('grid/design/fixedrows', Fixedrows);
|
||||
Cfg.SetValue('grid/design/defaultcolwidth', DefaultColWidth);
|
||||
Cfg.SetValue('grid/design/isdefaultcolwidth', ord(DefaultColWidthIsStored));
|
||||
Cfg.SetValue('grid/design/defaultrowheight',DefaultRowHeight);
|
||||
Cfg.SetValue('grid/design/isdefaultrowheight', ord(DefaultRowHeightIsStored));
|
||||
Cfg.Setvalue('grid/design/color',ColorToString(Color));
|
||||
|
||||
if Columns.Enabled then
|
||||
@ -8998,6 +9088,8 @@ begin
|
||||
Cfg.SetValue(Path+'goSmoothScroll/value', goSmoothScroll in Options);
|
||||
Cfg.SetValue(Path+'goAutoAddRowsSkipContentCheck/value', goAutoAddRowsSkipContentCheck in Options);
|
||||
Cfg.SetValue(Path+'goRowHighlight/value', goRowHighlight in Options);
|
||||
Cfg.SetValue(Path+'goScrollToLastCol/value', goScrollToLastCol in Options2);
|
||||
Cfg.SetValue(Path+'goScrollToLastRow/value', goScrollToLastRow in Options2);
|
||||
end;
|
||||
|
||||
procedure TCustomGrid.LoadColumns(cfg: TXMLConfig; Version: integer);
|
||||
@ -9084,8 +9176,19 @@ begin
|
||||
RowCount:=Cfg.GetValue('grid/design/rowcount', 5);
|
||||
FixedCols:=Cfg.GetValue('grid/design/fixedcols', 1);
|
||||
FixedRows:=Cfg.GetValue('grid/design/fixedrows', 1);
|
||||
DefaultRowheight:=Cfg.GetValue('grid/design/defaultrowheight', -1);
|
||||
DefaultColWidth:=Cfg.getValue('grid/design/defaultcolwidth', -1);
|
||||
|
||||
k := Cfg.GetValue('grid/design/isdefaultrowheight', -1);
|
||||
if k<>0 then
|
||||
DefaultRowheight:=Cfg.GetValue('grid/design/defaultrowheight', -1)
|
||||
else
|
||||
DefaultRowheight:=-1;
|
||||
|
||||
k := Cfg.GetValue('grid/design/isdefaultcolwidth', -1);
|
||||
if k<>0 then
|
||||
DefaultColWidth:=Cfg.getValue('grid/design/defaultcolwidth', -1)
|
||||
else
|
||||
DefaultColWidth:=-1;
|
||||
|
||||
try
|
||||
Color := StringToColor(cfg.GetValue('grid/design/color', 'clWindow'));
|
||||
except
|
||||
@ -9142,14 +9245,20 @@ end;
|
||||
procedure TCustomGrid.LoadGridOptions(cfg: TXMLConfig; Version: Integer);
|
||||
var
|
||||
Opt: TGridOptions;
|
||||
Opt2: TGridOptions2;
|
||||
Path: string;
|
||||
|
||||
procedure GetValue(optStr:string; aOpt:TGridOption);
|
||||
begin
|
||||
if Cfg.GetValue(Path+OptStr+'/value', False) then Opt:=Opt+[aOpt];
|
||||
end;
|
||||
procedure GetValue2(optStr:string; aOpt:TGridOption2);
|
||||
begin
|
||||
if Cfg.GetValue(Path+OptStr+'/value', False) then Opt2:=Opt2+[aOpt];
|
||||
end;
|
||||
begin
|
||||
Opt:=[];
|
||||
Opt2:=[];
|
||||
Path:='grid/design/options/';
|
||||
GetValue('goFixedVertLine', goFixedVertLine);
|
||||
GetValue('goFixedHorzLine', goFixedHorzLine);
|
||||
@ -9175,8 +9284,11 @@ begin
|
||||
if Version>=2 then begin
|
||||
GetValue('goSmoothScroll',goSmoothScroll);
|
||||
end;
|
||||
GetValue2('goScrollToLastRow',goScrollToLastRow);
|
||||
GetValue2('goScrollToLastCol',goScrollToLastCol);
|
||||
|
||||
Options:=Opt;
|
||||
Options2:=Opt2;
|
||||
end;
|
||||
|
||||
procedure TCustomGrid.Loaded;
|
||||
@ -9221,8 +9333,8 @@ begin
|
||||
goSmoothScroll ];
|
||||
FScrollbars:=ssAutoBoth;
|
||||
fGridState:=gsNormal;
|
||||
FDefColWidth:=0;
|
||||
FDefRowHeight:=0;
|
||||
FDefColWidth:=-1;
|
||||
FDefRowHeight:=-1;
|
||||
FGridLineColor:=clSilver;
|
||||
FFixedGridLineColor := cl3DDKShadow;
|
||||
FGridLineStyle:=psSolid;
|
||||
@ -10240,11 +10352,11 @@ begin
|
||||
ScrollCols := (ssCtrl in shift);
|
||||
if ScrollCols then
|
||||
begin
|
||||
if not TrySmoothScrollBy(Delta*GetRealDefaultColWidth, 0) then
|
||||
if not TrySmoothScrollBy(Delta*DefaultColWidth, 0) then
|
||||
TryScrollTo(FTopLeft.x+Delta, FTopLeft.y, True, False);
|
||||
end else
|
||||
begin
|
||||
if not TrySmoothScrollBy(0, Delta*GetRealDefaultRowHeight*Mouse.WheelScrollLines) then
|
||||
if not TrySmoothScrollBy(0, Delta*DefaultRowHeight*Mouse.WheelScrollLines) then
|
||||
TryScrollTo(FTopLeft.x, FTopLeft.y+Delta, False, True); // scroll only 1 line if above scrolling failed (probably due to too high line)
|
||||
end;
|
||||
if EditorMode then
|
||||
@ -10739,7 +10851,7 @@ begin
|
||||
|
||||
W := W + imgWidth;
|
||||
if W=0 then
|
||||
W := GetRealDefaultColWidth
|
||||
W := DefaultColWidth
|
||||
else
|
||||
W := W + DEFAUTOADJPADDING;
|
||||
|
||||
@ -11692,7 +11804,7 @@ begin
|
||||
begin
|
||||
tmpGrid := Grid;
|
||||
if tmpGrid<>nil then
|
||||
result := tmpGrid.GetRealDefaultColWidth;
|
||||
result := tmpGrid.DefaultColWidth;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -11962,7 +12074,7 @@ var
|
||||
begin
|
||||
tmpGrid := Grid;
|
||||
if tmpGrid<>nil then
|
||||
result := tmpGrid.GetRealDefaultColWidth
|
||||
result := tmpGrid.DefaultColWidth
|
||||
else
|
||||
result := -1;
|
||||
end;
|
||||
|
@ -355,7 +355,7 @@ begin
|
||||
NeededWidth := R.Right - R.Left;
|
||||
NeededHeight := R.Bottom - R.Top;
|
||||
//debugln('TCustomLabel.CalcFittingFontHeight B NeededWidth=',dbgs(NeededWidth),' NeededHeight=',dbgs(NeededHeight),' MaxWidth=',dbgs(MaxWidth),' MaxHeight=',dbgs(MaxHeight));
|
||||
if (NeededWidth in [1..MaxWidth]) and (NeededHeight in [1..MaxHeight]) then
|
||||
if (NeededWidth > 0) and (NeededWidth <= MaxWidth) and (NeededHeight > 0) and (NeededHeight <= MaxHeight) then
|
||||
begin
|
||||
// TheText fits into the bounds
|
||||
if (not Result) or (FontHeight < TestFont.Height) then
|
||||
|
@ -4515,7 +4515,7 @@ begin
|
||||
if ExpandSignType = tvestTheme then
|
||||
Result := MulDiv(FThemeExpandSignSize, Font.PixelsPerInch, Screen.PixelsPerInch)
|
||||
else
|
||||
Result := DefaultTreeNodeExpandSignSize;
|
||||
Result := MulDiv(DefaultTreeNodeExpandSignSize, Font.PixelsPerInch, 96);
|
||||
end;
|
||||
|
||||
function TCustomTreeView.GetRealIndent: Integer;
|
||||
@ -4951,13 +4951,13 @@ var
|
||||
// draw a plus or a minus sign
|
||||
R := Rect(ALeft, ATop, ARight, ABottom);
|
||||
Rectangle(R);
|
||||
MoveTo(R.Left + 2, MidY);
|
||||
LineTo(R.Right - 2, MidY);
|
||||
MoveTo(R.Left + MulDiv(2, Font.PixelsPerInch, 96), MidY);
|
||||
LineTo(R.Right - MulDiv(2, Font.PixelsPerInch, 96), MidY);
|
||||
if not CollapseSign then
|
||||
begin
|
||||
MoveTo(MidX, R.Top + 2);
|
||||
LineTo(MidX, R.Bottom - 2);
|
||||
end;
|
||||
MoveTo(MidX, R.Top + MulDiv(2, Font.PixelsPerInch, 96));
|
||||
LineTo(MidX, R.Bottom - MulDiv(2, Font.PixelsPerInch, 96));
|
||||
end;
|
||||
end;
|
||||
tvestArrow,
|
||||
tvestArrowFill:
|
||||
|
@ -79,7 +79,7 @@ begin
|
||||
Cells[0, 0] := lisConfirmPackageNewPackageSet;
|
||||
Cells[1, 0] := lisConfirmPackageAction;
|
||||
Cells[2, 0] := lisConfirmPackageOldPackageSet;
|
||||
d := RowCount * (GetRealDefaultRowHeight + GridLineWidth) - Height;
|
||||
d := RowCount * (DefaultRowHeight + GridLineWidth) - Height;
|
||||
end;
|
||||
// Auto-grow dialog up to 3/4 of the screen height.
|
||||
d := Min(d, Screen.Height * 3 div 4 - Height);
|
||||
|
Loading…
Reference in New Issue
Block a user