Autore Topic: [RISOLTO] progetto di disegno nella guida per principianti  (Letto 4197 volte)

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #15 il: 13 Maggio 2015, 12:24:52 »
vuott, ho visto la definizione che hai messo, ma per me... l'errore è sempre lo stesso  :'(.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #16 il: 13 Maggio 2015, 12:41:51 »
vuott, ho visto la definizione che hai messo, ma per me... l'errore è sempre lo stesso
Hai provato l'intero codice, come da me reinserito nella pagina ?
A me funziona perfettamente.

Vorrei sapere, inoltre, a quale riga precisamente compare quell'avviso di errore.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #17 il: 13 Maggio 2015, 12:55:22 »
Capire di più sul codice dell'esempio da te segnalato..


Riguardo al codice da te segnalato, cerchiamo di comprendere brevemente perché sia necessario spostarsi al 17° byte (indice 16) dell'area di memoria puntata dal Puntatore XImage.

Bisogna innanzitutto tenere in consideratione la omonima Struttura XImage restituita dalla funzione "XGetImage()", che può essere presa in visione qui:
http://tronche.com/gui/x/xlib/graphics/images.html#XImage

Ebbene, il quinto membro di detta Struttura
Codice: c [Seleziona]
char *data;        /* pointer to image data */

è, come si nota, una variabile Puntatore di tipo Char, che contiene l'indirizzo dell'area di memoria ove sono stipati i dati dell'immagine mostrata dalla DrawingArea.

Va precisato che, come evidente, nell'esempio in Gambas noi operiamo semplicemente sull'area di memoria riservata dalla predetta funzione "XGetImage()" e puntata dall'apposita variabile XImage. Insomma, non abbiamo passato una variabile di tipo Struttura (come in realtà è previsto nella libreria esterna di X11), ma semplicemente un Puntatore all'area di memoria riservata coerentemente corrispondente a quella della omonima Struttura prevista dalla funzione "XGetImage()".

Perché dobbiamo spostarci al byte di indice 16 per leggere il valore di quell'indirizzo di memoria ?
La risposta è nei quattro membri precedenti, i quali sono tutti di tipo Intero, e pertanto occupano ciascuno 4 byte di memoria e complessivamente: 4 * 4 = 16 . Il valore del Puntatore (ossia l'indirizzo di memoria dei dati grezzi dell'immagine puntati dalla omonima Struttura "XImage" della libreria esterna di X11), che a noi interessa, si trova a cominciare da 17° byte (indice 16 ovviamente).
Il valore dell'indirizzo di memoria verrà da noi salvato nel tipo di variabile a ciò deputato: ...il Puntatore, e così passato alla successiva funzione "imlib_create_image_using_data()", come da essa richiesto.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #18 il: 13 Maggio 2015, 16:12:53 »
Grazie. Mi hai spiegato tutto per bene. Ho guardato la documentazione su XImage e su XGetImage, che poi andrò a rileggere. La linea in cui ricevo l'errore "Bad argument" è la 74, cioè due in più perché in testa alla sub Button1_click ho aggiunto la "Dim SAppPath As String" e l'istruzione "SAppPath = Application.Path". La linea 74 (per te 72) è "st = Memory XImage For Read". Poco fa mi sono accorto che il pointer XImage caricato da GetXImage contiene 'Nil'. Quindi devo cercare di capire perché qui questa funzione non ha funzionato.
Tutto quello che posso vedere nel codice bloccato su quella linea è che la variabile dsp contiene un indirizzo di memoria (0x964df68), DrawingArea.Handle contiene un numero (52428825) e ZPixmap contiene 2.
Ora vado a rileggere la documentazione. A presto.
« Ultima modifica: 13 Maggio 2015, 16:27:34 da Cocirio »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #19 il: 13 Maggio 2015, 16:44:00 »
Grazie. Mi hai spiegato tutto per bene. Ho guardato la documentazione su XImage e su XGetImage, che poi andrò a rileggere. La linea in cui ricevo l'errore "Bad argument" è la 74, cioè due in più perché in testa alla sub Button1_click ho aggiunto la "Dim SAppPath As String" e l'istruzione "SAppPath = Application.Path". La linea 74 (per te 72) è "st = Memory XImage For Read". Poco fa mi sono accorto che il pointer XImage caricato da GetXImage contiene 'Nil'. Quindi devo cercare di capire perché qui questa funzione non ha funzionato.
Tutto quello che posso vedere nel codice bloccato su quella linea è che la variabile dsp contiene un indirizzo di memoria (0x964df68), DrawingArea.Handle contiene un numero (52428825) e ZPixmap contiene 2.
Ora vado a rileggere la documentazione. A presto.

...dopo le righe:
Codice: gambas [Seleziona]
' Otteniamo un puntatore alla "Struttura" contenente i dati dell'immagine disegnata nella "DrawingArea":
  XImage = XGetImage(dsp, DrawingArea1.Handle, 0, 0, DrawingArea1.W, DrawingArea1.H, XAllPlanes(), ZPixmap)


inserisci questa:
 
Codice: gambas [Seleziona]
If IsNull(XImage) Then Error.Raise("Impossibile ottenere un 'Puntatore' ai dati dell'immagine della DrawingArea !")


Fammi sapere il risultato (...molto probabilmente verrà sollevato l'errore di Puntatore nullo).
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #20 il: 14 Maggio 2015, 10:10:31 »
Ok. Si è fermato sull'errore "Impossibile ottenere un 'Puntatore' ai dati dell'immagine della DrawingArea !".
Mi è venuto il sospetto che le proprietà del progetto non siano adeguate all'uso di quelle librerie "libX11:6.3.0" e "libImlib2:1.4.6". Forse dovevo metterci qualcosa oltre a Qt4 ecc.? Oppure dovevo aggiornare Gambas 3? Ah, ora che mi ricordo, qualche giorno fa ho aggiornato Linux Mint e mi pare di aver visto anche aggiornamenti di Gambas3. Può essere quello? Forse mi conviene disinstallarlo integralmente e reinstallarlo, dal momento che l'avevo installato per conto mio con un PPA esterno?
Comunque intanto sono andato avanti col progetto (che è fatto di un form indice con pulsanti che lanciano gli altri form) e devo dire che nemmeno i due form successivi ("individuazione di un pixel" e "Rotazione del testo") funzionano, mentre funzionano "Scrivere un testo" e "Spostare un testo col mouse", sulla DrawingArea.
In particolare la rotazione del testo, che non ha bisogno di librerie, si ferma sull'istruzione ".DrawText(sTesto, x, y, iLarg, iAlt)" con l'errore "Pending path".

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #21 il: 14 Maggio 2015, 13:55:20 »
Ok. Si è fermato sull'errore "Impossibile ottenere un 'Puntatore' ai dati dell'immagine della DrawingArea !".
C'era da aspettarselo, dato che ricevevi l'errore "Bad argument" sulla riga del Memory Steam che risultava operare, dunque, su un Puntatore nullo.


Mi è venuto il sospetto che le proprietà del progetto non siano adeguate all'uso di quelle librerie "libX11:6.3.0" e "libImlib2:1.4.6".
...potrebbe anche darsi, nonostante mi pare così strano, dato che la libreria di X è una libreria fondamentale, base.  :-\
Ripeto che a me quel codice funziona sia sul PC che sul portatile.
V'è da aggiungere che non sembrano esserci problemi relativi al passaggio alla funzione esterna XGetImage() dei valori attinenti all'handle della DrawingArea ed all'handle della connessione al server grafico X, poiché tu hai scritto che andandoli a leggere riportano entrambi valori positivi.



Forse dovevo metterci qualcosa oltre a Qt4 ecc.?
Il codice non richiede componenti di Gambas aggiuntivi. Esso tra l'altro (ho compiuto la prova proprio adesso) funziona sia con QT4 che con GTK.
Sarebbe interessante vedere il risultato di test effettuati anche da altri membri del forum su quel codice.



Oppure dovevo aggiornare Gambas 3?...... mi pare di aver visto anche aggiornamenti di Gambas3. Può essere quello?
Io suppongo di no  :-\ , poiché si tratta - laddove ti compare l'errore - di una funzione appartenente ad una libreria esterna.
Però...a 'sto punto... tutto può essere... :-X


Forse mi conviene disinstallarlo integralmente e reinstallarlo, dal momento che l'avevo installato per conto mio con un PPA esterno?
Non saprei  :-\ . Potresti forse fare il tentativo: non mim sento di escludere in assoluto un problema determinato dal tuo sistema e/o dalla tua versione di Gambas.   :-\



Comunque intanto sono andato avanti col progetto (che è fatto di un form indice con pulsanti che lanciano gli altri form) e devo dire che nemmeno i due form successivi "individuazione di un pixel"
Vedi ? A me quel codice funziona. L'ho riprovato adesso.
....prova a cambiare la costante da XYPixmap a ZPixmap.
Fai questo cambio anche nell'altro esempio per la generazione di un file immagine da un DrawingArea (...non ci credo molto, ma non si sa mai  :-\ ).
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #22 il: 14 Maggio 2015, 14:48:27 »
Comunque intanto sono andato avanti col progetto (che è fatto di un form indice con pulsanti che lanciano gli altri form) e devo dire che nemmeno i due form successivi ("individuazione di un pixel" e "Rotazione del testo") funzionano, mentre funzionano "Scrivere un testo" e "Spostare un testo col mouse", sulla DrawingArea.
In particolare la rotazione del testo, che non ha bisogno di librerie, si ferma sull'istruzione ".DrawText(sTesto, x, y, iLarg, iAlt)" con l'errore "Pending path".

Confermo l'errore ma non ne capisco il motivo, prima funzionava  :-\
Provo a chiedere sulla ML e poi se mi rispondono ti riferisco.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #23 il: 14 Maggio 2015, 16:26:40 »
Confermo l'errore ma non ne capisco il motivo, prima funzionava  :-\


Comunque......... che ultimamente ci sia qualche problema, è vero: anche io mi sono trovato codici che prima funzionavano ed ora non funzionano più, oppure funzionano sul portatile ma non sul PC.   :-\
Un esempio di questo secondo caso è il codice presente in questa pagina:
 http://www.gambas-it.org/wiki/index.php?title=La_gestione_mediante_le_funzioni_esterne_dell%27API_di_PulseAudio

     :hard:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #24 il: 14 Maggio 2015, 17:20:41 »
Confermo l'errore ma non ne capisco il motivo, prima funzionava  :-\


Comunque......... che ultimamente ci sia qualche problema, è vero: anche io mi sono trovato codici che prima funzionavano ed ora non funzionano più, oppure funzionano sul portatile ma non sul PC.   :-\
Un esempio di questo secondo caso è il codice presente in questa pagina:
 http://www.gambas-it.org/wiki/index.php?title=La_gestione_mediante_le_funzioni_esterne_dell%27API_di_PulseAudio

     :hard:

Come ho appena avuto modo di scriverti anche in privato a me questo codice funziona bene.
 :ciao:

P.s. Su Gambas 3.7.1
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #25 il: 14 Maggio 2015, 17:29:08 »
http://www.gambas-it.org/wiki/index.php?title=La_gestione_mediante_le_funzioni_esterne_dell%27API_di_PulseAudio

Come ho appena avuto modo di scriverti anche in privato a me questo codice funziona bene.

P.s. Su Gambas 3.7.1

...vedi che stranezza ?
A me funziona sul portatile, ma non sul PC; mentre a te sul PC funziona.

.........ricordo una frase di un mio collega... molti anni fa ebbe a dire:

" Computer, donne e motori: gioie e dolori ! "    ;D
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #26 il: 15 Maggio 2015, 14:14:45 »
...vedi che stranezza ?
A me funziona sul portatile, ma non sul PC; mentre a te sul PC funziona.

.........ricordo una frase di un mio collega... molti anni fa ebbe a dire:

" Computer, donne e motori: gioie e dolori ! "    ;D

Almeno ci tengono il cervello sempre all'erta... più o meno  :mad:

@Cocirio

Invece sul fronte ML tutto tace ma posso confermarti che almeno fino alla versione 3.6.2 funzionava a dovere.
Speriamo trovino l'inghippo  >:(
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Cocirio

  • Grande Gambero
  • ***
  • Post: 126
  • Sba(di)gliando s'impapera :-).
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #27 il: 15 Maggio 2015, 19:24:05 »
Che è una ML? Mailing List? Di chi?
Mentre aspettiamo gli eventi, meditiamo.
1) Nell'esempio della rotazione del testo che può significare "Pending Path"? Forse che è stato definito un punto sulla DrawingArea e Gambas non sa cosa farci? Boh?
2) Negli esempi di azioni sulla DrawingArea con l'uso di librerie esterne, che vuol dire "cambiare la costante da XYPixmap a ZPixmap"? Io ho provato a scambiarle tra loro, ma a Gambas non è piaciuto.
3) Negli ultimi due esempi di stampa di testo scritto nella DrawingArea, il primo mi lascia la stampa sospesa. Nella coda di stampa rimane il documento in attesa, anche se poi, togliendo la spina e riaccendeno per fare uscire la carta, risulta stampato.
 
