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ě.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007



