Avatar billede davidchristensen Praktikant
07. januar 2002 - 18:24 Der er 35 kommentarer og
2 løsninger

Dynamisk popupmenu via array.. : )

Hey Folkens. Nu kommer jeg halsene igen med en for mig svær nød.. :)

Jeg har et array der består af 1,2,3,4. Jeg vil nu gerne have at der ud fra disse oplysninger skal genereres en knap for hver enhed, i et movieklip, som senere skal fungere som en popup-menu.

Jeg kan jo godt finde ud af at lave en popupmenu - men at få indeholdet gjort dynamisk er jo lidt en kunst.

Jeg må indrømme, at jeg ikke er helt klar over hvad det er jeg egentlig leder efter, men jeg forestiller mig et script jeg kan sætte på et MC, som vil være i forbindelse med et array og som vil generere en ny knap i MC\'et for hver punkt i arrayen. Knapperne skal stables oven på hinanden.

I hver knap er der så et tekstfelt, som så skal indeholde det enkelte punkt i den pågældende array.

(Derudover kunne det være skrapt, hvis scriptet faktisk skifter mellem at generere henholdsvis en lys og en mørk knap.)

Skrig, hvis der er noget I ik\' forstår.. Jeg bliver ved med at kage rundt i mine forklaringer.. :)

David
-


Avatar billede zred Nybegynder
07. januar 2002 - 18:28 #1
SKRRRIIIIIIIIIIIIG!

fatter - af det du skriver - forklar bedre
Avatar billede davidchristensen Praktikant
07. januar 2002 - 18:28 #2
..I skal forøvrigt også være velkomne til at fortælle mig hvis jeg er for langt ude i skoven nu.. :) Dether vil være optimalt, hvis jeg kan lære at generere knapper ud fra et array og styrer hvor de knapper skal ligge i et MC.. :D

Hu hu, jeg er happy..
Avatar billede nikolajdu Nybegynder
07. januar 2002 - 18:34 #3
david - Bare ignorér zred - Han keder sig vidst bare lidt. :))

http://www.eksperten.dk/spm/155541

Faktisk forstår jeg udemærket hvad du er ude efter, dog kan jeg ikke komme med et eks før i morgen :( - Andre når det sikkert før mig :))

/Nikolaj
Avatar billede davidchristensen Praktikant
07. januar 2002 - 18:35 #4
Okay.

Først har jeg to knapper. En lysegrå og en mørkegrå. Og så har jeg et MC og et array.

Mit array består af 1,2,3,4. Jeg vil nu gerne have et script der starter med at sætte en lysegråknap - og tekstfeltet i denne, skal indeholde første enhed fra array.

Hvis der er en enhed til (hvilket der jo typisk vil være i et array) vil scriptet nu stable den mørkegrå knap ovenpå den lysegrå og skrive hvad der står som den næste information i array i dennes tekstfelt.

Med tredje information fra array tager den så den lysegrå igen - og så fremdeles.

Alt dette forgår i sit eget MC, som man kan kalde ved at trykke på en knap - præcis som en popupmenu fungere.

:)
Avatar billede davidchristensen Praktikant
07. januar 2002 - 18:39 #5
Hey, Nikolaj! Dether er nu ikke en ting jeg sådan regner med at få til at fungere sådan bare på en aften.. Jeg vil meget gerne høre på hvad du har af guldkorn. -Vil gerne sole mig i dit forstands lys (er det ik\' dét Blomme siger i Det Forsømte Forår? :) Lad mig blive blændet..

Håber iøvrigt du har det smukt.. *S*

David
-
Avatar billede nikolajdu Nybegynder
07. januar 2002 - 18:41 #6
Du kan iøvrigt følge med her, hvor de også dublikerer movieclips.

http://www.eksperten.dk/spm/155033

Du sætter så et dynamisk textfelt ind i dit movieclip og giver det variablen \"minTekst\"


minArray = New Array(\"tekst1,\"tekst2\",\"tekst3\",\"tekst4\");

for (i=0;i<minArray.length;i++){

_root[\"mitMovieclip\"+i].minTekst = minArray[i];

}

Eller sådan der omkring - Har ingen mulighed for at teste det af her :))

/Nikolaj

Når jeg læser dine roser, så er det jo godt at sådan noget aldrig har haft det med at stige mig til hovedet ;-)
Avatar billede gotcha Nybegynder
07. januar 2002 - 19:51 #7
Altså når du klikker på en knap, så skal der dukke et movie clip frem med den rigtige farve og rigtige tekst? Er det så bare det næste movie clip i arrayet eller hvordan styres det, hvilket movie clip, der skal dukke frem?
Avatar billede gotcha Nybegynder
07. januar 2002 - 20:17 #8
Hvis det næste vindue bare skal dukke op, når du klikker på en knap, så har jeg lige lavet et eksempel (røvgrimt, men gør det, du beder om). Hvad er din email?
Avatar billede gotcha Nybegynder
07. januar 2002 - 20:59 #9
Fuck det, jeg har uploadet den på http://www.hhbk.subnet.dk/popWin.fla
Avatar billede gotcha Nybegynder
07. januar 2002 - 21:05 #10
Avatar billede barklund Nybegynder
09. januar 2002 - 11:44 #11
Jeg forstår det popupmenuer således, at når man ruller over eller klikker på et menupunkt, kommer underpunkterne frem... Er det rigtigt forstået?

