Wie erstelle ich eine Grafische Oberfläche aus mehreren einzelnen Modulen ?



  • Hi,

    ich möchte eine grafische Oberfläche erstellen die man sich wie eine art webseite vorstellen kann. oben eine feste frame in der datum, zeit usw. steht.
    links soll eine navigationsleiste sein. die navigationsleiste enthält nun mehrere buttons die wie links wirken sollen. bei klick auf denn jeweiligen link soll in der main fram das jeweilige modul geladen werden.

    ich versuche das mal in ascii form grafisch darzustellen:

    --------------------------------------------------------
    |                                                       |
    |           Datum, Zeit ...                             |
    |-------------------------------------------------------|
    |         |                                             |
    |         |   hier sollen die die verschiedenen         |
    |  btn1   |                                             |
    |  btn2   |   masken stehen ....                        |       
    |  ...    |                                             |
    |  btn n  |                                             |
    |         |                                             |
    |         |                                             |
    |         |                                             |
    |         |                                             |
    |         |                                             |
    |         |                                             |
    |         |                                             |
    ---------------------------------------------------------
    

    nun gut, angenohmen man klickt auf btn1 soll die maske1 angezeigt werden,
    klickt man auf button2 die maske2 usw. ....

    ich habe das voher so gelöst das das ich auf eine form 3 pannels wie oben gelegt habe. die obere frame und die linke frame sind fix die mittlere main frame soll allerdings dynamisch sein und die jeweiligen module die benötigt sind einblenden. dies habe ich bis derweilen so gelöst indem ich beim initialisieren des formulars (onshow) alle weiteren formulare dem panel zugewiesen haben z.b.
    form2->parent = pannelmain;
    form3->parent = pannelmain;
    form4->parent = pannelmain;
    ...
    formN->parent = pannelmain;

    auf die formulare kann man dann per klick auf denn jeweiligen button zugreifen:

    z.B.
    button1 click()
    form1->visible=true;
    form2->visible=false;
    form3->visible=false;
    ...
    form4->visible=false;

    aber da diese formulare wieder unterformulare haben können

    z.b. form1 -> form11
    form11 -> form111 ... usw.

    sind das eine menge formulate mit grafiken die bei jedem start der software geladen werden müssen. auch das bei dem klick auf denn button immer alle formulare bis auf das gewünschte mit visible false angegeben werden müssen find ich nicht sehr schön. (problem ist aber das der user z.b. button1 klickt und pannel main zeigt form1 an. nun geht er aber nicht auf form1 auf abbrechen sondern klickt gleich auf button2 und läd in das pannel ein weiteres formular drüber. daher die visible false geschichte ...).

    naja ich hoffe ihr wisst ungefähr was ich meine und was mein problem ist.
    warum poste ich das jetzt alles hier rein?

    ich hoffe das mich ihrgendjemand aus dieser misslichen lage bereien kann.
    ich habe das forum durchsucht, in büchern nachgelesen, gegoogled aber konnte ihrgendwie niergeds das finden was ich ihrgendwie suche.

    wie macht ihr das bei euren anwendungen ?
    welche komponenten sollte ich dafür verwenden ?
    wie erfolgen die aufrufe (ev. kleines codebeispiel).

    da ich leider der einzige entwickler im hause bin kann ich mich nurnoch an euch wenden. ich hoffe jemand hat so ein problem schonmal gehabt und kann mir eine passende lösung sagen. im voraus schonmal ein rießen dankeschön für alle antworten!!!!!!!!!

    gruß
    binary



  • Nimm Frames und setze dann einfach MeinPanel->Parent = MeinFrame.



  • Beim Programmstart z.B. mittels TList eine Liste mit Zeigern auf die einzelnen Module anlegen. Beim Klick auf den jeweiligen Butto/Link (hier TabControl/TabIndex) die Liste durchgehen, die unerwünschten Module aus- und das gewünschte Modul einblenden.

    void __fastcall TformMain::TabControl1Change(TObject *Sender)
    {
      for (int i = 0; i < frameList->Count; i++)
      {
        TFrame *frm = (TFrame*)frameList->Items[i];
        i == TabControl1->TabIndex ? frm->Show() : frm->Hide();
      }
    }
    

Log in to reply