Delphi 编辑和备忘录中的文本偏移

发布于 2024-07-22 04:07:56 字数 398 浏览 3 评论 0原文

我注意到在 Delphi 2009 中,多行备忘录中的文本左侧填充与单行编辑中的文本不同,尽管两者都基于 TCustomEdit。 确切的偏移量取决于字体大小:

alt text http://img188.imageshack.us /img188/7668/editmemo.png

我正在寻找一种简单的方法来使备忘录文本与编辑文本的偏移量对齐。 如果这是不可能的,那么在给定字体大小的情况下计算偏移量以像素为单位的方法怎么样,以便我可以在显示(动态创建和定位)字段之前调整它们的位置? 我认为在 Delphi 的早期版本中,两个偏移量是相同的。

I have noticed that in Delphi 2009, the text in a multi-line memo has different padding on the left from that in a single-line edit, though both are based on TCustomEdit. The exact offset depends on the font size:

alt text http://img188.imageshack.us/img188/7668/editmemo.png

I am looking for a simple way to get the memo text aligned with the same offset as edit text. If that is not possible, how about a method of calculating what the offset is going to be in pixels, given the font size, so that I could adjust the positioning of the (dynamically created and positioned) fields before displaying them? I think that in an earlier release of Delphi, the two offsets were the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦忆晨望 2024-07-29 04:07:56

EM_GETMARGINS。 我不确定这是否算“简单”。 :-)

编辑:试试这个:(

type
  tSynMargins = record
    left, right: Word;
  end;

function GetLeftMargin(hEdit: HWND): Word;
var
  margins: Longint;
begin
  margins := SendMessage(hEdit, EM_GETMARGINS, 0, 0);
  Result := tsynMargins(Margins).left;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(GetLeftMargin(Edit1.Handle));
  Memo1.Text := IntToStr(GetLeftMargin(Memo1.Handle));
end;

灵感来自这个

There is EM_GETMARGINS. I'm not sure if that counts as "simple". :-)

EDIT: Try this:

type
  tSynMargins = record
    left, right: Word;
  end;

function GetLeftMargin(hEdit: HWND): Word;
var
  margins: Longint;
begin
  margins := SendMessage(hEdit, EM_GETMARGINS, 0, 0);
  Result := tsynMargins(Margins).left;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IntToStr(GetLeftMargin(Edit1.Handle));
  Memo1.Text := IntToStr(GetLeftMargin(Memo1.Handle));
end;

(inspired by this)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文