Page 1 of 1

Errore in array...forse...!!!

PostPosted: Wed Jul 19, 2006 5:13 pm
by Silvio
in una finestra ho creato una serie di bottoni creando prima un array
Code: Select all  Expand view
LOCAL OmbrxFila :=20
LOCAL FileOmbr := 6

totarray :=  OmbrxFila*FileOmbr
   aBtn := Array(totarray)


Ho fatto creare i bottoni con un ciclo for next
Code: Select all  Expand view
FOR k := 1 TO OmbrxFila




per ogni bottone ho associato un'azione diretta ad una funzione

Code: Select all  Expand view
  cAction := "miazione("+Str(n)+")"
               bAction := {|| &cAction }





questo è il bottone creato ( ho usato tsbutton ma ho provato anche con il semplice button)

Code: Select all  Expand view

  @ Fila,(Col+nPassLarg) SBUTTON  aBtn[n] RESOURCE cbitmap  PIXEL;
               OF oSpiaggia  ;
               FONT oFont2 ;
               CAPTION  cam ;
               COLOR GetSysColor(13), GetSysColor(1)  ;
               TEXT ON_CENTER ;
               NOBOX       ;
               TOOLTIP oemtoansi(cCaption) ;
               ACTION Eval( bAction,cam )




La procedura mi visualizza tutti bottoni sui quali è stampato il numero

Se clicco su ogni bottone mi crea questo errore
Code: Select all  Expand view
Application
===========
   Path and name: C:\work\PRG\WINBEACH\PRENOTA.Exe (32 bits)
   Size:   733,696 bytes
   Time from start: 0 hours 0 mins 3 secs
   Error occurred at: 19/07/2006, 18:31:03
   Error description: Error BASE/1003  Variable does not exist: N

Stack Calls
===========
   Called from: Spiaggia.prg => MIAZIONE(269)
   Called from:  => (b)BEA210(106)
   Called from: Spiaggia.prg => (b)BEA210(160)
   Called from: TSBUTTON.PRG => TSBUTTON:CLICK(804)
   Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0)
   Called from: TSBUTTON.PRG => TSBUTTON:HANDLEEVENT(1308)
   Called from: WINDOW.PRG => _FWH(0)
   Called from:  => WINRUN(0)
   Called from: WINDOW.PRG => TMDIFRAME:ACTIVATE(0)
   Called from: main.prg => MAIN(200)




nella funzione MIAZIONE ()
volevo sapere se cliccando sun un bottone mi deve restituire il numero del bottone

quindi

?aBtn[n]:ccaption

cCaption è il testo cioè la variabile cam ( che poi è il numero del bottone)
altrimenti come devo fare per restituirmi il numero del bottone ?


Grazie in anticipo

Re: Errore in array...forse...!!!

PostPosted: Wed Jul 19, 2006 9:02 pm
by Enrico Maria Giordano
Impossibile capirne la causa esatta senza vedere un PRG ridotto all'osso e compilabile. Immagino che dipenda da qualche errore nella creazione dei codeblocks che probabilmente fanno riferimento in runtime ad una variabile che non è visibile nel punto in cui vengono valutati.

EMG

PostPosted: Wed Jul 19, 2006 10:27 pm
by Silvio
appena lo creo lo inserisco.grazie

PostPosted: Wed Jul 19, 2006 11:59 pm
by Silvio
http://hyperupload.com/download/0287a48 ... G.zip.html

ECCO L'ESEMPIETTO!!!

e scusami per il ritardo ma ho dovuto far uscire il cane....

PostPosted: Thu Jul 20, 2006 7:50 am
by Enrico Maria Giordano
L'esempio non è né ridotto all'osso né compilabile.

EMG

PostPosted: Thu Jul 20, 2006 9:55 am
by Silvio
Guarda che non sia ridotto all'osso ci credo non ho potuto fare di meglio ma che non sia compilabile non è possibile!!!

io l'ho provato ancora adesso con xmate e compila bene

Ti ho messo anche la sbutton.lib ( io uso xharbour 0.99.6x e fw27)

perchè dici che non è compilabile cosa manca , che errore ti da ?

PostPosted: Thu Jul 20, 2006 11:55 am
by Enrico Maria Giordano
Io ho bisogno di un PRG di poche righe che sia compilabile con le FWH standard altrimenti non ti posso aiutare.

EMG

PostPosted: Sun Jul 23, 2006 10:34 pm
by Silvio
ok eccotelo
Code: Select all  Expand view
// esempio  test

#include "fivewin.ch"

//#include "tsbutton.ch"


STATIC aBtn
Function test
Local oWnd,aBtn,totarray,n,fila

LOCAL OmbrxFila := 20
LOCAL FileOmbr := 8
local oFont ,oFont2  , oFont3

// configurazione spiaggia
   totarray :=  OmbrxFila*FileOmbr
   aBtn := Array(totarray)

n    := 1
fila := 60


DEFINE FONT oFont NAME "Ms Sans Serif"  SIZE 0, -10 BOLD
DEFINE FONT oFont2 NAME "Arial" SIZE 0,-16 BOLD
DEFINE FONT oFont3 NAME "Arial" SIZE 0,-10