Domani sul punto 3 ci guardo meglio.
Ciao

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #28 il: 15 Maggio 2015, 19:42:58 »
Che è una ML? Mailing List? Di chi?

La Mailing List internazionale ufficiale di Gambas:
https://lists.sourceforge.net/lists/listinfo/gambas-user


2) Negli esempi di azioni sulla DrawingArea con l'uso di librerie esterne, che vuol dire "cambiare la costante da XYPixmap a ZPixmap"? Io ho provato a scambiarle tra loro, ma a Gambas non è piaciuto.


Sì, sostituire "XYPixmap" con quell'altra.
Che non gli piacesse, c'era da aspettarselo.



3) Negli ultimi due esempi di stampa di testo scritto nella DrawingArea, il primo mi lascia la stampa sospesa. Nella coda di stampa rimane il documento in attesa, anche se poi, togliendo la spina e riaccendeno per fare uscire la carta, risulta stampato.


A me funzionano perfettamente entrambi.    :-\
« Ultima modifica: 15 Maggio 2015, 19:50:34 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re: progetto di disegno nella guida per principianti
« Risposta #29 il: 15 Maggio 2015, 21:00:25 »
Che è una ML? Mailing List? Di chi?
Mentre aspettiamo gli eventi, meditiamo.
1) Nell'esempio della rotazione del testo che può significare "Pending Path"? Forse che è stato definito un punto sulla DrawingArea e Gambas non sa cosa farci? Boh?

Non credo sia roba nostra, vale a dire alla ns. portata, certamente non alla mia.  :mad:

Citazione
3) Negli ultimi due esempi di stampa di testo scritto nella DrawingArea, il primo mi lascia la stampa sospesa. Nella coda di stampa rimane il documento in attesa, anche se poi, togliendo la spina e riaccendeno per fare uscire la carta, risulta stampato.
 
Domani sul punto 3 ci guardo meglio.
Ciao

fsurfing e vuott mi hanno insegnato a non sprecare carta stampando in pdf, fallo anche tu, l'altro modo è solo dispendioso.
Per fare funzionare gli ultimi due esempi (li ho appena riprovati e funzionano anche a me) hai inserito in una FMain una drawing area (DrawindArea1)+ un pulsante (Button1) + una printer (Printer1)?
Se poi stampi su file pdf devi andarlo a vedere in /tmp (Computer > tmp > file.pdf).
Comunque siccome spesso gli allievi superano i maestri se ti scarichi i miei esempi postati nelle discussioni che ti ho indicato...  :P
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro