Delphi - komponenta na zobrazenie grafiky a textu s podporou stĺpcov bez deliacich čiar
1. Chcel by som poprosiť o radu, akú komponentu použiť v Delphi, ak chcem, aby splnila tieto kritériá:
- rozdelenie do stĺpcov (ako TStringGrid, ale bez rozdelovacích čiar)
- viac položiek a jednoduchý prístup k nim (ako ListBox)
- podpora grafiky (v jednom stĺpci bude grafický pás s dĺžkou podľa čísla uvedeného v druhom stĺpci)
Takto to bude približne vyzerať (toto je textový vzhľad):
asd 23 ++++++++++++++++++++++
jkl 12 +++++++++++
mno 6 ++++++
Takže hádam mi rozumie každý (miesto plusiek bude samozrejme FillRect v TCanvas). Taktiež nie je nutná konštantná šírka znakov. Tag CODE je použitý len kvôli zdôrazneniu stĺpcov.
2. Potrebujem objekt, kde tieto hodnoty uchovám (podľa možnosti nevizuálny). Pokiaľ má StringList aj vlastnosť Tag, tá by sa dala použiť na tieto účely. Síce to nebudú čísla, ale časy, ale uložím počet sekúnd. Ale skôr hľadám niečo ako nevizuálny TStringGrid.
Nevim co myslis ale neslo by treba pouzit Tlistview , nebo pokud chces text jako rxrichedit obrazky primo v textu jako toto treba viz jde tam i gif,png po uprave:
StringGrid muzes klidne pouzit, pokud si udelat vlastni vykreslovani.
Muzes pouzit i ListView, ale nebudes mit data uchovana "nevizualne"
Muzes pouzit klidne i ListBox, mist data uchovana "nevizualne" a uzivatelsky je vykreslovat
A je možné použiť TStringGrid a vypnúť v ňom zobrazenie deliacich čiar a kresliť? Ak áno, tak ako? Mal by som to vlastne uchované v ňom, len by som tretí stĺpec kreslil a tým by to bolo vyriešené hádam.
Vypnout zobrazovani car ne, ale je mozno je pomoci uzivatelskeho vykreslovani nevykreslit.
Radeji sahni po ListView, budes mit lepsi pristup k polozkam
Pozriem sa na ten TListView teda a ešte som si všimol, že existuje TDrawGrid. Dá sa to použiť?
Edit: A to vlastné vykresľovanie zariadim ako? Trochu by som poprosil objasniť.
Najvhodnejšou komponentou by bol TListView so zobrazením v stĺpcoch a riadkoch. Len ako teda zariadiť vykreslenie grafu v poslednom stĺpci? Idem na nočnú uvidíme sa ráno. Takže poprosím diskusiu aj bezo mňa, len aby som vedel ráno nájsť v diskusii najvhodnejšie riešenie. V kašdom prípade ďakujem za pripomienky.
Vykresleni Grafu v listview leda tam vlozit obrazek ale neni lepsi si udelat ten graf mimo treba v panelu ?
No nič, tak odznova:
Potrebujem niečo, čo bude vyzerať ako ListBox alebo ListView alebo RichEdit. Musí to umožniť vkladať údaje do stĺpcov, čiže sa jedná o zarovnanie. Tým teda môžem ListBox (a možno aj ListView, nakoľko túto komponentu nepoznám, zrušiť). RichEdit tiež na to nie je vhodný, nakoľko sa mi údaje budú "opakovať", pretože v každom riadku bude "to isté", len iné údaje. Tu by teda bolo vhodné použiť StringGrid alebo DBGrid. Nepáčia sa mi predeľovacie čiary, takže opäť neúspech. No a ďalšou vecou je, že tam nesmie byť Canvas, ktorého obsah sa ukladá do pamäte, čiže nie na spôsob Image. Skôr niečo na spôsob Form, kde sa nakreslené údaje neuchovávajú. Pri väčších výpisoch by to bol neskutočný žráč pamäte. Musí to teda umožňovať používateľské vykresľovanie vždy vtedy, keď vznikne podmienka na zobrazenie záznamu. Marí sa mi, že existuje niečo ako ListBox s podporou grafiky. Tu by som si nejako (len neviem ako, potrebujem trochu nakopnúť) urobil používateľské vykreslenie aktuálneho záznamu. Totiž do Canvas mi nerobí problém zobraziť text pomocou TextOut a tým zaistiť vykreslenie textu zarovnaného do stĺpcov. Teraz už len ako na to? Potrebujem už len poradiť ako umožniť vykreslenie aktuálneho záznamu do ListBoxu cez používateľské vykresľovanie.
Edit: Teraz ma napadlo, že vlastne by som mal vyriešené aj uchovanie hodnôt v ListBoxe. Záznamy budú uchované v jednom texte oddelené nejakým oddeľovacím znakom a tým zaistím "stĺpce", ktoré sa stanú reálnymi pri vykresľovaní.
Edit 2: Ako urobiť používateľské triedenie v ListBox?
Mám ďalší nápad. Môžem to spraviť tak, že použijem ScrollBar a Image. Podľa posunutia ScrollBar budem prekreslovať Image. Tak ktorá varianta je vhodnejšia?
Nakoľko tu diskutujem sám a kompetentní tu zrejme asi nie sú, tak vlákno uzatváram a označujem za vyriešené. Riešiť to budem pomocou TImage, ktoré sa bude prekresľovať v závislosti na posunutí ScrollBar. Používateľské údaje budem triediť vlastným triedením v TStringList. Prosím odpovede na triedenie do tohto vlákna:
http://pc.poradna.net/question/view/45793-delphi-ak o-urobit-pouzivatelsku-metodu-na-triedenie-tstringl ist
Nic v ylom chalani, ale kludne moyes pouzit TStringGrid. Totisto, TStringGrid obsahuje polosku v inspektore, kde nastavujes ci chces zobrazit RowLine,ColLine atd. tusim sa to vola Options alebo tak. ca sa tyka vlastneho vykreslovania, na to sluzi events onDrawDCell kde zadas:
nazov_stringgrid.canvas.brush.color := farba;
nazov_stringgrid.canvas.fillrect(nazov_stri nggrid.cellrect(ACol,ARow));
kde ACol a ARow ti vracia onDrawCell alebo pouzijes vlastne cisala :o)
to iste sa da aj textom a to cez canvas.textRect alebo Text Out, podla toho ci chces nastavit aj farbu pozadia pisma
moze byt alebo este nieco :o)
Triskac
To znie zaujímavo, niekedy sa s tým pohrám.