Stille dropdown bredden på en combobox

Når lengden på en streng i en kombinasjonsboks stiger bredden av kombinasjonsboksen er det 3 ting som kan gjøres for at de er

  • Kutt strengen (ikke en veldig god løsning)
  • Legg til en vannrett rullefelt
  • Endre bredden på rullegardinlisten.

    følgende funksjon vil nullstille bredden på rullegardinlisteboksen i en combobox.It tar 2 parametre (1 valgfritt) .ComboBox er den TComboBox whos dropdown bredde skal være changed.Width er en valgfri parameter som angir bredden på rullegardinlisten. Hvis bredde er mindre enn bredden på ComboBox da denne parameteren vil bli ignorert og bredden vil bli satt til den lengste strengen i combobox.procedure SetComboDropDownWidth (ComboBox: TComboBox, Bredde: Integer = 1); Var jeg, TextLen: Longint; LF: LOGFONT; f: HFONT; begynne hvis Bredde < ComboBox.Width deretter begynne FillChar (lf, sizeof (LF), 0); StrPCopy (lf.lfFaceName, ComboBox.Font.Name); lf.lfHeight: = ComboBox.Font.Height; lf.lfWeight: = FW_NORMAL; hvis fsBold i ComboBox.Font.Style deretter lf.lfWeight: = lf.lfWeight eller FW_BOLD; f: = CreateFontIndirect (lf); if (f < > 0), og start prøve ComboBox.Canvas.Handle: = GetDC (ComboBox.Handle); SelectObject (ComboBox.Canvas.Handle, f); prøve for jeg: = 0 til ComboBox.Items.Count -1 gjør begynne TextLen: = ComboBox.Canvas.TextWidth (ComboBox.Items [I]); hvis TextLen > Bredde deretter Bredde: = TextLen; slutt; (* Standard ComboBox tegning er Rect.Left + 2, og legger de ekstra avstands forskyvninger denne *) Inc (Bredde, GetSystemMetrics (SM_CYVTHUMB) + GetSystemMetrics (SM_CXVSCROLL)); endelig ReleaseDC (ComboBox.Handle, ComboBox.Canvas.Handle); slutt; endelig DeleteObject (f); slutt; slutt; slutt; Sendmessage (ComboBox.Handle, CB_SETDROPPEDWIDTH, Bredde, 0); end; regardsSi Carter Orcka Development