Disse underpunkter skal så generes dynamisk - både i antal og tekst - udfra et array. Desuden skal underpunkterne skifte i farve mellem lysegrå og mørkegrå... Altså alt i alt en dynamisk popupmenu. Er det rigtigt forstået? Correct if I\'m wrong...

Før jeg roder mig ud i noget kode, så svar lige på dette... Måske er jeg way off...

/Barklund
Avatar billede davidchristensen Praktikant
09. januar 2002 - 13:29 #12
Hey Barklund. :)

Jeps, det her helt rigtigt det du er inde på dér..

David
-
Avatar billede nikolajdu Nybegynder
09. januar 2002 - 13:51 #13
Lav et movieClip og giv det instance navnet \"clip\". Inde i det movieClip har du så et dynamisk textfelt med variablen \"tekst\".

Indsæt så følgende:

minArray = new Array(\'navn1\', \'navn2\', \'navn3\', \'navn4\', \'navn5\');
offsetHeight = _root.clip._height;
offsetWidth = _root.clip._width;
for (i=0; i<minArray.length; i++) {
    duplicateMovieClip (\"clip\", \"clip\"+i, i);
    _root[\"clip\"+i]._y = _root[\"clip\"+(i-1)]._y+offsetHeight;
    _root[\"clip\"+i].tekst = minArray[i];
}

/Nikolaj
Avatar billede nikolajdu Nybegynder
09. januar 2002 - 13:52 #14
Nåja glemte farveskiftet :))
Avatar billede barklund Nybegynder
09. januar 2002 - 14:51 #15
Jeg ville have en anden approach... For det første kan antal af menupunkter, der kommer til at have underpunkter vel også variere så første defineres et clip med et baggrundsclip, der blot har en hvid baggrund og som inden i menuclippet hedder \"bg\". I menuclippet laves et tekstfelt, der hedder \"text\". Altså et clip indeholdende et tekstfelt og indeholdende et clip der kun indeholder en hvid kasse. Det ydre clip placeres på arbejdsområdet og kaldes \"clip\" og inden i dette er baggrundsclippet, der hedder \"bg\". Så langt så godt.

-- actions i frame

Dernæst kodes et hovedarray i en frame action i _root sammed med farverne:

menu_color = \"0xFFFFFF\";
sub_color1 = \"0xBBBBBB\";
sub_color2 = \"0x555555\";
mainArray = [[\"hovedpunkt_1\", \"underpunkt_1_1\", \"underpunkt_1_2\"], [\"hovedpunkt_2\", \"underpunkt_2_1\"], [\"hovedpunkt_3\", \"underpunkt_3_1\", \"underpunkt_3_2\", \"underpunkt_3_2\"], [\"hovedpunkt_4\", \"underpunkt_4_1\", \"underpunkt_4_2\"]];

Altså 4 punkter med henholdsvis 2, 1, 3 og 2 underpunkter...

-- actions på \"clip\"

Dernæst placeres på det indsatte \"clip\" følgende actions (jeg har ikke flash ved hånden, så jeg går bare ud fra, at det virker):

onClipEvent(load) {
    if (_name eq \"clip\") {
        _visible = 0;
        for (var i = 0; i < _root.mainArray.length; i++)
            this.duplicateMovieClip(\"main_\" add i+1, i+1);
    } else {
        navn = _name.split(\"_\")[0];
        xpos = int(_name.split(\"_\")[1]);
        if (name eq \"main\") {
            _x += (xpos-1)*_width;
            (new Color(this.bg)).setRGB(_root.menu_color);
            text = _root.mainArray[xpos-1][0];
            open = 0;
        } else {
            ypos = int(_name.split(\"_\")[2]);
            _y += ypos*_height;
            (new Color(this.bg)).setRGB(_root[\"sub_color\" add (xpos%2+1)]);
            text = _root.mainArray[xpos-1][ypos];
        }
    }
}

onClipEvent(mouseDown) {
    if (navn eq \"main\" && this.hitTest(_root._xmouse, _root._ymouse, 1)) {
        if (!open) {
            for (var i = 1; i < _root.mainArray[xpos-1].length; i++)
                this.duplicateMovieClip(\"sub_\" add xpos add \"_\" add i, xpos*100+i);
        } else {
            for (var i = 1; i < _root.mainArray[xpos-1].length; i++)
                removeMovieClip(\"sub_\" add xpos add \"_\" add i);
        }
    } else if (navn eq \"sub\" && this.hitTest(_root._xmouse, _root._ymouse, 1)) {
        for (var i = 1; i < _root.mainArray[xpos-1].length; i++) {
            subname = \"sub_\" add xpos add \"_\" add i;
            if (subname ne _name)
                _root[subname].removeMovieClip();
        }

        //function to execute when point under text is clicked

        this.removeMovieClip();
        }
    }
}

Som sagt har jeg ikke Flash og kan ikke lige overskue, om det skulle virke...

/Barklund
Avatar billede barklund Nybegynder
09. januar 2002 - 14:56 #16
Der er lidt småfejl i det ovenstående... Rettelse:

onClipEvent(load) {
                          if (_name eq \"clip\") {
                              _visible = 0;
                              for (var i = 0; i < _root.mainArray.length; i++)
                                  this.duplicateMovieClip(\"main_\" add i+1, i+1);
                          } else {
                              navn = _name.split(\"_\")[0];
                              xpos = int(_name.split(\"_\")[1]);
                              if (name eq \"main\") {
                                  _x += (xpos-1)*_width;
                                  (new Color(this.bg)).setRGB(_root.menu_color);
                                  text = _root.mainArray[xpos-1][0];
                                  open = 0;
                              } else {
                                  ypos = int(_name.split(\"_\")[2]);
                                  _y += ypos*_height;
                                  (new Color(this.bg)).setRGB(_root[\"sub_color\" add (xpos%2+1)]);
                                  text = _root.mainArray[xpos-1][ypos];
                              }
                          }
                      }

                      onClipEvent(mouseDown) {
                          if (navn eq \"main\" && this.hitTest(_root._xmouse, _root._ymouse, 1)) {
                              if (!open) {
                                  for (var i = 1; i < _root.mainArray[xpos-1].length; i++)
                                      this.duplicateMovieClip(\"sub_\" add xpos add \"_\" add i, xpos*100+i);
                              } else {
                                  for (var i = 1; i < _root.mainArray[xpos-1].length; i++)
                                      _root[\"sub_\" add xpos add \"_\" add i].removeMovieClip();
                              }
                          } else if (navn eq \"sub\" && this.hitTest(_root._xmouse, _root._ymouse, 1)) {
                              for (var i = 1; i < _root.mainArray[xpos-1].length; i++) {
                                  subname = \"sub_\" add xpos add \"_\" add i;
                                  if (subname ne _name)
                                      _root[subname].removeMovieClip();
                              }

                              //function to execute when point under text is clicked

                              this.removeMovieClip();
                              }
                          }
                      }



Derudover kom \"underpunkt_3_3\" til at hedde \"underpunkt_3_2\" ved en fejl... Men disse navne er jo blot midlertidige...

Prøv dette...

/Barklund
Avatar billede barklund Nybegynder
09. januar 2002 - 15:03 #17
Formatteringen gik vist galt, selvom jeg blot markerede det foregående og indsætte det igen...

Hmm...

/Barklund
Avatar billede davidchristensen Praktikant
09. januar 2002 - 18:02 #18
Uh, jeg roder lidt rundt i det, her.. Hvordan giver man et tekstfelt et navn? Jeg har iøvrigt givet den en parameter som input-tekst. Er det ikke rigtigt?

David
-
Avatar billede gotcha Nybegynder
09. januar 2002 - 21:55 #19
Nej, det skal være et dynamisk tekstfelt :)

Prøv at kigge på http://www.dhtmlcentral.com/script/index.asp - det er bare menuen øverst (den blå bar), du vil have lavet, men bare med 1 niveau (i så fald har jeg åbenbart fuldstændig misforstået dit spørgsmål)?

Mvh Morten
Avatar billede nikolajdu Nybegynder
10. januar 2002 - 09:48 #20
Nej du skal vælge \"dynamisk textfelt\" og de får ikke noget navn - De får en variabel - Det er der du skal skrive \"tekst\".

/Nikolaj
Avatar billede davidchristensen Praktikant
10. januar 2002 - 14:00 #21
Ok, dynamisk textfelt. Læste om textfelter igår, og fandt os\' ud af at de får en variabel og ik\' et egenligt navn, så.. :)

Gotcha >> Det er en omvendt dropdownmenu jeg gerne vil lave, ja (en popup-menu) men samme princip. Og, nej, der skal ikke nødvendigvis kun være et niveau, men antal niveauer deffineret i et array.. :)

Nikolaj og folk>> Jeg sad og læste i Flash 5 manualen og så at man kan linke til et .txt-dokument, som så indeholder en variabel. Vil der være en smartere måde at lave sådan en menu, end ud fra et array? Jeg mener - kunne man lave dether sådan udfra en simpel struktur i et .txt-dokument hvor man for eksempel bare skriver (lige ud ad landevejen):

Menu1=\"Start Menu\"
  Menu1.1=\"Indstillinger\"
  Menu1.2=\"Programmer\"
      Menu1.2.1=\"Flash 5\"
      Menu1.2.2=\"Word\"
  Menu1.3=\"Luk Computeren\"

(For lige at bruge en simpel version af Windows\' startknap som eksempel)

-Eller noget i den stil?... :)

David
-



Avatar billede gotcha Nybegynder
10. januar 2002 - 19:55 #22
Det mest nærliggende ville være at formattere indholdet vha. XML, da filens struktur ligner strukturen på den menu, som du efterspørger.
Avatar billede davidchristensen Praktikant
10. januar 2002 - 20:12 #23
Okay.. [Klør sig i nakken] ...
Avatar billede gotcha Nybegynder
10. januar 2002 - 20:17 #24
Finder lige et eksempel...
Avatar billede gotcha Nybegynder
10. januar 2002 - 20:54 #25
Jeg kunne ikke lige finde et passende eksempel, men har er i hvert fald en menu, der har flere niveauer. Kan ikke lige uploade i øjeblikket, og da jeg ikke har din email, så gå ind på http://www.jzway.com . Vælg den forrige udgave (tror nok, det er version 3) og vælg Archive. Under en af månederne (vist nok juni) findes menuen. Håber det hjælper :)
Avatar billede davidchristensen Praktikant
10. januar 2002 - 21:04 #26
Holdkæft det ser godt ud! :) Men jeg kan ik\' lige finde det..

Min email: post@dlcd.dk ;)

David
-
Avatar billede gotcha Nybegynder
10. januar 2002 - 21:12 #27
Så har du fået post :)
Avatar billede davidchristensen Praktikant
10. januar 2002 - 21:15 #28
Jep. Kigger på det imorgen.

Tak. :)

David
-
Avatar billede davidchristensen Praktikant
19. januar 2002 - 18:59 #29
Æhm.. Er her nogen? :)

David
-
Avatar billede barklund Nybegynder
20. januar 2002 - 12:05 #30
Æhm... Ja. Hvorfor?

Jeg kan se, at mit forslag var forkert... Bare afvis det... Vil du have et nyt svar, der dækker dine behov efter at du faktisk har forklaret, præcis hvilken type menu, du gerne vil have...?

/Barklund
Avatar billede gotcha Nybegynder
20. januar 2002 - 12:08 #31
Har du prøvet at redigere i filen?
Avatar billede davidchristensen Praktikant
21. februar 2002 - 22:28 #32
Barklund, nu her jeg siddet fedtet med dether, men det virker sørme ik'.. Eller os' er det mig der er en spade; men jeg har virkeligt gjort alt for at forsøge på at følge din forklaring slavisk..

Jeg tænkte om du ikke kunne lave en .FLA-fil du vil sende til mig, så jeg kan se hvad jeg gør forkert? :)

Nu vil jeg nemlig meget gerne lære dether.. Og bare rolig, der kommer mange flere spørgsmål fra mig ang. at deffinere menupunkter osv. via arrays fra mig. Jeg skal bare lige ha' kringlet denher først.. :)

David
-
Avatar billede davidchristensen Praktikant
28. februar 2002 - 21:49 #33
Nu rykker vi lige spørgsmålet til http://www.eksperten.dk/spm/179271 Men egentlig kan jeg så ikke lige se om Nikolaj faktisk har givet mig et svar allerede?..
Avatar billede davidchristensen Praktikant
28. februar 2002 - 21:51 #34
Nå, nej.. Distanationen/varaiablen er jo ikke dynamisk..
Avatar billede davidchristensen Praktikant
28. februar 2002 - 21:52 #35
Smid nogle svar allesammen! :D
Avatar billede davidchristensen Praktikant
08. september 2002 - 15:42 #36
..
Avatar billede davidchristensen Praktikant
08. september 2002 - 15:43 #37
Så lukker vi lige..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester