mojaSymfonia FORUM
https://forum.mix-soft.pl/

dynamiczne kontrolki button
https://forum.mix-soft.pl/viewtopic.php?f=15&t=5269
Strona 1 z 1

Autor:  iluvathar [ 2013-10-31, 09:57 ]
Tytuł:  dynamiczne kontrolki button

Witam
Poszukuje informacji czy z poziomu AmBasic możne stworzyć formularz posiadający dynamiczną listę kontrolek button.
Idealnym rozwiązaniem jest sytuacja gdzie każdy z dynamicznych buttonów byłby podpięty pod inną funkcję.

Niestety tak się chyba nie da więc spróbowałem w ten sposób ale cały czas dostaje błąd ominięcia definicji zmiennej.


Kod:
dispatch grid
string sTabOpis(4) = "AAA", "BBB", "CCC", "DDD"
int iTabClick(4) = 0,0,0,0

record rLoopRec
   string name_[100]
   
   int sub openNewMsg()
      select case name_
         case "AAA"
            message sTabOpis(1)
            openNewMsg = 1
         case "BBB"
            message sTabOpis(2)
            openNewMsg = 2
         case "CCC"
            message sTabOpis(3)
            openNewMsg = 3
         case "DDD"
            message sTabOpis(4)
            openNewMsg = 4
         case "X"
            message "Close"
            openNewMsg = -1
         case else
            message "ERR"
            error ""
      endselect
   endsub
endrec

int sub Click()
   message "ClickMe"
   Click = 2
endsub



rLoopRec rLoop(4)
rLoop(1).name_ = "AAA"
rLoop(2).name_ = "BBB"
rLoop(3).name_ = "CCC"
rLoop(4).name_ = "X"

int sub countButtons(string sOpis, int y, rLoopRec rValue)
        iTabClick(y) = Button sOpis, 600, 10 + (30 * (y - 1)), 100, 25, rValue.openNewMsg()
endsub

int sub loopButtons(int iSize)
    int iLoop
    for iLoop = 1 to iLoop > iSize
      countButtons(sTabOpis(iLoop), iLoop, rLoop(iLoop))
   next iLoop
endsub


int sub Window()
   //Fotmularz
   form "opis", 800, 300
        Control "Grid", grid, 4, 4, 586, 215
        //Metoda generująca listę buttonyów
        loopButtons(size(sTabOpis))
   Button "&Anuluj",400, 250, 100, 25, -1
   int result = execform(OnCommand)
   
   
   
   //openNewWindow(result)
   //Rezultat operacji otwarcia formularza
   select case result
      case -1
         error ""
   endselect

endsub

Int sub OnCommand(Int id, Int msg)
endsub



Window()



Chciał bym aby każdy z dostępnych buttonów pełnił różną funkcję.

Prosił bym o informację czy takie rozwiązanie jest wykonalne, może jakiś przykład.

Autor:  rafal [ 2013-10-31, 17:04 ]
Tytuł:  Re: dynamiczne kontrolki button

Jak dla mnie to zbyt wysoki poziom. Nie bardzo byłem w stanie przeanalizować co jest do czego.

Proponuję obsłużyć Twoje przyciski w OnCommand()

Kod:
dispatch grid
string sTabOpis(4) = "AAA", "BBB", "CCC", "DDD"
int iTabClick(4) = 0,0,0,0

record rLoopRec
   string name_[100]
   
   int sub openNewMsg()
      select case name_
         case "AAA"
            message sTabOpis(1)
            openNewMsg = 1
         case "BBB"
            message sTabOpis(2)
            openNewMsg = 2
         case "CCC"
            message sTabOpis(3)
            openNewMsg = 3
         case "DDD"
            message sTabOpis(4)
            openNewMsg = 4
         case "X"
            message "Close"
            openNewMsg = -1
         case else
            message "ERR"
            error ""
      endselect
   endsub
endrec

int sub Click()
   message "ClickMe"
   Click = 2
endsub

rLoopRec rLoop(4)
rLoop(1).name_ = "AAA"
rLoop(2).name_ = "BBB"
rLoop(3).name_ = "CCC"
rLoop(4).name_ = "X"

int sub countButtons(string sOpis, int y, rLoopRec rValue)
        iTabClick(y) = Button sOpis, 600, 10 + (30 * (y - 1)), 100, 25, 1
endsub

int sub loopButtons(int iSize)
    int iLoop
    for iLoop = 1 to iLoop > iSize
      countButtons(sTabOpis(iLoop), iLoop, rLoop(iLoop))
   next iLoop
endsub

int sub Window()
   //Fotmularz
   form "opis", 800, 300
        Control "Grid", grid, 4, 4, 586, 215
        //Metoda generująca listę buttonyów
        loopButtons(size(sTabOpis))
   Button "&Anuluj",400, 250, 100, 25, -1
   int result = execform(OnCommand)
   
   //openNewWindow(result)
   //Rezultat operacji otwarcia formularza
   select case result
      case -1
         error ""
   endselect

endsub

int sub OnCommand(Int id, Int msg)

   // sprawdzamy od który przycisk został użyty
    int iLoop
    for iLoop = 1 to iLoop > Size(iTabClick)
   
      if iTabClick(iLoop) == id then
         message using "Wykonuje Akcje dla przycisku %s" + lf, sTabOpis(iLoop)
      endif      
 
   next iLoop
      
endsub

Window()

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/