⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nscroll.pas

📁 自己编写的DBF数据库游览软件,包含TDBF控软件.
💻 PAS
字号:
unit NScroll;

interface
uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 Forms;

type
 TMyScrollBox = Class(TScrollBox)
 private
   FNHBitmap: TBitmap;
   FNHCanvas: TCanvas;
   procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
   procedure SetBitmap(Value: TBitmap);
 protected
   procedure Painting;
   procedure PaintWindow(DC: HDC); override;
 published
   property BackBitmap: TBitmap read FNHBitmap write SetBitmap;
 public
   constructor Create(Owner: TComponent); override;
   destructor Destroy; override;
 end;

procedure Register;

implementation

constructor TMyScrollBox.Create(Owner: TComponent);
begin
 inherited Create(Owner);
 FNHBitmap := TBitmap.Create;
 FNHCanvas := TControlCanvas.Create;
 TControlCanvas(FNHCanvas).Control := Self;
end;

destructor TMyScrollBox.Destroy;
begin
 FNHBitmap.Destroy;
 FNHCanvas.Destroy;
 inherited Destroy;
end;

procedure TMyScrollBox.SetBitmap(Value : TBitMap);
begin
 FNHBitmap.Assign(Value);
 invalidate;
end;

procedure TMyScrollBox.WMPaint(var Message: TWMPaint);
begin
 PaintHandler(Message);
end;

procedure TMyScrollBox.PaintWindow(DC: HDC);
begin
 FNHCanvas.Handle := DC;
 try
   Painting;
 finally
   FNHCanvas.Handle := 0;
 end;
end;

procedure TMyScrollBox.Painting;
var FDrawHeight, FDrawWidth: Integer;
 Row, Column, xl, xt, xw, xh: Integer;
 xdl, xdt: Integer;
 xRect: TRect;
 i: integer;
 xhdl: Word;
begin
 if (FNHBitmap.width <> 0) and (FNHBitmap.Height <> 0) then begin
   xRect := ClientRect;
   FDrawHeight := xRect.Bottom - xRect.Top;
   FDrawWidth := xRect.Right - xRect.Left;
   xdl := (HorzScrollBar.Position mod FNHBitmap.Width);
   xdt := (VertScrollBar.Position mod FNHBitmap.Height);
   for Row := 0 to (FDrawHeight div FNHBitmap.Height)+1 do begin
     for Column := 0 to (FDrawWidth div FNHBitmap.Width)+1 do begin
       xl := Column*FNHBitmap.Width+xRect.Left-xdl;
       xt := Row*FNHBitmap.Height+xRect.Top-xdt;
       xw := FNHBitmap.Width;
       if (FDrawWidth - xl+xRect.Left) < xw then xw := (FDrawWidth - xl+xRect.Top);
       xh := FNHBitmap.Height;
       if (FDrawHeight - xt+xRect.Top) < xh then xh := (FDrawHeight - xt+xRect.Top);
       FNHCanvas.CopyRect(Rect(xl, xt, xl+xw, xt+xh), FNHBitmap.Canvas, Rect(0, 0, xw, xh));
     end;
   end;
 end;
end;

{}
procedure Register;
begin
 RegisterComponents('KPC', [TMyScrollBox]);
end;

end.  

 
 

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -