亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smemo.pas

?? AlphaControls是一個Delphi標(biāo)準(zhǔn)控件的集合
?? PAS
字號:
unit sMemo;
{$I sDefs.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ToolWin, ExtCtrls, sConst, sStyleEdits, sScrollBar, sMessages;

Type

  TVScrollEvent = TNotifyEvent;

  TsMemo = class(TCustomMemo)
  private
    FOnVScroll: TNotifyEvent;
    FOnScrollCaret: TNotifyEvent;
    VSBar : TsScrollBar;
    HSBar : TsScrollBar;
    procedure OnVSBChange(Sender : TObject; OldValue : integer);
    procedure OnHSBChange(Sender : TObject; OldValue : integer);
    procedure WMNCCalcSize (var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
    procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT;
    procedure WMPaint (var Message: TMessage); message WM_PAINT;
    procedure WMMove (var Message: TMessage); message WM_MOVE;
    procedure WMSize (var Message: TMessage); message WM_SIZE;
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMHScroll); message WM_VSCROLL;
    procedure CMEnabledChanged(var Msg : TMessage); message CM_ENABLEDCHANGED;
    procedure WMMouseWheel(var Message: TMessage); message WM_MOUSEWHEEL;
    procedure CNKeyDown(var Message: TWMKey); message CN_KEYDOWN;
    procedure CNKeyUp(var Message: TWMKey); message CN_KEYUP;
    procedure WMMouseDown(var Message: TMessage); message WM_LBUTTONDOWN;
    procedure WMMouseUp(var Message: TMessage); message WM_LBUTTONUP;
    procedure EMScrollCaret (var Message: TMessage); message EM_SETSEL;
    property BorderStyle;
  protected
    FsStyle : TsStyle;
    Down : boolean;
    procedure CreateWnd; override;
    procedure WndProc (var Message: TMessage); override;
  public
    LastControl : boolean;
    constructor Create(AOwner:TComponent); override;
    destructor Destroy; override;
    procedure Invalidate; override;
    procedure AfterConstruction; override;
    procedure Loaded; override;
    procedure RefreshScrolls;
    procedure RefreshScrollBounds;
    function FirstLineIndex : integer;
  published
    property Align;
    property Alignment;
    property Anchors;
    property BiDiMode;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font;
    property HideSelection;
    property ImeMode;
    property ImeName;
    property Lines;
    property MaxLength;
    property OEMConvert;
    property ParentBiDiMode;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ReadOnly;
    property ScrollBars;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;
    property WantReturns;
    property WantTabs;
    property WordWrap;
    property OnChange;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDock;
    property OnStartDrag;
    Property OnScrollCaret : TNotifyEvent read FOnScrollCaret write FOnScrollCaret;
    Property OnVScroll : TNotifyEvent read FOnVScroll write FOnVScroll;

    property AutoSelect;
    property HelpContext;
    property PasswordChar;
    property Hint;
    property Text;
    property CharCase;

    property sStyle:TsStyle read FsStyle write FsStyle;

    { Published declarations }
  end;

implementation

uses sStyleSimply, sUtils, sMaskData;

constructor TsMemo.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  BorderStyle := bsNone;
  sStyle := TsStyle.Create(Self);
  sStyle.COC := COC_TsMemo;
  OnKeyDown := sStyle.onKeyDown;
//  ParentColor := False;
end;

procedure TsMemo.WMNCCalcSize(var Message: TWMNCCalcSize);
begin
  inherited;
  InflateRect(Message.CalcSize_Params^.rgrc[0], -3, -3);
end;

procedure TsMemo.WMNCPaint(var Message: TMessage);
begin
  if (csDestroying in ComponentState) or (csLoading in ComponentState) then Exit;
  if not IsValidSkinIndex(sStyle.SkinIndex) then inherited;
  sStyle.RedrawBorder;
end;

procedure TsMemo.Invalidate;
begin
  if Color <> sStyle.GetActiveColor then begin
    Color := sStyle.GetActiveColor;
  end;
  if (csDesigning in ComponentState) and Assigned(FsStyle) then begin
    if not RestrictDrawing then FsStyle.BGChanged := True;
  end;
  inherited;
//  RefreshScrolls;
end;

procedure TsMemo.WndProc(var Message: TMessage);
begin
  if Assigned(FsStyle) then FsStyle.WndProc(Message);
  inherited;
  if (Message.MSG = SM_REMOVESKIN) and not (csDestroying in ComponentState) then begin
    invalidate;
  end;

  if Assigned(sStyle) and IsValidSkinIndex(sStyle.SkinIndex) then begin
    case Message.Msg of
      CM_VISIBLECHANGED : begin
        RefreshScrolls;
      end;
    end;
    if not (csDesigning in ComponentState) then begin
      case Message.Msg of
        WM_MOUSEWHEEL, WM_PASTE, WM_CUT, WM_CLEAR, WM_UNDO, WM_SETTEXT,
        CM_CHANGED, CM_INVALIDATE, CM_CONTROLLISTCHANGE : RefreshScrolls;

        CM_VISIBLECHANGED : begin
          RefreshScrolls;
        end;
        WM_MOUSEMOVE : if Down then RefreshScrolls;
      end;
    end;
  end;
end;

procedure TsMemo.CreateWnd;
begin
  inherited;
  RefreshScrolls;
end;

destructor TsMemo.Destroy;
begin
  FreeAndNil(FsStyle);
  OnKeyDown := nil;
  inherited Destroy;
end;

procedure TsMemo.WMPaint(var Message: TMessage);
begin
  if (csDestroying in ComponentState) or (csLoading in ComponentState) then Exit;
  inherited;
end;

procedure TsMemo.AfterConstruction;
begin
  inherited;
  sStyle.Loaded;
end;

procedure TsMemo.Loaded;
begin
  inherited;
  sStyle.Loaded;
end;

procedure TsMemo.WMVScroll(var Message: TWMHScroll);
begin
  inherited;
  RefreshScrolls;
  if Assigned(FOnVScroll) then begin
    FOnVScroll(Self);
  end;
end;

procedure TsMemo.EMScrollCaret(var Message: TMessage);
begin
  inherited;
  if Assigned(FOnScrollCaret) then begin
    FOnScrollCaret(Self);
  end;
end;

function TsMemo.FirstLineIndex: integer;
begin
  Result := LongRec(SendMessage(Handle, EM_GETFIRSTVISIBLELINE, 2, 2)).Lo;
end;

procedure TsMemo.OnHSBChange(Sender: TObject; OldValue : integer);
begin
  SendMessage(Handle, WM_HSCROLL, MakeWParam(SB_THUMBPOSITION, HSBar.Position), 0);
end;

procedure TsMemo.OnVSBChange(Sender: TObject; OldValue : integer);
begin
  SendMessage(Handle, WM_VSCROLL, MakeWParam(SB_THUMBPOSITION, VSBar.Position), 0);
end;

procedure TsMemo.WMHScroll(var Message: TWMHScroll);
begin
  inherited;
  RefreshScrolls;
end;

procedure TsMemo.CMEnabledChanged(var Msg: TMessage);
begin
  inherited;
  RefreshScrolls;
end;

procedure TsMemo.WMMouseWheel(var Message: TMessage);
begin
  inherited;
  RefreshScrolls;
end;

procedure TsMemo.CNKeyDown(var Message: TWMKey);
begin
  inherited;
  RefreshScrolls;
end;

procedure TsMemo.CNKeyUp(var Message: TWMKey);
begin
  inherited;
  case Message.CharCode of
    VK_UP, VK_DOWN, VK_HOME, VK_END, VK_SCROLL, VK_PRIOR, VK_NEXT : begin
      RefreshScrolls;
    end;
  end;
end;

procedure TsMemo.RefreshScrollBounds;
begin
  if Assigned(VSBar) then begin
    if BiDiMode = bdRightToLeft then begin
      VSBar.Left := Left + 3
    end
    else begin
      VSBar.Left := Left + Width - VSBar.Width - 3;
    end;
    VSBar.Top := Top + 3;
//    Application.ProcessMessages;
  end;
  if Assigned(HSBar) then begin
    HSBar.Left := Left + 3;
    HSBar.Top := Top + Height - HSBar.Height - 3;
//    Application.ProcessMessages;
  end;
end;

procedure TsMemo.RefreshScrolls;
var
  SI_V, SI_H : TScrollInfo;
  SBI_V, SBI_H : TScrollBarInfo;
begin
  if (csCreating in ControlState) or (csDestroying in ComponentState) then Exit;

  SBI_V.cbSize := SizeOf(TScrollBarInfo);
  SBI_H.cbSize := SizeOf(TScrollBarInfo);

  SI_V.cbSize := SizeOf(TScrollInfo);
  SI_V.fMask := SIF_ALL;
  SI_H.cbSize := SizeOf(TScrollInfo);
  SI_H.fMask := SIF_ALL;

  if not sSkinData.Active or not Visible or (Width < 16) or (Height < 16) then begin
    if Assigned(VSBar) then FreeAndNil(VSBar);
    if Assigned(HSBar) then FreeAndNil(HSBar);
    Exit;
  end;

  // Prepare vertical scrollbar
  if GetScrollInfo(Handle, SB_VERT, SI_V) and GetScrollBarInfo(Handle, Integer(OBJID_VSCROLL), SBI_V) then begin
    if (VSBar = nil) and
         sSkinData.Active and Visible and (Width >= 16) and (Height >= 16) and
           not (SBI_V.rgstate[0] = STATE_SYSTEM_INVISIBLE) then begin
      VSBar := TsScrollBar.Create(Self);
      VSBar.LinkedControl := Self;
      VSBar.OnChange := OnVSBChange;
      VSBar.DrawingForbidden := True;
      VSBar.Parent := Parent;
      VSBar.Visible := True;
      VSBar.TabStop := False;
      VSBar.Kind := sbVertical;
      VSBar.Width := WidthOf(SBI_V.rcScrollBar);
      VSBar.Smooth := True;
    end else if not (sSkinData.Active and not (SBI_V.rgstate[0] = STATE_SYSTEM_INVISIBLE)) or (ScrollBars = ssNone) then FreeAndNil(VSBar);

    if Assigned(VSBar) then begin
      VSBar.DrawingForbidden := True;
      VSBar.Height := HeightOf(SBI_V.rcScrollBar);
      VSBar.Enabled := not (SBI_V.rgstate[0] = STATE_SYSTEM_UNAVAILABLE) and Enabled;
      if (SI_V.nMax < SI_V.nMin) or (SI_V.nMax - integer(SI_V.nPage) + 1 = 0) then begin
        VSBar.Max := 1;
        VSBar.Min := 0;
        VSBar.PageSize := SI_V.nPage;
        VSBar.Position := -1;
      end
      else begin
        VSBar.Max := SI_V.nMax - integer(SI_V.nPage) + 1;
        VSBar.Min := SI_V.nMin;
        VSBar.Position := SI_V.nPos;
        VSBar.PageSize := SI_V.nPage;
        if VSBar.PageSize > 0 then VSBar.LargeChange := VSBar.PageSize else VSBar.LargeChange := 1;
      end;
      VSBar.DrawingForbidden := False;
    end;
  end;

  // Prepare horizontal scrollbar
  if GetScrollInfo(Handle, SB_HORZ, SI_H) and GetScrollBarInfo(Handle, Integer(OBJID_HSCROLL), SBI_H) then begin
    if (HSBar = nil) and
         sSkinData.Active and Visible and (Width >= 16) and (Height >= 16) and
           not (SBI_H.rgstate[0] = STATE_SYSTEM_INVISIBLE) then begin
      HSBar := TsScrollBar.Create(Self);
      HSBar.LinkedControl := Self;
      HSBar.OnChange := OnHSBChange;
      HSBar.DrawingForbidden := True;
      HSBar.Parent := Parent;
//      HSBar.ParentSStyle := sStyle;
      HSBar.Visible := True;
      HSBar.TabStop := False;
      HSBar.Kind := sbHorizontal;
      HSBar.Height := HeightOf(SBI_H.rcScrollBar);
      HSBar.Smooth := True;
//      HSBar.BringToFront;
    end else if not (sSkinData.Active and not (SBI_H.rgstate[0] = STATE_SYSTEM_INVISIBLE)) or (ScrollBars = ssNone) then FreeAndNil(HSBar);

    if Assigned(HSBar) then begin
      HSBar.DrawingForbidden := True;
      HSBar.Width := WidthOf(SBI_H.rcScrollBar);
      HSBar.Enabled := not (SBI_H.rgstate[0] = STATE_SYSTEM_UNAVAILABLE) and Enabled;
      if (SI_H.nMax < SI_H.nMin) or (SI_h.nMax - integer(SI_H.nPage) + 1 = 0) then begin
        HSBar.Max := 1;
        HSBar.Min := 0;
        HSBar.PageSize := SI_H.nPage;
        HSBar.Position := -1;
      end
      else begin
        HSBar.Max := SI_H.nMax - integer(SI_H.nPage) + 1;
        HSBar.Min := SI_H.nMin;
        HSBar.Position := SI_H.nPos;
        HSBar.PageSize := SI_H.nPage;
        if HSBar.PageSize > 0 then HSBar.LargeChange := HSBar.PageSize else HSBar.LargeChange := 1;
      end;
      HSBar.DrawingForbidden := False;
    end;
  end;
  RefreshScrollBounds;
end;

procedure TsMemo.WMMove(var Message: TMessage);
begin
  inherited;
  RefreshScrolls;
end;

procedure TsMemo.WMMouseDown(var Message: TMessage);
begin
  inherited;
  Down := True;
end;

procedure TsMemo.WMMouseUp(var Message: TMessage);
begin
  Down := False;
  inherited;
end;

procedure TsMemo.WMSize(var Message: TMessage);
begin
  inherited;
  RefreshScrolls;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成在线播放网站岛国| 欧美日韩国产精选| 欧美精品一区视频| 国产精一区二区三区| 国产丝袜美腿一区二区三区| 国产99一区视频免费| 国产精品毛片高清在线完整版| 99久久精品免费看国产| 一区二区高清视频在线观看| 欧美久久久久久久久中文字幕| 日产欧产美韩系列久久99| 精品三级av在线| 不卡视频免费播放| 亚洲国产cao| 久久综合色8888| 成人福利视频网站| 亚洲国产精品久久人人爱| 欧美成人精品1314www| 国产精品综合久久| 一区二区欧美精品| 精品日韩在线一区| gogo大胆日本视频一区| 午夜精品福利一区二区三区蜜桃| 日韩精品中文字幕一区二区三区 | 欧美男女性生活在线直播观看| 日韩不卡在线观看日韩不卡视频| 日韩欧美中文字幕公布| 成人国产一区二区三区精品| 午夜久久久久久久久久一区二区| 久久久久久久久久久电影| 在线日韩一区二区| 国产一区在线精品| 亚洲国产毛片aaaaa无费看 | 东方欧美亚洲色图在线| 一卡二卡欧美日韩| 久久久久久亚洲综合影院红桃| 色婷婷精品久久二区二区蜜臀av| 麻豆国产精品777777在线| 亚洲欧美日韩国产一区二区三区 | 久久久91精品国产一区二区精品| 在线观看国产日韩| 国产91高潮流白浆在线麻豆 | 亚洲精品一卡二卡| 久久综合色天天久久综合图片| 欧美午夜片在线观看| 高清不卡一区二区在线| www.欧美日韩| 美腿丝袜亚洲色图| 亚洲综合激情另类小说区| 国产区在线观看成人精品| 欧美一区二区三区系列电影| 色综合久久综合网欧美综合网| 国产一区二区三区香蕉| 日韩不卡一区二区| 午夜精品久久一牛影视| 亚洲欧美日韩系列| 国产精品国模大尺度视频| 久久婷婷国产综合精品青草| 91精品中文字幕一区二区三区| 日本乱人伦aⅴ精品| 成人精品gif动图一区| 精久久久久久久久久久| 三级欧美在线一区| 一区二区三区波多野结衣在线观看| 国产欧美精品一区二区色综合朱莉| 欧美蜜桃一区二区三区| 欧美色偷偷大香| 一本到高清视频免费精品| 成人h动漫精品| 国产99久久久久久免费看农村| 国产精品99久久久久| 经典三级一区二区| 国产乱码一区二区三区| 国产在线视频不卡二| 激情综合亚洲精品| 精品一区二区三区欧美| 韩国成人在线视频| 国产福利91精品| 国产福利精品导航| 成人一级黄色片| 不卡一区二区在线| 色综合久久天天| 在线观看中文字幕不卡| 欧美精品在线一区二区| 7777精品伊人久久久大香线蕉完整版| 色噜噜狠狠成人网p站| 在线观看免费成人| 6080日韩午夜伦伦午夜伦| 欧美一级生活片| 久久亚洲精精品中文字幕早川悠里| 久久婷婷一区二区三区| 国产精品狼人久久影院观看方式| 亚洲三级电影网站| 丝袜亚洲另类欧美综合| 久久国内精品自在自线400部| 国产一区二区三区在线观看精品| 国产成人午夜视频| 91亚洲精品一区二区乱码| 欧美主播一区二区三区美女| 这里是久久伊人| 久久女同精品一区二区| 亚洲蜜桃精久久久久久久| 偷拍自拍另类欧美| 国产剧情一区二区三区| 在线日韩av片| 欧美成人免费网站| 最好看的中文字幕久久| 日韩精品一区第一页| 国产一区二区三区久久悠悠色av| voyeur盗摄精品| 欧美伦理电影网| 国产日韩影视精品| 亚洲国产一区视频| 国产一区视频网站| 欧美色综合网站| 久久久久久久综合日本| 亚洲一区国产视频| 国产一区视频在线看| 欧美私人免费视频| 国产喷白浆一区二区三区| 亚洲图片欧美色图| 国产ts人妖一区二区| 欧美日韩久久一区二区| 国产精品免费视频一区| 日韩av在线播放中文字幕| 成人毛片在线观看| 日韩欧美中文字幕公布| 亚洲精品少妇30p| 国产精品一区二区视频| 欧美日韩一区二区三区不卡| 国产欧美日韩在线| 日本欧美大码aⅴ在线播放| av亚洲精华国产精华| 日韩欧美一级精品久久| 亚洲国产成人高清精品| 成人午夜精品在线| 欧美电影免费观看高清完整版在线| 一区二区三区高清| 国产69精品久久777的优势| 日韩精品中午字幕| 日韩电影免费一区| 欧美日韩一区二区在线观看视频 | 一区二区三区产品免费精品久久75| 国产麻豆视频一区二区| 在线不卡中文字幕播放| 一区二区三区在线免费观看| 岛国av在线一区| 久久久精品tv| 久久66热re国产| 欧美日韩dvd在线观看| 亚洲精品第1页| 色综合天天狠狠| 日本一区二区成人在线| 国产黄色91视频| 精品国产乱子伦一区| 男女性色大片免费观看一区二区| 欧美三级蜜桃2在线观看| 亚洲一区二区高清| 欧美自拍丝袜亚洲| 亚洲综合999| 色婷婷亚洲精品| 亚洲综合小说图片| 91丨九色丨蝌蚪富婆spa| 亚洲欧美一区二区三区极速播放 | 奇米影视一区二区三区小说| 欧美三级日韩在线| 亚洲va国产va欧美va观看| 日韩精品在线看片z| 极品少妇xxxx精品少妇| 久久久久久久久99精品| 高清成人免费视频| 中文字幕综合网| 在线观看日韩一区| 亚洲v精品v日韩v欧美v专区| 欧美丝袜第三区| 日本成人超碰在线观看| 欧美一区二区三区男人的天堂| 日本不卡视频在线| 精品国产欧美一区二区| 国内精品久久久久影院色| 国产午夜亚洲精品羞羞网站| 成人精品在线视频观看| 亚洲天堂网中文字| 欧美日韩一区高清| 久久91精品国产91久久小草| 国产拍揄自揄精品视频麻豆| 91小视频在线免费看| 亚洲动漫第一页| 精品美女一区二区三区| 国产99久久久国产精品| 综合久久久久久| 91精品国产综合久久香蕉麻豆 | 国产成人午夜精品5599| 国产精品国产馆在线真实露脸| 91丨porny丨户外露出| 午夜久久久影院| 久久久久久久一区| 91久久精品一区二区| 久久国内精品自在自线400部| 国产精品久久久久aaaa|