// visualizzazione delle poltrone

DEFINE WINDOW  oWnd  COLOR GetSysColor(13), GetSysColor(1) ;
TITLE 'Visualizazzione '
FOR i := 1 TO FileOmbr
nPassLarg :=  0
col := 10
FOR k := 1 TO OmbrxFila

               cAction := "miazione("+Str(n)+")"
               bAction := {|| &cAction }
               bWhen   := {|| .T. }
               bValid  := {|| .T.  }
               cCaption := ""


aBtn[n]:=TButton():New( fila, (Col+nPassLarg), cCaption,oWnd,bAction, 40, 40,,oWnd:oFont,,.t.,.f.,"",.t.,bWhen,bValid,.f.)


/*
@ Fila,(Col+nPassLarg) SBUTTON  aBtn[n] RESOURCE "omb3"   PIXEL;
               OF oWnd ;
               FONT oFont2 ;
               CAPTION cCaption ;
               COLOR CLR_WHITE, GetSysColor(15)  ;
               TEXT ON_CENTER ;
               NOBOX       ;
               TOOLTIP oemtoansi(cCaption) ;
               ACTION Miazione(aBtn[n])

                      */
col += 75
                    n++
                   // (oDCam)->(dbskip())
                    NEXT
                    fila +=75
                    NEXT






ACTIVATE WINDOW oWnd MAXIMIZED
return nil






// dovrebbe visualizzare un menupopup vicino al bottone


  function miazione(n)
  Local oMenu, aRect ,nRow,nCol

  cpoltrona:= Val(aBtn[n]:cCaption)
    ?cpoltrona
     aRect := GetClientRect( aBtn:hWnd )

    MENU oMenu POPUP
         MENUITEM "&Nuova prenotazione"     action OCCUPARE(cpoltrona,.t.)
         MENUITEM "&Modifica prenotazione"  action OCCUPARE(cpoltrona,.f.)
         MENUITEM "&Mostra prenotazione"
      ENDMENU
      ACTIVATE POPUP oMenu AT aRect[ 3 ] + 1, aRect[ 2 ] OF  aBtn

      RETURN NIL



// dovrebbe visualizzare il numero della poltrona

FUNCTION OCCUPARE(cpoltrona,lnew)

   Local oDlg


       nmsgbox(cpoltrona)


return nil





Non ti curare della Tsbutton ho messo i comandi per un bottone semplice

Ho compilato e visualizza i bottoni semplici
Vorrei inviare per ogni bottone un menu popup il quale poi inviasse ad una funzione di inserimento ovviamente passando una variabile : il numero del bottone.

PostPosted: Mon Jul 24, 2006 12:09 pm
by Enrico Maria Giordano
Eccoti un esempio funzionante. Spero di aver capito bene cosa ti serviva:

Code: Select all  Expand view
#include "Fivewin.ch"


FUNCTION MAIN()

    LOCAL oWnd

    LOCAL aBtn := {}

    LOCAL n := 1

    LOCAL i, j

    DEFINE WINDOW oWnd

    FOR i = 1 TO 3
        FOR j = 1 TO 3
            AADD( aBtn, MAKEBUTTON( i * 3, j * 9, n++ ) )
        NEXT
    NEXT

    ACTIVATE WINDOW oWnd

    RETURN NIL


STATIC FUNCTION MAKEBUTTON( nRow, nCol, n )

    LOCAL oBtn

    @ nRow, nCol BUTTON oBtn PROMPT "Test";
                 SIZE 50, 50;
                 ACTION MAKEMENU( oBtn, n )

    RETURN oBtn


STATIC FUNCTION MAKEMENU( oBtn, n )

    LOCAL oMenu

    MENU oMenu POPUP
        MENUITEM "Button number?" ACTION MSGINFO( n )
    ENDMENU

    ACTIVATE MENU oMenu AT 0, 0 OF oBtn

    RETURN NIL


EMG

PostPosted: Mon Jul 24, 2006 4:29 pm
by Silvio
si qualcosa del genere ma io devo usare un archivio per vedere se quella poltrona è occupata . nella creazione dei bottoni devo fare già questo controllo ovvero devo mettere un bottone con il disegnino rosso se è occupato o verde se è libera ( la poltrona)
vabbè adesso provo ...

PostPosted: Mon Jul 24, 2006 4:30 pm
by Silvio
con la classe sbutton se uso sbgroup riesco a farlo benissimo se uso un singolo tsbutton non riesco a farlo non so se hai presente la tsbutton ..

PostPosted: Mon Jul 24, 2006 10:43 pm
by Silvio
non ci sono riuscito
mi da sempre lo stessso errore
magari lo carica la funzione del menu ma poi non lo crea e non si tira dietro neanche l'unica variabile che a me serve cioè il numero della poltrona.
io ho usato i due cicli for net per simulare le passerelle tra le sedie ( dove ovviamente passano le maschere) altrimenti non potrei dividerle per settori nella pianta organica.
Pensavo fosse piu' facile ...

PostPosted: Tue Jul 25, 2006 7:33 am
by Silvio
forse ho risolto.... grazie anche e sopratutto a mr Gale....