procedure TddgExtendedMemo.WMVScroll(Var Msg:TWMVScroll); begin inherited; VScroll; end; procedure TddgExtendedMemo.HScroll; begin if Assigned(FOnHScroll) then FOnHScroll(self); end; procedure TddgExtendedMemo.VScroll; begin if Assigned(FOnVScroll) then FOnVScroll(self); end; procedure TddgExtendedMemo.SetRow(Value:Longint); begin SelStart := PerForm(EM_LINEINDEX,Value,0); FRow := SelStart; end; procedure TddgExtendedMemo.GetRow:Longing; begin Result := Perform(EM_LINEFROMCHAR,-1,0); end; procedure TddgExtendedMemo.SetColumn(Value:Longint); begin FColumn := Perform(EM_LINELENGTH,Perform(EM_LINEINDEX,GetRow,0),0); if FColumn >Value then FColumn := Value; SelStart := Perform(eM_LINEINDEX,GetRow,0)+FColumn; end; procedure TddgExtendedMemo.GetColumn:Longint; begin result := SelStart - Perform(EMLINEINDEX,-1,0); end;
ShowScrollBar(memo1.Handle, SB_VERT, false) ;//去掉垂直
wordwrap为true;
通过上下键移动,滚动条不也一起动了。
unit ExMemointerfaceuses
windows,Messages,Classes,StdCtrls;Type
TddgExtendedMemo = Class(TMemo)
private
FRow:Longint;
FColumn:Logint;
FOnHScroll:TNotifyEvent;
FOnVScroll:TNotifyEvent;
Procedure WMHScroll(Var Msg:TWMHScroll);message WM_HSCRoll;
Procedure WMVScroll(Var Msg:TWMVScroll);message WM_VSCRoll;
Procedure SetRow(Value:Longint);
Procedure SetColumn(Value:Longint);
Function GetRow:Longint;
Function GetColumn:Longint;
protected
procedure HScroll:dynamic;
procedure VScroll:dynamic;
public
property Row:Longint read FRow write FRow;
property Column:Longing read FColumn write FColumn;
published
property OnHScroll:TNotifyEvent read FOnHScroll write FOnHScroll;
property OnVScroll:TNotifyEvent read FOnVScroll write FOnVScroll;
end;
implementation
procedure TddgExtendedMemo.WMHScroll(Var Msg:TWMHScroll);
begin
inherited;
HScroll;
end;
procedure TddgExtendedMemo.WMVScroll(Var Msg:TWMVScroll);
begin
inherited;
VScroll;
end; procedure TddgExtendedMemo.HScroll;
begin
if Assigned(FOnHScroll) then
FOnHScroll(self);
end; procedure TddgExtendedMemo.VScroll;
begin
if Assigned(FOnVScroll) then
FOnVScroll(self);
end; procedure TddgExtendedMemo.SetRow(Value:Longint);
begin
SelStart := PerForm(EM_LINEINDEX,Value,0);
FRow := SelStart;
end; procedure TddgExtendedMemo.GetRow:Longing;
begin
Result := Perform(EM_LINEFROMCHAR,-1,0);
end; procedure TddgExtendedMemo.SetColumn(Value:Longint);
begin
FColumn := Perform(EM_LINELENGTH,Perform(EM_LINEINDEX,GetRow,0),0);
if FColumn >Value then
FColumn := Value;
SelStart := Perform(eM_LINEINDEX,GetRow,0)+FColumn;
end; procedure TddgExtendedMemo.GetColumn:Longint;
begin
result := SelStart - Perform(EMLINEINDEX,-1,0);
end;