Flexibilní ComboBox - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

Flexibilní ComboBox

10. září 1998, 00.00 | Nedávno jsem narazil na zajímavý problém. Potřeboval jsem aby komponenta ComboBox měnila svou délku dle nejdelší položky. Jak jsem to vyřešil?

Nedávno jsem narazil na zajímavý problém (C++ Builder 3).
Z dynamicky načítaných dat jsem potřeboval vytvořit ComboBox a ten umístit na plochu aplikace.
Komlikace nastala když jsem se snažil přinutit komponentu aby měnila svojí délku dle nejdelší položky. Potřeboval jsem ComboBox umístit do textu a nemohl jsem si dovolit plýtvat místem nebo naopak mít useknutý text.
Příslušnou metodu jsem ovšem v komponentě nenašel (i když mi připadá docela potřebná) a proto jsem si pomohl po svém:

/zjednodušeno/

/* init */
    TComboBox * boxik = new TComboBox(this);
    ...
    TLabel * pom= new TLabel(Rodic);
    pom -> Visible = false;
    pom -> Font = this -> boxik -> Font;
    int max=0;

/* fce pro přidaní do ComboBoxu */
    int temp;
    pom -> Caption = co;
    temp = pom -> Width;
    if (temp > max) max=temp;
    boxik->Items->Add(co);

/* na závěr (po přidání všech položek) nastavení šířky */
    this -> boxik -> Width = max + 25; //25 na tlacitko

Co se přesně děje?
Deklarujeme si pomocný objekt TLabel, text u kterého lze zjistit délku v pixelech. Ale je třeba zajistit stejné parametry textu (Font).
Při přidávání položek do ComboBoxu vybíráme ten nejdelší (pozor, dle délky v pixelech, nikoliv v počtu znaků. Slovo "...." je jistě kratší než "hmmm", pokud nepoužíváte jisté fonty..)
Na závěr, při použití objektu, změníme jeho velikost dle maximální položky a připočteme velikost tlačítka na pravé straně.

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: