Scusa il ritardo. Sto seguendo la pagina da te indicata per studiare la DrawingArea e tutti gli esempi del suo uso, che sto provando. In particolare sto cercando di capire il funzionamento di varie classi come la Paint e la Draw. In questa occasione mi sarebbe piaciuto riuscire a copiare in un documento a parte il contenuto dei pop-up che appaiono scrivendo le diverse parti del codice o guardando le proprietà dei controlli. Non ci sono riuscito col copia e incolla.Non ho capito a cosa ti riferisci in particolare puoi essere più preciso? Magari ti possiamo aiutare.
Nella pagina http://www.gambas-it.org/wp/tag/guida/ c'è scritto che all'indirizzo http://beginnersguidetogambas.com/ cliccando sul flash_widget si può scaricare una copia di Gambas Beguinners Guide aggiornata alla versione 3. Non so cos'è un flash_widget e ho trovato solo la possibilità di ordinare una copia cartacea. Per favore, se ce l'hai, puoi darmi il link vero? Grazie.Il fash widget non funziona più da un po, comunque ripeto fai una domanda specifica e soprattutto chiara e se ne sarò capace ti risponderò, altrimenti è facile che ti risponda qualcuno più in gamba(s) di me.
Per favore, se ce l'hai, puoi darmi il link vero? Grazie.Io ti suggerisco, con riferimento a manuali on-line, questo (in spagnolo):
... non devi fare altro che tasto destro copy e poi incolli dove vuoi.Confermo quanto scritto da Gianluigi, ed è anche solo sufficiente :-\ evidenziare con il mouse il testo interessato e riportarlo poi su un editor come Gedit.
....uso gedit l'ho a portata di mano nel launcer e se serve copio li.
2. (Gianluigi) Tasto destro copy e incolla ok. Io credevo di usare Gedit invece il doppio clic su un file di testo o l'uso del menu 'accessori/Editor di testo' mi danno Pluma 1.8.1.
4. (Gianluigi) In un primo momento i miei tentativi con F2 sono falliti. Poi ho visto che dovevo cambiare riga. Così ha funzionato. L'F1, anche con il clic sull'icona con tooltip 'show help tree', mi pare che dia qualcosa di parziale. Ma devo ancora provarlo in altre occasioni.
Sono andato a vedere cos'è un widget su Wikipedia. E' un 'window gadget'! :ok: :sleepy: Posso dormire contento.
Ciao ragazzi. A presto.
Purtroppo mi sono arenato sullo statement "st = Memory XImage For Read", prima perché la variabile st non era definita, poi, dopo che io l'ho definita come Stream (passando prima da String e poi da File :-[) ho avuto, in esecuzione, l'errore "Bad Argument".Sì, scusami, avevo dimenticato di scrivere la dichiarazione di quella variabile.
Però posso assicurarvi che prima ho capito ed eseguito sulla mia Ide tutti gli esempi precedenti, ricavandone due progetti, diciamo, didattici che, per l'avvenire mi saranno utili.Molto bene.
vuott, ho visto la definizione che hai messo, ma per me... l'errore è sempre lo stessoHai provato l'intero codice, come da me reinserito nella pagina ?
char *data; /* pointer to image data */
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.
' 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)
If IsNull(XImage) Then Error.Raise("Impossibile ottenere un 'Puntatore' ai dati dell'immagine della DrawingArea !")
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. :-\
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.
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.
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.
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 :-\
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:
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
Che è una ML? Mailing List? Di chi?La Mailing List internazionale ufficiale di Gambas:
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.
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?
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
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".
Sì, sostituire "XYPixmap" con quell'altra.Ho provato a mettere ZPixmap come secondo e ultimo elemento dell'enumerazione in "Private Enum XYBitmap = 0, XYPixmap, ZPixmap". Così passa il debug del source, ma poi si ferma sempre alla "st = Memory XImage For Read" con 'bad argument', purtroppo.
Che non gli piacesse, c'era da aspettarselo.
A me funzionano perfettamente entrambi. :-\Può anche dipendere dalla mia stampante, ma forse c'è un comando del controllo Printer che permette di rilasciare il foglio. Andrò a vedere.
fsurfing e vuott mi hanno insegnato a non sprecare carta stampando in pdf, fallo anche tu, l'altro modo è solo dispendioso.Sorvolo sulla domanda retorica riguardo alla possibile omissione dei controlli sul form :P. Per le discussioni che mi hai indicato, scusami, ma me le sono perse :-[. Sul risparmio di carta non posso che concordare.
Per fare funzionare gli ultimi due esempi (li ho appena riprovati e funzionano anche a me) hai inserito in una FMain una drawing area (DrawingArea1)+ 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
Ora vi chiedo: se mi decidessi a disinstallare e reinstallare Gambas3, è sicuro che non mi perderei tutti i progetti che stanno nella mia cartella personale?A me capita qualche volta che, per mio errore, sono costretto a reinstallare Gambas. Non ho mai perso alcun progetto, purché le loro cartelle si trovino in directory diverse da quelle dei sorgenti di Gambas, ...ovviamente.
Altra domanda: .... in una cartella .Gambas come faccio a vedere il contenuto dei file "FMAIN", "FORM1", ecc. (ammesso che contengano, come in VB6, testo leggibile)?Apri quei file con un editor esadecimale.
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".
Anche io ottengo questo errore !
Apri quei file con un editor esadecimale.Ci ho provato e ho ricevuto questa risposta: "Impossibile mostrare "/home/coc1/progetto_prove_grafiche/.src/FMain.class". Poi mi viene proposto di andare a cercare un'applicazione adatta ma non viene trovata. Invece viene letto bene con un lettore di testo, p. es., il file FMain.form che. se ha lo stesso contenuto sostanziale di FMain.class e di FMain.class-, mi sta bene.
...oppure puoi crearti un programmino ;D Gambas per leggere in caratteri ASCII i dati che tali file contengono.
I file FMain.form, FMain.class e simili, presenti nella cartella .src di un progetto, possono essere agevolmente letti con un editor di testo (ad esempio: Gedit).
"Impossibile mostrare "/home/coc1/progetto_prove_grafiche/.src/FMain.class".Per un file come FMain.class va bene un qualsiasi lettore di file di testo (come ad esempio Gedit).
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:
' Riporto solo la parte finale dopo End Select della Sub da_Draw()
' In questa dimostrazione il fulcro (vortice) è sempre il centro
' dell'area di disegno:
xArc = CFloat((da.W / 2))
yArc = CFloat(da.H / 2)
fSopra1 = CFloat((da.W / 2))
fSopra2 = CFloat(da.H / 2)
fSotto1 = CFloat(- (da.W / 2))
fSotto2 = CFloat(- (da.H / 2))
' Vortice:
.Translate(fSopra1, fSopra2)
.Rotate(Rad(fAngolo))
.Translate(fSotto1, fSotto2)
' Testo:
'.DrawText(sTesto, x, y, iLarg, iAlt)
.Text(sTesto, x, y, iLarg, iAlt)
.Fill
' Arco:
.Arc(xArc, yArc, fRaggio)
.Stroke
.End
End With
bOk = False
Endif
End
Fai la modifica anche nella pagina della WIKI !
Per un file come FMain.class va bene un qualsiasi lettore di file di testo (come ad esempio Gedit).Ho installato entrambi, ma non ho concluso niente. Ho provato il comando "sudo gedit", ma non basta. Servirebbe la visualizzazione dei file nascosti che non sembra possibile. Con Caja sì. Ma "sudo Caja" non mi dà risultati diversi dall'uso normale di Caja tramite "Computer". Forse ci vorrebbe un utente "root". Mi pare che si dovrebbe usare "su", ma non sono capace.
Riguardo all'editor esadecimale, io uso GHex .
Fatto.
Ho installato entrambi, ma non ho concluso niente. ...
...
Affé mia (espressione trecentesca), corpo di mille balene (piratesco), non ho mai avuto due maestri al mio sevizio! :2birre:
:D
Servirebbe la visualizzazione dei file nascosti che non sembra possibile.
Credo che la mia stampante non funzioni bene con Linux Mint perché, pur essendo riconosciuta, non ha un driver installato.
Chiedo scusa, ma devo tornare sulla mia difficoltà di leggere la documentazione.
Quando ho davanti la Ide di Gambas con un form contenente una DrawingArea, se seleziono la DrawingArea, sulla parte destra appaiono le relative proprietà e, più sotto tutta la documentazione della classe/controllo intitolata "DrawingArea gb.qt4". Suppongo che, come in altri casi già visti, ci sia un modo per ingrandire questo tipo di documento o per leggerlo da qualche altra parte. Mi è parso che nel Wiki non ci sia. Spero di sbagliarmi. Grazie.
Allora sull'esempio con Draw ho cambiato gli angoli start e stop credendo di poter vedere solo un settore del cerchio, invece ho visto solo cambiare il raggio (credo iniziale), ma il cercho è rimasto sempre intero.
Ho fatto poi lo stesso esperimento con la Paint aggiungendo nel metodo .Ellipse l'angolo di partenza e la lunghezza in radianti, e anche qui non ho visto nessun cambiamento. Come si spiega?
Public Sub Button1_Click()
Dim xc, yc, radius, fR, fD As Float
DrawingArea1.Cached = True
DrawingArea1.Clear
With Paint
.Begin(DrawingArea1)
xc = DrawingArea1.W / 2
yc = DrawingArea1.H / 2
radius = DrawingArea1.W / 3
.LineWidth = 0.5
.Brush = Paint.Color(8421504)
fR = Rad(270)
fD = -1
.Arc(xc, yc, radius, fR, fD, True)
.Stroke(True)
.Background = Color.RGB(255, 220, 0)
.Fill
.End
End With
End
Grazie. Ho provato come sempre l'esempio di .Arc in un progetto nuovo con un Form, una DrawingArea e un pulsante. L'esempio funziona perfettamente.Ehi non so perché ma leggendoti mi è venuta in mente quella barzelletta che vede uno scienziato dedurre che le pulci da lui ammaestrate a saltare al suo comando sonoro, una volta private delle gambe diventano sorde.
Ma ho voluto provare a:
1) togliere .Stroke: sembra ininfluente
2) togliere .Background: quando non c'è il colore inserito con .Brush diventa grigio scuro. Quindi il giallo è una mescolanza tra i due colori?
3) togliere .LineWidth: quando non c'è sembra schiarire il colore!?
4) togliere il Pie True: viene fuori una corda invece che un settore
Poi sono tornato all'esempio di disegno di un cerchio pieno con il metodo Ellipse().
Qui siamo direttamente nella subroutine dell'evento Draw della DrawingArea dove ho modificato la linea ".Ellipse(100, 10, 100, 100)" in
".Ellipse(10, 10, 180, 180, Rad(0), Rad(150), True)" ed è venuto fuori un settore, che diventa una corda, senza il True. All'interno della subroutine si può anche togliere il Begin() senza cambiare il risultato. Scrivere 0 o Rad(0) è la stessa cosa :).
Ho aggiornato Gambas 3 alla versione 3.7.90 "a mio rischio e pericolo" ;D:hatecomputer:
Si vede qualche cambiamento nell'editor, precisamente nel copia e incolla. Ho imparato il Ctrl,Shift,v. Ciao
Ma ho voluto provare a:Io lo dico sempre: può sembrare stupido, ma il comportamento con i giocattoli tipico dei bambini più piccoli, ossia quello di smontare per vedere come e è fatto, applicato allo studio di un linguaggio di programmazione (e non solo), può ritenersi un ottimo metodo per impare a programmare.
All'interno della subroutine si può anche togliere il Begin() senza cambiare il risultato.Sì.
Scrivere 0 o Rad(0) è la stessa cosa :).Sì, l'ho messo per ragioni didattiche, per simmetria con il successivo argomento del metodo.
A me non piace assolutamente: :hatecomputer:
Si vede qualche cambiamento nell'editor, precisamente nel copia e incolla. Ho imparato il Ctrl,Shift,v. Ciao
Private $fRad As Float
fR = Rad($fRad)
fD = Rad(-90)
$fRad += 90
If $fRad = 360 Then $fRad = 0
.... Begin perché senza non può funzionare...Una volta era necessario, devono nel frattempo essere state effettuate delle modifiche... suppongo.
Gran Gianluigi fustigatore (e martellatore), che dici mai? A me, il tuo progetto, ben commentato, che mi ha fatto vedere la luce, funziona anche se ometto il metodo Begin così:
...With Paint
' .Begin(da)
.Font.Size = ridimensiona(22) ...
A sproposito, ricordi che io ho aggiunto sul form due Frame intorno alle due serie di pulsanti ("Posiziona il testo" e "Ruota di 45°")?
Non so se ti interessa, ma vorrei comunicare a te e ad altri che prima di poterle utilizzare ho dovuto arretrarle rispetto ai pulsanti che, altrimenti, non riuscivo più a utilizzare.
Ti ringrazio di avermi chiarito la funzione del metodo .Stroke, che non mi era del tutto chiara, e della sua relazione con .LineWidth (se ci avessi messo 2 o 3 invece di 0.5, l'avrei visto, forse). Mi pare di aver chiarito anche la relazione tra il colore di 'Brush e quello di .Background.
L'evento _Draw (da non confondere con l'omonima classe "esecrata" ;)) a me sembra un po' anomalo, forse paragonabile a quello che viene chiamato "costruttore" (Public Sub _new()). Insomma mi pare che venga eseguito automaticamente dopo l'apertura del form. Mi sbaglio?
Cari bambini, noi che siamo appassionati di questo giocattolo a forma di gambero blu dall'andamento, direi, retrogrado e, a volte, un po' disordinato, nel bene e nel male, abbiamo tutti qualità bambinesche. Questa sentenza mi è venuta nel dormiveglia :D.
Riguardo ai difetti delle ultime modifiche di Gambas3, sono d'accordo con Vuott (ma queste modifiche sono sempre e unicamente opera di Misinini?). A me che vengo da una lunga consuetudine con Windows dà molto fastidio l'impossibilità di usare lo Shift-Clic per completare una selezione nel codice.
violent
Non capisco come ha fatto Pierluigi a prendere a martellate prima me e poi se stesso. Spiegami anche questo, Pierluigiaccio.
Ma non so come si fa. Spero che sia possibile.Crei il file compresso dei sorgenti:
Ok. Avrei voluto provare prima a compilare e installare il progetto da qualche parte. Ma non so come fare. Forse seguendo la procedura indicatami da Gianluigi per compilare e installare gambas? Ciaohttp://www.gambas-it.org/smf/index.php?topic=3891.msg34922#msg34922
Dim sPath, s As String
' Usando la funzione di vuott (ben commentata che trovi qui http://www.gambas-it.org/smf/index.php?topic=3312.msg32380#msg32380)
' Comunque a me da sempre WARNING! ((process:7408): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed ecc. ecc.)
s = "http://www.gambas-it.org/wiki/index.php?title=Disegnare_un_cerchio_con_le_Classi_%22Draw%22_e_%22Paint%22"
sPath = controllo(s)
Message("<a href=" & sPath & ">PIPPO</a>")
...
Avevi ragione anche sui caratteri strani. Vado a vedere.
No. A me serve un'altra cosa, che in VB6 si risolve facilmente. P. es. a consolle:
a$="prova_" & """Drop""" & "_" & """Paint"""
? A$
prova_"Drop"_"Paint"
Capito? Ciao
.... in VB6 si risolve facilmente. P. es. a consolle:
a$="prova_" & """Drop""" & "_" & """Paint"""
? A$
prova_"Drop"_"Paint"
Public Sub Main()
Dim a$ As String
a$ = "prova_" & "\"Drop\"" & "_" & "\"Paint\""
Print A$
a$ = "prova_" & Quote("Drop") & "_" & Quote("Paint")
Print A$
a$ = "prova_" & Chr(34) & "Drop" & Chr(34) & "_" & Chr(34) & "Paint" & Chr(34)
Print A$
a$ = "prova_" & "\x22Drop\x22" & "_" & "\x22Paint\x22"
Print A$
End
Ora voglio segnalarvi lo strano comportamento della TextArea nel form 7: per selezionare il testo su 3 righe non va bene trascinare il cursore, devo per forza cliccare sull'inizio e poi, con lo shift, cliccare sulla fine del testo (o viceversa). Allora sono andato a vedere tra le proprietà per capire se dovevo impostare qualcosa e......
Che significa tutto ciò?
se NON seleziono in un modo qualunque tutto il testo e poi lo trascino nella DrawingArea, il testo trascinato è in una sola riga. Al contrario, se lo seleziono e poi lo trascino, il testo trascinato (drag.data) è correttamente in tre righe.A me non funziona così.
Terzo motivo di stupore, ma non troppo, è che l'impostazione a true o a false della proprietà drop nella DrawingArea è indifferente. Ma questo, secondo me, è un pregio, non un difetto. Solo, sarei curioso di sapere in quali casi (se esistono) questa proprietà agisce, cioè accetta o non accetta il drop....ed infatti il comportamento della DrawingArea a te non è regolare, poiché per attivare l'azione del Drop è di norma necessario porre a Vero la proprietà .Drop della DrawingArea. Proprietà che di default è impostata a False; circostanza che lascia intendere che la funzionalità del Drag-Drop è eccezionale rispetto ad un diverso uso normale e predefinito dell'oggetto.
Scusa, quando dici che al rilascio ti appare l'intero testo intendi che ti appare su tre righe, come è l'originale?Ciao, sì, scusami, avevo interpretato male la tua descrizione.
Beh, mi date notizie confortanti per me. Vorrei che mi rispondeste anche sull'esempio nella documentazione della Quote.
Ora vi allego il source del progetto con le mie correzioni.
Print Quote("This is not a \\\"quoted\\\"\\nmulti-line string.")
Print UnQuote("This is not a \\\"quoted\\\"\\nmulti-line string.")
Beh, mi date notizie confortanti per me. Vorrei che mi rispondeste anche sull'esempio nella documentazione della Quote.
Ora vi allego il source del progetto con le mie correzioni.
Speravo nelle vostre segnalazioni di errori e, magari, idee per miglioramenti.E' un codice troooppo vasto. :D
...ho imparato molto più che l'uso della DrawingArea.