如何设置Memo控件中Tab键的宽度(100分)

  • 主题发起人 主题发起人 woodmud
  • 开始时间 开始时间
W

woodmud

Unregistered / Unconfirmed
GUEST, unregistred user!
将Memo控件的WantTabs属性设置为True,则Memo控件可以接收Tab字符,但是怎样能像Delphi的编辑器一样设置Tab键的宽度,请各位大虾不吝赐教。
 
memo控键没有这个属性,找一找有没有这样的控件吧。
 
var
c:integer;
c:=8;
SendMessage(Memo1.Handle,EM_SETTABSTOPS,1,integer(@c));

注意c是dialog unit,它等于平均一个字符宽度的 1/4 ,就是说 c:=4 的时候是一个字符
c:=8 的时候是2个字符……
 
多谢Pipi,但如果我想写一个控件,具有Tabstop属性,并且一开始就设置其初始值为两个字符宽度,结果始终它默认为8个字符宽度,问怎么解决?以下是我写的控件代码:
unit ERichEdit;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ComCtrls;

type
TERichEdit = class(TRichEdit)
private
FTabStops:Integer;
procedure SetTabStops(Value:Integer);
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
function FindText(const SearchStr:string;StartPos,Leng:Integer;Options:TSearchTypes;Down:Boolean):Integer;overload;
published
property TabStops:Integer read FTabStops write SetTabStops;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('woodmud', [TERichEdit]);
end;

{ TERichEdit }

constructor TERichEdit.Create(AOwner: TComponent);
begin
inherited;
Font.Name:='Courier New';
Font.Size:=10;
FTabStops:=32;
end;

function TERichEdit.FindText(const SearchStr: string; StartPos,
Leng: Integer; Options: TSearchTypes; Down: Boolean): Integer;
var
SPos,Len,FoundAt,LenStr,ToEnd:Integer;
begin
if Down then
FoundAt:=FindText(SearchStr,StartPos,Leng,Options)
else
begin
SPos:=StartPos;
LenStr:=Length(SearchStr);
ToEnd:=StartPos+Leng;
repeat
FoundAt:=SPos-LenStr;
Len:=ToEnd-SPos;
SPos:=FindText(SearchStr,SPos,Len,Options)+LenStr;
until SPos=LenStr-1;
if FoundAt=StartPos-LenStr then FoundAt:=-1;
end;
Result:=FoundAt;
end;

procedure TERichEdit.SetTabStops(Value: Integer);
begin
if FTabStops<>Value then
begin
FTabStops:=Value;
Perform(EM_SETTABSTOPS,1,Integer(@Value));
end;
end;

end.
 
FTabStops:=32;改成:TabStops:=32; (注意没有F)大有区别
另外,32就是8个字符,因为 32/4=8
 
接受答案了.
 
后退
顶部