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