Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: konstante Arrys Kategorie: Programmierung (von olaf - 24.01.2007 16:03)
Als Antwort auf konstante Arrys von Steffan - 23.01.2007 22:23
Ich nutze:
C-Control II Station, OSOPT_V2
Hallo Steffan,
ich kenne keine funktion wie Array.lenght in c2 die du hier benötigst um die vom
compiler bestimmte Länge zu ermitteln.
Aber programatisch könnte man es entweder durch eine spezielle array end Markierung lösen (z.B. "-1"),
bis zu welcher deine Schleife dann läuft.
In meiner Haussteurung habe ich die gesamte Menü Darstellung und Navigation allerdings sehr generisch
gelöst. Dort exisistieren mehrere grosse arrays, die menu-item tags, typen, ressourcen
und unter menü-strukturen definieren.
Die algorithmen sind generisch und rekursiv, so dass sich (theoretisch) beliebig tiefe menü
strukturen aufbauen lassen. Die array Konstanten sehen dann so aus:


const MENU_TAGS[]     = "Hauptmenü", // 0
                        "untermenü1",  // 1
                        "untermenü2",  // 2

const MENU_TYPE[]     = MENUITEM_SUBMENU,                //0
                        MENUITEM_SUBMENU,                //1
                        MENUITEM_SUBMENU,                //2

const MENU_RESOURCES[]= 0,                                 //0
                        0,                                 //1
                        0,                                 //2
                        0,                                 //3

const MENU_SUBSTART[] = 1,                                 //0
                        10,                                //1
                        20,                                //2
 
const MENU_SUBEND[]   = 6,                                 //0
                        15,                                //1
                        22,                                //2
 



das hei�t in dem fall das ein Menüeintrag ein untermenü beschriebt, so sind an der selben index position
von SUBSTART und SUBEND die offsets in das untermenü definiert.
Die Algorithmen für anzeige und navigation bzw. aktionsauslösung im menü arbeiten damit lediglich
auf dieser struktur und sind rekursiv.


function navigateMenu( byte pcfLCD, byte startingPos ) returns byte
{
 menuPos pos;

 pos.firstDisplayedLine = c.MENU_SUBSTART[ startingPos ];
 pos.selectedLine       = c.MENU_SUBSTART[ startingPos ];
 pos.startingLine       = c.MENU_SUBSTART[ startingPos ];
 pos.endingLine         = c.MENU_SUBEND[ startingPos ];
 pos.refreshNeeded      = 1;


zur Anzeige des Hauptmenüs wird diese funktion dann einfach von dem für das betreffende Display
zuständigen thread so aufgerufen:

  menu.navigateMenu(pcfLCD,0);

jeder Untermenü Aufruf ruft die funktion rekursiv auf.

Damit gibt es nirgendwo eine Schleife oder ähnliches die über die arraystrukturen läuft,
sondern sie beschrieben sich selbst.
Das gesamte menü sowie die Menü/Untermenüstruktur wird lediglich über die Arraykonstanten definiert.

Das nur so als Tip. Funktioniert bei meiner Lösung schon seit 4 Jahren wunderbar und die Architektur
hat schon entliche Erweiterungen "überlebt".

... sorry code kann ich leider nicht zur Verfügung stellen..

GruÃ? Olaf



> Hallo,
>
> ich hab heute mal intensiv Lektüre und natürlich auch das Forum zu einer Problemstellung
> zu konstanten Arrays befragt, aber leider doch keine Antwort gefunden. Und zwar geht es um
> folgendes Problem:
>
> Ich habe konstante benannte Arrays deklariert und möchte nun in meinem Programm die Anzahl
> der Elemente ermitteln. Ich komm hier einfach nicht auf eine passende Idee. Das sieht ungefähr
> so aus:
>
> const MENUE1[] = "Füllen", "Michen", "Leeren";
> const MENUE2[] = "Heben", "Senken";
> ...
>

> Nun möchte ich auf die einzelnen Elemente der Arrays zugreifen. Dazu durchlaufe ich eine Schleife
> und lese die Elemente über den Index aus.
>
> str = MENUE1[i];
>

> Da die einzelnen Arrays eine unterschiedliche Anzahl von Elementen besitzen, brauche ich dazu
> die Anzahl der Elemente, sonst kommt es zu einer Verletzung des zulässigen Indexbereiches.
> In VBA gibt es zu diesem Problem eine Lösung z.B. mit "UBound()".
> Gibt es hier auch so etwas ähnliches?
>
> Wäre super, wenn mir jemand weiterhelfen könnte.
>
> Viele Grü�e
> Steffan


    Antwort schreiben


Antworten:

Re: konstante Arrys (von Michi - 26.01.2007 9:54)
Re: konstante Arrys (von Steffan - 24.01.2007 19:11)