diff options
-rw-r--r-- | src/gui/fpg_basegrid.pas | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/src/gui/fpg_basegrid.pas b/src/gui/fpg_basegrid.pas index aee679d0..953451da 100644 --- a/src/gui/fpg_basegrid.pas +++ b/src/gui/fpg_basegrid.pas @@ -534,7 +534,7 @@ begin hh := 0; if ShowHeader then hh := hh + FHeaderHeight+1; - Result := (Height - (2*FMargin) - hh) div FDefaultRowHeight; + Result := (GetClientRect.Height - hh) div FDefaultRowHeight; end; function TfpgBaseGrid.VisibleWidth: integer; @@ -542,10 +542,10 @@ var sw: integer; begin if FVScrollBar.Visible then - sw := FVScrollBar.Width-1 + sw := FVScrollBar.Width else sw := 0; - Result := Width - (FMargin*2) - sw; + Result := GetClientRect.Width - sw end; function TfpgBaseGrid.VisibleHeight: integer; @@ -553,10 +553,10 @@ var sw: integer; begin if FHScrollBar.Visible then - sw := FHScrollBar.Height-1 + sw := FHScrollBar.Height else sw := 0; - Result := Height - (FMargin*2) - sw; + Result := GetClientRect.Height - sw; end; procedure TfpgBaseGrid.SetFirstRow(const AValue: Integer); @@ -594,8 +594,10 @@ var vl: integer; i: integer; x: integer; - Hfits, showH : boolean; - Vfits, showV : boolean; + Hfits, showH: boolean; + Vfits, showV: boolean; + crect: TfpgRect; + borders: TRect; procedure hideScrollbar (sb : TfpgScrollBar); begin @@ -621,8 +623,10 @@ var hh : integer; // header height begin hh := 0; - if ShowHeader then inc (hh, FHeaderHeight+1); - if showH then inc (hh, FHScrollBar.Height); + if ShowHeader then + inc (hh, FHeaderHeight+1); + if showH then + inc (hh, FHScrollBar.Height); vl := (VHeight - hh) div FDefaultRowHeight; Vfits := vl >= RowCount; end; @@ -637,8 +641,10 @@ begin end; // preliminary width/height calculations - VHeight := Height - 4; - HWidth := Width - 4; + borders := fpgStyle.GetControlFrameBorders; + crect := GetClientRect; + VHeight := crect.Height; + HWidth := crect.Width; cw := 0; for i := 0 to ColumnCount-1 do cw := cw + ColumnWidth[i]; @@ -703,17 +709,17 @@ begin if showV then begin FVScrollBar.Visible := true; - FVScrollBar.Min := 0; + FVScrollBar.Min := 0; if RowCount > 0 then FVScrollBar.SliderSize := VisibleLines / RowCount else FVScrollBar.SliderSize := 0; - FVScrollBar.Max := RowCount-VisibleLines; - FVScrollBar.Position := FFirstRow; + FVScrollBar.Max := RowCount-VisibleLines; + FVScrollBar.Position := FFirstRow; FVScrollBar.RepaintSlider; - FVScrollBar.Top := 2; - FVScrollBar.Left := Width - FVScrollBar.Width - 2; - FVScrollBar.Height := VHeight; + FVScrollBar.Top := borders.Top; + FVScrollBar.Left := Width - FVScrollBar.Width - borders.Right; + FVScrollBar.Height := VHeight; end else begin @@ -738,17 +744,17 @@ begin begin FHScrollBar.Max := ColumnCount-1; FHScrollBar.Position := FFirstCol; - FHScrollBar.SliderSize := 1 / ColumnCount; + FHScrollBar.SliderSize := 1 / ColumnCount; FHScrollBar.PageSize := 1; end; FHScrollBar.RepaintSlider; - FHScrollBar.Top := Height -FHScrollBar.Height - 2; - FHScrollBar.Left := 2; + FHScrollBar.Top := Height - FHScrollBar.Height - borders.Bottom; + FHScrollBar.Left := borders.Left; FHScrollBar.Width := HWidth; end else begin - FHScrollBar.Visible := false; + FHScrollBar.Visible := False; if Hfits then begin FFirstCol := 0; @@ -781,7 +787,6 @@ var rect: TRect; begin Canvas.ClearClipRect; - r.SetRect(0, 0, Width, Height); case BorderStyle of ebsNone: @@ -791,26 +796,22 @@ begin ebsDefault: begin fpgStyle.DrawControlFrame(Canvas, r); - rect := fpgStyle.GetControlFrameBorders; - InflateRect(r, -rect.Left, -rect.Top); { assuming borders are even on opposite sides } end; ebsSingle: begin Canvas.SetColor(clShadow2); Canvas.DrawRectangle(r); - InflateRect(r, -1, -1); end; end; - Canvas.SetClipRect(r); + r := GetClientRect; + clipr := r; + Canvas.SetClipRect(clipr); Canvas.SetColor(FBackgroundColor); Canvas.FillRectangle(r); - clipr.SetRect(FMargin, FMargin, VisibleWidth, VisibleHeight); - r := clipr; - - cLeft := FMargin; // column starting point - rTop := FMargin; // row starting point + cLeft := r.Left; // column starting point + rTop := r.Top; // row starting point if go_SmoothScroll in FOptions then begin @@ -1434,7 +1435,7 @@ begin else hh := 0; - if ShowHeader and (y > FMargin+hh) then // not in Header row + if ShowHeader and (y > (fpgStyle.GetControlFrameBorders.Top + hh)) then // not in Header row begin PopupMenu.ShowAt(self, x, y); end; @@ -1509,7 +1510,6 @@ begin FPrevRow := -1; FFirstRow := 0; FFirstCol := 0; - FMargin := 2; FShowHeader := True; FShowGrid := True; FRowSelect := False; @@ -1518,6 +1518,7 @@ begin FOptions := []; FHeaderStyle := ghsButton; FBorderStyle := ebsDefault; + FMargin := GetClientRect.Left; FFont := fpgGetFont('#Grid'); FHeaderFont := fpgGetFont('#GridHeader'); @@ -1601,11 +1602,11 @@ begin else hh := 0; - ARow := FFirstRow + ((y - FMargin - hh) div FDefaultRowHeight); + ARow := FFirstRow + ((y - fpgStyle.GetControlFrameBorders.Top - hh) div FDefaultRowHeight); if ARow > RowCount-1 then ARow := RowCount-1; - cLeft := FMargin; // column starting point + cLeft := fpgStyle.GetControlFrameBorders.Left; // column starting point if go_SmoothScroll in FOptions then begin if FHScrollBar.Visible then |