Autore Topic: Domande varie  (Letto 1020 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Domande varie
« il: 26 Maggio 2009, 16:33:13 »
ciao a tutti, avrei un po' di domandine varie:
1) Quando creo un nuovo programma mi ritrovo sempre questo:
   
Codice: [Seleziona]
PUBLIC SUB _new()
   ......
   End

   Ha una funzione in particolare? Perché io non l'ho mai usato...
2) Dando uno sguardo all'esempio movieplayer, non ho mai capito come si utilizza
   il programma movieplayer reindirizzando tutto alla drawingarea (se non sbaglio
   è stata usata una drawingarea per visualizzare i filmati)
   In pratica non ho capito come si utilizza un componente esterno.
   Ad esempio in C si usa "includere" la libreria necessaria, ma in gambas?
   Se volessi usare gstreamer al posto di mplayer come dovrei fare?
3) Se volessi individuare la posizione del mio mouse in una drawingarea e
   scriverla in due valuebox in cui uno mi dia la posizione delle ascisse ed uno
   quella delle ordinate, come dovrei fare? Mi occorrerebbe utilizzare anche un
   timer che aggiorni i valori dei due valuebox?

Ciao e grazie mille!

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Domande varie
« Risposta #1 il: 27 Maggio 2009, 13:28:27 »
1) Secondo me _new si usa per fare delle cose prima di aprire la Form con Form_Open, tipo impostare dei Settings o delle stringhe o verificare se ci sono le condizioni per aprire  la Form, oppure impostare delle icone a seconda di una determinata situazione. Ho visto il codice dell'IDE di Gambas e mi sembra che Benoit lo usi così.


2) Se guardi il codice di movieplayer vedrai che nella chiamata di EXEC

Codice: [Seleziona]

EXEC ["mplayer", "-wid", lblMoviePlayer.Handle,


c'è l'opzione -wid di mplayer. Da "man mplayer":

Codice: [Seleziona]

It also  supports the standard X11 -geometry option format.
If an external window is specified using the -wid option,
then the x and y coordinates are relative to the top-left
corner  of  the  window rather than the screen.


In pratica si dice a mplayer di "riprodurre il video" sulle coordinate date da lblMoviePlayer.Handle. L'help della proprietà Handle in Gambas:

Codice: [Seleziona]

Control.Handle (gb.qt)

Syntax

PROPERTY READ Handle AS Pointer

Returns the internal X11 window handle of the control.


Per usare gstreamer devi trovare l'equivalente dell'opzione -wid di mplayer.
Per quanto riguarda l'uso di librerie esterne, in Gambas si usa EXTERN (guarda Help).

3) Devi impostare la proprietà tracking su TRUE.

DrawingArea1.Tracking = TRUE

poi usi l'evento MouseMove:

Codice: [Seleziona]

PUBLIC SUB DrawingArea1_MouseMove()

    PRINT Mouse.X
    PRINT Mouse.Y

END


