From: Peter T. <pe...@us...> - 2003-02-03 13:17:57
|
Update of /cvsroot/jvcl/dev/p3/source In directory sc8-pr-cvs1:/tmp/cvs-serv30125/p3/source Modified Files: JvPrvwDoc.pas Log Message: Index: JvPrvwDoc.pas =================================================================== RCS file: /cvsroot/jvcl/dev/p3/source/JvPrvwDoc.pas,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** JvPrvwDoc.pas 2 Feb 2003 20:23:33 -0000 1.10 --- JvPrvwDoc.pas 3 Feb 2003 13:17:53 -0000 1.11 *************** *** 202,206 **** procedure SetOptions(const Value: TJvPreviewPageOptions); procedure SetSelectedPage(const Value: integer); ! procedure SetTopPage(const Value: integer); procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; procedure WMPreviewAddPage(var Message: TMessage); message WM_PREVIEWADDPAGE; --- 202,206 ---- procedure SetOptions(const Value: TJvPreviewPageOptions); procedure SetSelectedPage(const Value: integer); ! procedure SetTopPage(Value: integer); procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; procedure WMPreviewAddPage(var Message: TMessage); message WM_PREVIEWADDPAGE; *************** *** 250,253 **** --- 250,257 ---- procedure Clear; procedure PrintRange(const APrinter: IJvPrinter; StartPage, EndPage, Copies: integer; Collate: boolean); + procedure First; + procedure Last; + procedure Next; + procedure Prior; property TotalCols: integer read FTotalCols; property TotalRows: integer read FTotalRows; *************** *** 725,729 **** var si: TScrollInfo; ! tmp: integer; begin // tmp := TopPage; --- 729,734 ---- var si: TScrollInfo; ! // tmp: integer; ! factor: double; begin // tmp := TopPage; *************** *** 738,742 **** if FPageWidth >= ClientWidth then begin ! si.nMax := FMaxWidth; si.nPage := si.nMax div 10; // TODO! end --- 743,747 ---- if FPageWidth >= ClientWidth then begin ! si.nMax := FMaxWidth - ClientWidth; si.nPage := si.nMax div 10; // TODO! end *************** *** 754,757 **** --- 759,767 ---- si.fMask := SIF_ALL or SIF_DISABLENOSCROLL; GetScrollInfo(Handle, SB_VERT, si); + // store current relative position + if si.nMax <> 0 then + factor := FScrollPos.Y / si.nMax + else + factor := 0.0; if (FPageHeight >= ClientHeight) then *************** *** 760,771 **** si.nPage := FPageHeight + Options.VertSpacing; si.nPage := Max(si.nPage, 1); ! if (PageCount = 0) or (FMaxHeight < ClientHeight) then si.nMax := 0 else ! si.nMax := FMaxHeight; ! si.nPos := FScrollPos.Y; ! // TODO: if scale or cols changes, ScrollPos should be adjusted to match new settings if si.nPos > si.nMax then si.nPos := si.nMax; ShowScrollbar(Handle, SB_VERT, true {(FPageHeight > ClientHeight) or (FMaxHeight > ClientHeight)}); SetScrollInfo(Handle, SB_VERT, si, True); --- 770,785 ---- si.nPage := FPageHeight + Options.VertSpacing; si.nPage := Max(si.nPage, 1); ! if (PageCount = 0) or (FMaxHeight <= ClientHeight) then si.nMax := 0 else ! si.nMax := FMaxHeight - Options.VertSpacing; ! ! // DONE: if scale or cols changes, ScrollPos should be adjusted to match new settings ! si.nPos := round(factor * si.nMax); if si.nPos > si.nMax then si.nPos := si.nMax; + if si.nPos <> FScrollPos.Y then + ScrollBy(0, -FScrollPos.Y + si.nPos); + FScrollPos.Y := si.nPos; ShowScrollbar(Handle, SB_VERT, true {(FPageHeight > ClientHeight) or (FMaxHeight > ClientHeight)}); SetScrollInfo(Handle, SB_VERT, si, True); *************** *** 799,805 **** FOptions := TJvPreviewPageOptions.Create; - // FOptions.Width := 210; - // FOptions.Height := 297; - // FOptions.PrintMargins := Rect(10,10,10,10); FOptions.OnChange := DoOptionsChange; FOptions.OnScaleModeChange := DoScaleModeChange; --- 813,816 ---- *************** *** 809,814 **** Color := clAppWorkSpace; ! ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents, ! csSetCaption, csDoubleClicks]; Width := 150; Height := 250; --- 820,824 ---- Color := clAppWorkSpace; ! ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents, csSetCaption, csDoubleClicks]; Width := 150; Height := 250; *************** *** 848,852 **** function TJvCustomPreviewDoc.DoAddPage(AMetaFile: TMetaFile; PageIndex: integer): boolean; ! var ACanvas: TMetaFileCanvas; APageRect, APrintRect: TRect; i: integer; begin Result := false; --- 858,864 ---- function TJvCustomPreviewDoc.DoAddPage(AMetaFile: TMetaFile; PageIndex: integer): boolean; ! var ACanvas: TMetaFileCanvas; ! APageRect, APrintRect: TRect; ! i: integer; begin Result := false; *************** *** 855,861 **** --- 867,875 ---- SetWindowExtEx(ACanvas.Handle, DeviceInfo.PhysicalWidth, DeviceInfo.PhysicalHeight, nil); SetViewportExtEx(ACanvas.Handle, DeviceInfo.PhysicalWidth, DeviceInfo.PhysicalHeight, nil); + // NB! Font.Size is changed when PPI is changed, so store and reset i := ACanvas.Font.Size; ACanvas.Font.PixelsPerInch := DeviceInfo.LogPixelsY; ACanvas.Font.Size := i; + if Assigned(FOnAddPage) then with DeviceInfo do *************** *** 869,873 **** FOnAddPage(self, PageIndex, ACanvas, APageRect, APrintRect, Result); end; ! ACanvas.Free; // spool canvas to metafile end; --- 883,888 ---- FOnAddPage(self, PageIndex, ACanvas, APageRect, APrintRect, Result); end; ! // spool canvas to metafile ! ACanvas.Free; end; *************** *** 963,966 **** --- 978,987 ---- APageRect, APrintRect: TRect; si: TScrollInfo; + // use our own InRange since D5 doesn't have it + function InRange(const AValue, AMin, AMax: Integer): Boolean; + begin + Result := (AValue >= AMin) and (AValue <= AMax); + end; + function RectInRect(Inner, Outer: TRect): boolean; begin *************** *** 975,978 **** --- 996,1000 ---- APageRect := FPreviewRect; APrintRect := FPrintRect; + // initial top/left offset AOffsetX := -Offset.X + Max((ClientWidth - ((FPageWidth + Options.HorzSpacing) * FTotalCols)) div 2, FOptions.HorzSpacing); AOffsetY := -Offset.Y + Max((ClientHeight - ((FPageHeight + Options.VertSpacing) * FVisibleRows)) div 2, FOptions.VertSpacing); *************** *** 990,994 **** for j := 0 to FTotalCols - 1 do begin ! if (FPageHeight >= ClientHeight) or (FPageWidth >= ClientWidth) or RectInRect(APageRect, ClientRect) and ((APageIndex < PageCount) or (PageCount = 0)) then begin --- 1012,1017 ---- for j := 0 to FTotalCols - 1 do begin ! // avoid drawing partial pages when previewrect < clientrect ! if (FPageHeight >= ClientHeight - Options.VertSpacing) or (FPageWidth >= ClientWidth - Options.HorzSpacing) or RectInRect(APageRect, ClientRect) and ((APageIndex < PageCount) or (PageCount = 0)) then begin *************** *** 1026,1029 **** --- 1049,1054 ---- end; Brush.Style := bsSolid; + if PageCount = 0 then + Exit; // we've drawn one empty page, so let's skip the rest end; OffsetRect(APrintRect, FPageWidth + Options.HorzSpacing, 0); *************** *** 1446,1466 **** end; ! procedure TJvCustomPreviewDoc.SetTopPage(const Value: integer); ! var ARow, APage: integer; si: TScrollInfo; begin ! if (Value >= 0) and (Value < PageCount) then ! begin ! ARow := Min((Value div FTotalCols), FTotalRows - 1); ! FillChar(si, sizeof(si), 0); ! si.cbSize := sizeof(si); ! si.fMask := SIF_ALL; ! GetScrollInfo(Handle, SB_VERT, si); ! ScrollBy(0, -FScrollPos.Y); ! FScrollPos.Y := (FPageHeight + Options.VertSpacing) * ARow; ! ScrollBy(0, FScrollPos.Y); ! si.nPos := FScrollPos.Y; ! SetScrollInfo(Handle, SB_VERT, si, true); ! Invalidate; ! end; end; --- 1471,1490 ---- end; ! procedure TJvCustomPreviewDoc.SetTopPage(Value: integer); ! var ARow, tmp: integer; ! si: TScrollInfo; begin ! ARow := Min(Value div TotalCols, TotalRows); ! FillChar(si, sizeof(si), 0); ! si.cbSize := sizeof(si); ! si.fMask := SIF_ALL; ! GetScrollInfo(Handle, SB_VERT, si); ! ScrollBy(0, -FScrollPos.Y); ! tmp := (FPageHeight + Options.VertSpacing) * ARow; ! ScrollBy(0, -FScrollPos.Y + tmp); ! FScrollPos.Y := tmp; ! si.nPos := tmp; ! SetScrollInfo(Handle, SB_VERT, si, true); ! Invalidate; end; *************** *** 1483,1487 **** DeviceInfo.LogPixelsX), Options.Scale, 100); FOffsetBottom := MulDiv(MulDiv(DeviceInfo.OffsetBottom, GetDeviceCaps(DC, LOGPIXELSY), ! DeviceInfo.LogPixelsY), Options.Scale, 100); ; FPreviewRect := Rect(0, 0, FPageWidth, FPageHeight); FPrintRect := FPreviewRect; --- 1507,1512 ---- DeviceInfo.LogPixelsX), Options.Scale, 100); FOffsetBottom := MulDiv(MulDiv(DeviceInfo.OffsetBottom, GetDeviceCaps(DC, LOGPIXELSY), ! DeviceInfo.LogPixelsY), Options.Scale, 100); ! ; FPreviewRect := Rect(0, 0, FPageWidth, FPageHeight); FPrintRect := FPreviewRect; *************** *** 1514,1519 **** FTotalRows := Max((PageCount div FTotalCols) + Ord(PageCount mod FTotalCols <> 0), 1); ! FMaxHeight := TotalRows * (FPageHeight + Options.VertSpacing) + Options.VertSpacing - ! (VisibleRows - 1) * (FPageHeight + Options.VertSpacing); FMaxWidth := TotalCols * (FPageWidth + Options.HorzSpacing) + Options.HorzSpacing; finally --- 1539,1544 ---- FTotalRows := Max((PageCount div FTotalCols) + Ord(PageCount mod FTotalCols <> 0), 1); ! FMaxHeight := TotalRows * (FPageHeight + Options.VertSpacing) + Options.VertSpacing; ! // - (VisibleRows - 1) * (FPageHeight + Options.VertSpacing); FMaxWidth := TotalCols * (FPageWidth + Options.HorzSpacing) + Options.HorzSpacing; finally *************** *** 1529,1533 **** si.fMask := SIF_ALL; GetScrollInfo(Handle, SB_VERT, si); ! Result := si.nPos div (FPageHeight + Options.VertSpacing) * FTotalCols; end; --- 1554,1585 ---- si.fMask := SIF_ALL; GetScrollInfo(Handle, SB_VERT, si); ! Result := (si.nPos div (FPageHeight + Options.VertSpacing) + Ord(si.nPos mod (FPageHeight + Options.VertSpacing)<>0)) * FTotalCols; ! end; ! ! procedure TJvCustomPreviewDoc.First; ! begin ! TopPage := 0; ! end; ! ! procedure TJvCustomPreviewDoc.Last; ! begin ! TopPage := PageCount; ! end; ! ! procedure TJvCustomPreviewDoc.Next; ! var tmp:integer; ! begin ! tmp := TopPage; ! tmp := tmp + TotalCols; ! TopPage := tmp; ! end; ! ! procedure TJvCustomPreviewDoc.Prior; ! var tmp:integer; ! begin ! tmp := TopPage; ! tmp := tmp - TotalCols; ! ! TopPage := tmp; end; |