代码之家  ›  专栏  ›  技术社区  ›  frogb

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

  •  4
  • frogb  · 技术社区  · 15 年前

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

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

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   Uli Gerhardt    15 年前

    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;
    

    (灵感来自于 this )