2009-05-20 51 views
4

我注意到,在Delphi 2009中,多行備註中的文本與單行編輯中的文本左側有不同的填充,儘管兩者都基於TCustomEdit。確切的偏移取決於字體大小:編輯和備忘錄中的Delphi文本偏移

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

我正在尋找一個簡單的方法來獲得與同編輯文本對齊偏移的備忘錄文本。如果這是不可能的,那麼在給定字體大小的情況下,如何計算偏移將以像素爲單位的方法,以便在顯示它們之前調整(動態創建和定位)字段的位置?我認爲在Delphi的早期版本中,兩個偏移量是相同的。

回答

4

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啓發)

+0

很好,謝謝。 EM_SETMARGINS也很好用! – frogb 2009-05-20 10:32:57