程序中遇到一个很麻烦的问题,关于memo输入时自动适应输入的文字总宽度. 有一个memo输入文字时自动适应输入的文字总宽度.或者说有没有很好的算法获取文字的总宽度.需要注意的是:文字的大小和字体都不是确定的.不甚感激... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Memo1Change(Sender: TObject); private { Private declarations } procedure mTempMemoChange(Sender: TObject); public { Public declarations } end;var Form1: TForm1; mTempMemo: TMemo;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin Memo1.WordWrap := False; mTempMemo := TMemo.Create(nil); mTempMemo.Visible := False; mTempMemo.Parent := Form1; mTempMemo.Width := Memo1.Width; mTempMemo.ScrollBars := ssBoth; mTempMemo.Font.Assign(Memo1.Font); mTempMemo.OnChange := mTempMemoChange;end;procedure TForm1.FormDestroy(Sender: TObject);begin mTempMemo.Destroy;end;procedure TForm1.mTempMemoChange(Sender: TObject);var mSI: TScrollInfo;begin mSI.cbSize := Sizeof(mSI); mSI.fMask := SIF_RANGE; GetScrollInfo(mTempMemo.Handle, SB_HORZ, mSI); if mSI.nMax > Memo1.Width-10 then Memo1.Width := mSI.nMax+10;end;procedure TForm1.Memo1Change(Sender: TObject);begin mTempMemo.Text := Memo1.Text;end;end. 优化了一下:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Memo1Change(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; mTempMemo: TMemo;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin Memo1.WordWrap := False; Memo1.ScrollBars := ssVertical; mTempMemo := TMemo.Create(nil); mTempMemo.Visible := False; mTempMemo.Parent := Form1; mTempMemo.Width := Memo1.Width; mTempMemo.ScrollBars := ssBoth; mTempMemo.Font.Assign(Memo1.Font);end;procedure TForm1.FormDestroy(Sender: TObject);begin mTempMemo.Destroy;end;procedure TForm1.Memo1Change(Sender: TObject);var mSI: TScrollInfo;begin mTempMemo.Text := Memo1.Text; mSI.cbSize := Sizeof(mSI); mSI.fMask := SIF_RANGE; GetScrollInfo(mTempMemo.Handle, SB_HORZ, mSI); if mSI.nMax > Memo1.Width-30 then Memo1.Width := mSI.nMax+30;end;end. 又优化了一下,呵呵unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Memo1Change(Sender: TObject); private mTempMemo: TMemo; mSI: TScrollInfo; { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin Memo1.WordWrap := False; Memo1.ScrollBars := ssVertical; mTempMemo := TMemo.Create(nil); mTempMemo.Visible := False; mTempMemo.Parent := Form1; mTempMemo.Width := Memo1.Width; mTempMemo.ScrollBars := ssBoth; mTempMemo.Font.Assign(Memo1.Font); mSI.cbSize := Sizeof(mSI); mSI.fMask := SIF_RANGE;end;procedure TForm1.FormDestroy(Sender: TObject);begin mTempMemo.Destroy;end;procedure TForm1.Memo1Change(Sender: TObject);begin mTempMemo.Text := Memo1.Text; GetScrollInfo(mTempMemo.Handle, SB_HORZ, mSI); if mSI.nMax > Memo1.Width-30 then Memo1.Width := mSI.nMax+30;end;end. 感谢erhan兄,代码有点靠谱,但是不是很靠谱~~谢谢erhan兄~... memo输入文字的时候文字的大小和字体可以不确定吗? Canvas.TextWidth('计算文字宽度') 在飞机上向MM求婚成功,发贴散分!:-) Print Preview 页怎么样用程序控制它最大化,最小化? delphi与access连接问题 日期问题在输入时的正确性、完整性检验 专业HMIS系统出售,附带源码、开发、实施文档! 小弟请教一个问题:如何实现Access数据库的备份与恢复呢? ColoredDBGrid是个什么东东啊! 50分,帮我看看这个保存代码为什么不能工作 请问怎样设置是下次在进入时,密码窗题要填密码的地方为空白 50分求一个ACCESS查询的SQL语句,知道的不难? 随机取memo内行数据问题 如何把剪贴板里的BMP图片转换成JPG图片并在数据库保存为JPG
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
procedure mTempMemoChange(Sender: TObject);
public
{ Public declarations }
end;var
Form1: TForm1;
mTempMemo: TMemo;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.WordWrap := False;
mTempMemo := TMemo.Create(nil);
mTempMemo.Visible := False;
mTempMemo.Parent := Form1;
mTempMemo.Width := Memo1.Width;
mTempMemo.ScrollBars := ssBoth;
mTempMemo.Font.Assign(Memo1.Font);
mTempMemo.OnChange := mTempMemoChange;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
mTempMemo.Destroy;
end;procedure TForm1.mTempMemoChange(Sender: TObject);
var
mSI: TScrollInfo;
begin
mSI.cbSize := Sizeof(mSI);
mSI.fMask := SIF_RANGE;
GetScrollInfo(mTempMemo.Handle, SB_HORZ, mSI);
if mSI.nMax > Memo1.Width-10 then
Memo1.Width := mSI.nMax+10;
end;procedure TForm1.Memo1Change(Sender: TObject);
begin
mTempMemo.Text := Memo1.Text;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
mTempMemo: TMemo;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.WordWrap := False;
Memo1.ScrollBars := ssVertical; mTempMemo := TMemo.Create(nil);
mTempMemo.Visible := False;
mTempMemo.Parent := Form1;
mTempMemo.Width := Memo1.Width;
mTempMemo.ScrollBars := ssBoth;
mTempMemo.Font.Assign(Memo1.Font);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
mTempMemo.Destroy;
end;procedure TForm1.Memo1Change(Sender: TObject);
var
mSI: TScrollInfo;
begin
mTempMemo.Text := Memo1.Text;
mSI.cbSize := Sizeof(mSI);
mSI.fMask := SIF_RANGE;
GetScrollInfo(mTempMemo.Handle, SB_HORZ, mSI);
if mSI.nMax > Memo1.Width-30 then
Memo1.Width := mSI.nMax+30;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
mTempMemo: TMemo;
mSI: TScrollInfo;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.WordWrap := False;
Memo1.ScrollBars := ssVertical; mTempMemo := TMemo.Create(nil);
mTempMemo.Visible := False;
mTempMemo.Parent := Form1;
mTempMemo.Width := Memo1.Width;
mTempMemo.ScrollBars := ssBoth;
mTempMemo.Font.Assign(Memo1.Font); mSI.cbSize := Sizeof(mSI);
mSI.fMask := SIF_RANGE;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
mTempMemo.Destroy;
end;procedure TForm1.Memo1Change(Sender: TObject);
begin
mTempMemo.Text := Memo1.Text;
GetScrollInfo(mTempMemo.Handle, SB_HORZ, mSI);
if mSI.nMax > Memo1.Width-30 then
Memo1.Width := mSI.nMax+30;
end;end.
Canvas.TextWidth('计算文字宽度')