2012-03-30 17 views
7

कुछ रूपों पर मेरे पास dbEdits हैं जो कभी-कभी अपने फ़ील्ड में मौजूद सभी टेक्स्ट दिखाने के लिए पर्याप्त नहीं होते हैं। उनके लिए मैं निम्नलिखित कोड है:क्या यह निर्धारित करना संभव है कि dbEdit में टेक्स्ट दृश्यमान से अधिक लंबा है या नहीं?

procedure Tgm12edLots.dbeLotNameMouseEnter(Sender: TObject); 
begin 
    with dbeLotName do begin 
    ShowHint := True; 
    Hint := Text; 
    end; 
end; 

मैं अगर सभी पाठ दिखाई दे रहा है दिखा संकेत से बचने के लिए चाहते हैं, लेकिन मैं कैसे कि हालत के लिए परीक्षण करने के लिए नहीं है।

किसी भी सुझाव/सुझाव के लिए धन्यवाद!

उत्तर

5

मुझे लगता है कि यह काम करना चाहिए ...

function CanShowAllText(Edit: TDBEdit):Boolean; 
var 
    TextWidth:Integer; 
    VisibleWidth: Integer; 
    Bitmap: TBitmap; 
const 
//This could be worked out but without delphi I can't remember all that goes into it. 
    BordersAndMarginsWidthEtc = 4; 
begin 
    Bitmap := TBitmap.Create; 
    try 
     Bitmap.Canvas.Font.Assign(Edit.Font); 
     TextWidth := Bitmap.Canvas.TextWidth(Edit.Text); 
     VisibleWidth := Edit.Width - BordersAndMarginsWidthEtc; 
     Result := TextWidth < VisibleWidth; 
    finally 
     Bitmap.Free; 
    end; 
end; 
+0

एक आकर्षण की तरह काम करता है! धन्यवाद @ जेम्स बी – skippix

6

यहाँ एक तेज संस्करण (एक TBitmap भूमि के ऊपर के बिना) है कि खाते में Edit नियंत्रण के मार्जिन लेता है (अर्थात EM_SETMARGINS)।

यह निर्धारित करने के लिए कि पाठ दृश्य क्षेत्र को बहता है या नहीं, IsEditTextOverflow का उपयोग करें।

type 
    TCustomEditAccess = class(TCustomEdit); 

function EditTextWidth(Edit: TCustomEdit): Integer; 
var 
    DC: HDC; 
    Size: TSize; 
    SaveFont: HFont; 
begin 
    DC := GetDC(0); 
    SaveFont := SelectObject(DC, TCustomEditAccess(Edit).Font.Handle); 
    GetTextExtentPoint32(DC, PChar(Edit.Text), Length(Edit.Text), Size); 
    SelectObject(DC, SaveFont); 
    ReleaseDC(0, DC); 
    Result := Size.cx; 
end; 

function EditVisibleWidth(Edit: TCustomEdit): Integer; 
var 
    R: TRect; 
begin 
    SendMessage(Edit.Handle, EM_GETRECT, 0, LPARAM(@R)); 
    Result := R.Right - R.Left; 
end; 

function IsEditTextOverflow(Edit: TCustomEdit): Boolean; 
begin 
    Result := EditTextWidth(Edit) > EditVisibleWidth(Edit); 
end; 
संबंधित मुद्दे

 संबंधित मुद्दे