2009-05-20 3 views
4

j'ai remarqué que dans Delphi 2009, le texte dans une note de service multi-ligne a différents rembourrage sur la gauche de celui dans une édition unique en ligne, bien que les deux sont basées sur TCustomEdit. Le décalage exact dépend de la taille de la police:décalages de texte Delphi dans les modifications et les notes de service

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

Je cherche un moyen simple d'obtenir le texte du mémo aligné avec le même décalage que le texte d'édition. Si cela est impossible, que diriez-vous d'une méthode de calcul ce que le décalage va être en pixels, compte tenu de la taille de la police, afin que je puisse régler le positionnement de la (dynamique créé et positionné) les champs avant de les afficher? Je pense que dans une version antérieure de Delphi, les deux décalages étaient les mêmes.

Répondre

4

Il est EM_GETMARGINS. Je ne suis pas sûr si cela compte comme "simple". :-)

EDIT: Essayez ceci:

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; 

(inspiré par this)

+0

Grand, merci. EM_SETMARGINS fonctionne aussi bien! – frogb

Questions connexes