Okno opcji w formie drzewa i panelu z opcjami

0

Heyah banana!

Chcę zrobić okno opcji z dość sporą ilością tychże. Chcę podzielić je kategoriami i zamiast starej szkoły zakładek chciałem pójść nowszym trendem i zrobić po lewej rozwijane drzewko, a po prawej opcje właściwe. Każdy z Was pewnie widział takie coś, dla przykładu, opcje Visual Studio:
user image

Można oczywiście podejść do tego w najłatwiejszy sposób, dla każdego zestawu opcji osobny panel i na nim elementy, ale tworzenie tego w design time to koszmar - panele się przysłaniają, żeby coś zmienić trzeba używać BringToFront etc.

Innym pomysłem to skorzystanie z Frame - każda z nich jest projektowana jak osobna forma - trochę się robi burdelek w projekcie, ale projektowanie łatwiejsze [nie korzystałem jeszcze z nich, to teoretyczne rozważania].

Samo drzewo to komponent TreeView.

Czy macie jakiś sprawdzony i dobry sposób na budowanie takich opcji?

0

Właściwie to nie mam, ale pierwsze co mi przyszło do głowy to właśnie Frame - wygodnie, łatwo i dość szybko, a bałagan IMHO umiarkowany. Z drugiej strony sam jestem ciekaw...

0

Ja lubię zapisywać wszystko w formie pseudo xml-owego pliku, w którym zapisuję wszystkie informacje dot. działania programu i wyglądu poszczególnych opcji w ustawieniach, np:

<options>
    <interface icon="1">
        <icons-size="32" type="int" desc="rozmiar ikon"/>
        <theme="modern" type="text" desc="schemat"/>
    </interface>
    <advanced icon="2">
        <buffer-size="1024" type="int" desc="rozmiar bufora"/>
        <mode="1" type="combo" values="domyślny|szybki|dokładny" desc="Tryb"/>
    </advanced>
</options>

i później to parsuję do struktury drzewiastej, z której korzystam w programie. A panel opcji generuję dynamicznie na podstawie drzewa - jeśli tag zawiera elementy potomne, to jest umieszczany w TreeView. Jeśli użytkownik zaznaczy jakąś pozycję w TreeView, to w panelu obok są generowane kontrolki reprezentujące zawartość danego elementu. type określa rodzaj kontrolki: w tej chwili używam tylko ComboBoxów, CheckBoxów i Editów, więc sobie pozwalam na switch(type) case ... ale myślę nad czymś elastyczniejszym.

Źródeł nie podam, bo używam własnego, alternatywnego parsera, który akceptuje konstrukcje:
<znacznik="wartość"> i daje kilka funkcji do obsługi opcji nie udostępniając w zamian praktycznie nic zgodnego ze standardem. Ale i tak jestem o jego kod okropnie zazdrosny ;P (z drugiej strony nie ma takiej potrzeby, tu chodzi tylko o ideę - wygląd w xml i na jego podstawie generowanie formy w runtime)

0

Sama idea ciekawa, ale tworzenie bardziej zaawansowanych opcji to grzebanie się z zawiłym XMLem. Ja jednak postawiłbym na coś, co można bez problemu zaprojektować w design time.

[edited]
W sumie jakoś omijałem komponenty z sekcji Win3.1 [jakoś grozą wieje :P], ale Thomashek na IRCu zaproponował TNotebook i wydaje się, że to będzie to. Działa jak TPageControl ale bez zbędnych guzików.

0

Marooned: na Twoim miejscu zainteresowałbym się komponentem Virtual Treeview. Zanim powiesz "łee komponent - nie chce mi się go instalować, wolę standardowe kontrolki" powiem, że komponent ten przyda się nie raz. Niestety jest on dość skomplikowany, ale liczba możliwości jest bajeczna.

Tutaj mała galeria z możliwościami (wszystkie te programy zostały napisane na silniku Virtual Treeview):
http://www.delphi-gems.com/VirtualTreeview/VTGallery.php

Co prawda nie wiem do końca czy można robić w nim takie opcje jak napisałeś, ale jedno ze zdjęc przedstawia się tak:

user image

A tutaj link do strony: http://www.delphi-gems.com/VirtualTreeview

pozdrawiam

0

Nie raz spotykałem się z tym komponentem i wiem, że jest świetnie napisany i rozbudowany. Dzięki za przypomnienie, może kiedyś się przyda, jednak na panelu opcji chcę mieć większą dowolność i.. potwierdzam - to, co zaproponował Thomashek spełnia w 100% moje oczekiwania, czyli TNotebook. Fakt, że wklejając komponent na stronie x, wkleja się on na stronie sąsiedniej, ale to już się nauczyłem i wklejam na innej niż ma się on pojawić :D

Dzięki za sugestie. Sprawa rozwiązana :)

0

Cześć

Czy moglibyście mi podpowiedzieć jak wykonać drzewko z opcjami po lewej stronie, chciałbym wykorzystać komponent TNoteBook ale za nic nie wiem jak to razem połączyć

1 użytkowników online, w tym zalogowanych: 0, gości: 1