Saluti.

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Domande varie
« Risposta #2 il: 29 Maggio 2009, 21:32:01 »
Grazie mille! Sto studiando sul codice di mplayer (l'opzione -wid non l'ho vista subito nelle man di mplayer....poi l'ho trovata)
quindi il video può essere visualizzato ovunque  e non per forza in una drawingarea? tipo ad esempio in un pannello?
Perdona la mia poca conosenza ma non ho capito a che serve questo: Control.Handle (gb.qt) e la libmovieplayer....
ciao e grazie mille!

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Domande varie
« Risposta #3 il: 30 Maggio 2009, 14:49:40 »
Non so se puoi visualizzare il video in un pannello. Forse la drawing area è
fatta apposta per questi compiti. Però, tentare non nuoce.
Codice: [Seleziona]

 -wid (also see -guiwid) (X11, OpenGL and DirectX only)
              This tells MPlayer to attach to an existing window.  Useful to em-
              bed MPlayer in a browser (e.g. the plugger extension


Questa opzione dice a mplayer di attaccarsi a una finestra esistente.

La proprietà handle restitutisce l'identificativo della drawing area, in modo che "mplayer -wid"
sappia dove "attaccarsi".

la libmovieplayer io non la vedo nel codice :-)

C'è lblMoviePlayer che è il nome dato alla DrawingArea. Quindi lblMoviePlayer.Handle dà l'identificativo per l'opzione -wid di mplayer.  

Ciao.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Domande varie
« Risposta #4 il: 30 Maggio 2009, 16:23:58 »
Gambas è un linguaggio orientato agli oggetti per cui tutto in Gambas è un oggetto. Un form altro non è che un oggetto di tipo classe, per cui eredita le proprietà dell'oggetto classe, tra cui abbiamo appunto i metodi per la creazione di una classe, (_new appunto) che sono pertanto ereditati dal form.
Se inserisci del codice lì dentro, questo codice sarà eseguito non appena istanzi (sempre a livello di codice) un nuovo form durante l'esecuzione del tuo programma partendo da form che hai inserito in fase di editing inizialmente (spero di essere stato chiaro).
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Domande varie
« Risposta #5 il: 30 Maggio 2009, 17:24:58 »
........per niente......

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Domande varie
« Risposta #6 il: 30 Maggio 2009, 23:10:10 »
Un form, come tutti gli oggetti, lo puoi creare anche da codice, non necessariamente lo devi disegnare dall'IDE di Gambas. Puoi però anche preparare un form standard ma anche un form "grezzo" da cui generare poi tutte le istanze che ti servono via codice. In questo form grezzo inserirai nel metodo __New() il codice che verrà eseguito durante la creazione di ogni singola istanza.

Ti allego uno stupidissimo programmino.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Domande varie
« Risposta #7 il: 01 Giugno 2009, 12:10:52 »
quindi in new, inserisco il codice che mi occorre per creare ad esempio una nuova form?
Posso inserirci delle variabili che poi verranno utilizzate da diversi componenti?
Ad esempio se volessi dichiarare una variabile a di tipo intera, ed utilizzarla sia per public sub form_open
e poi per public sub drawingarea_xxxx
in caso di risposta affermativa mi basterebbe impostare la variabile come public, giusto?
dovrei scrivere qualcosa tipo?
Per il movieplayer ancora ho dubbi.....il metodo handle che acchiappa?

Grafica vettoriale:
Ho notato che in gambas3 ci sarà un modulo per la grafica vettoriale (con cairo)
questo vuol dire che sarà solo per le gtk?
Attualmente è impossibile fare grafica vettoriale in gambas, giusto?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Domande varie
« Risposta #8 il: 01 Giugno 2009, 15:53:00 »
Citazione
quindi in new, inserisco il codice che mi occorre per creare ad esempio una nuova form?

In Form__New si inserisce il codice da eseguire quando viene creato il nuovo form. Cosa poi faccia quel codice, dipende da come hai implementato il programma. In teoria potresti anche inserire del codice che se una data variabile globale valga 1, venga creato un form con 2 pulsanti, se vale 2 venga creato un form con 1 tabstrip ecc...
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Domande varie
« Risposta #9 il: 08 Giugno 2009, 15:20:13 »
Il metodo "_new()" è il vero costruttore dell'oggetto (di qualsiasi tipo)!
Tramite questo metodo è possibile passare all'oggetto parametri, utili al condizionamento dell'oggetto stesso, ad esempio:

Codice: [Seleziona]

PUBLIC SUB _new(x AS Integer, y AS Integer)
  ME.X = x
  ME.Y = y
...
END

il passaggio dei parametri x,y permette di modificare la posizione iniziale dell'oggetto (una form ad esempio).

In questo modo puoi anche passare altre cose, tipo oggetti vari (esempio una form principale), che verrà utilizzata da questa form, magari associando il parametro ad una variabile privata:

Codice: [Seleziona]

PRIVATE $var AS Form

PUBLIC SUB _new(parent s Form)
  $var = parent
...
END