Gambas-it

Gambas3 => Programmazione => Topic aperto da: Picavbg - 05 Ottobre 2012, 19:49:30

Titolo: [Risolto] la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 05 Ottobre 2012, 19:49:30
Oggi é comparso un problema per me nuovo. Il codiece che verifica il contenuto di una Text.Box riscontra un errore ed allora produce l'emissione di una finestra Message.Box che va a piazzarsi proprio sulla Text.Box di cui spiega l'anomalia riscontrata, impedendo perciò la lettura della stringa contenuta nella Text.Box, contestualmente alla sua presenza attiva sulla finestra corrente.
Esisterebbe la possibilità di dimensionarla appositamente posizionandola in una parte della finestra preesistente ininfluente ai fini della visione complessiva dell'anomalia   (digitazione + messaggio di errore)?
 :(
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 05 Ottobre 2012, 23:49:54
Questo codice dovrebbe fare il caso tuo. E' necessario attivare il componente gb.desktop:
Codice: gambas [Seleziona]

Private i As Integer


Public Sub Form_Open()

  Dim pr As Process
  Dim ss, x As New String[]
  Dim s, y As String

   pr = Shell "xprop | grep '(WINDOW):'" For Read


  While Not Eof(pr)
    Input #pr, s
    ss.Add(s)
  Wend


 ' Dividiamo la stringa contenente il primo valore esadecimale,
 ' in modo tale da ottenere la seconda parte priva di “0x”:
      x = Split(ss[4], "x")
' Prendiamo del secondo valore esadecimale soltanto le due cifre più a destra:
      y = Right(ss[9], 2)

' Individua il valore esadecimale preciso della finestra, lo trasforma in decimale:
      i = Val("&" & x[1]) - Val("&" & y)

End


Public Sub Button1_Click()

  Dim dw As DesktopWindow


   dw = New DesktopWindow(i)

' effettua lo spostamento della finestra (è possibile anche ridimensionarla a piacimento):
     dw.Move(10, 10)

End


Come funziona:

Appena hai il problema da te rilevato, lancia questo programmino; vedrai che il puntatore del mouse muterà a forma di crocetta. Clicca una volta sulla finestrina del Message.Box che ti ossessiona. Quindi clicca sul Button1 sul programmino.
La finestrina si dovrebbe spostare là dove avrai posto le coordinate (ora settate a 10, 10) di X e Y (puoi anche ridimensionare la finestra aggiungendo W e H).
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 06 Ottobre 2012, 08:45:28
Come funziona:

Appena hai il problema da te rilevato, lancia questo programmino; vedrai che il puntatore del mouse muterà a forma di crocetta. Clicca una volta sulla finestrina del Message.Box che ti ossessiona. Quindi clicca sul Button1 sul programmino.
La finestrina si dovrebbe spostare là dove avrai posto le coordinate (ora settate a 10, 10) di X e Y (puoi anche ridimensionare la finestra aggiungendo W e H).

Ho fatto come mi hai detto, lasciando prima le coordinate impostate da te, poi le ho modificat in 5, 5, ma non succede proprio niente. Ho fatto più prove sia cliccando col puntatore a forma di crocetta sulla finestra Message.box che sulla Form in cui é inglobata la Message.Box. Purtroppo non ho ottenuto effetti. Comunque, grazie lo stesso.
 :ciao:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 06 Ottobre 2012, 12:06:03
Purtroppo non ho ottenuto effetti.
Ieri, ho fatto delle prove su un MessageBox creato da applicativo Gambas, ed è l'unico tipo di finestra che non riuscivo a spostare e/o a ridimensionare.  :-\ Questo, nonostante anche le finestrine di qualunque MessageBox siano - appunto - normali finestre che posseggono un proprio ID !
Sono riuscito ad ottenere il suo spostamento soltanto insieme con il form del programmino principale che aveva generata.

Dagli esperimenti attualmente compiuti, è risultato che un MessageBox in talune circostanze - probabilmente legate al tipo di ambiente desktop grafico e/o al tema - può essere spostato individualmente solo se non è generato dal codice del nostro applicativo Gambas. Se per esempio creiamo un programmino che compie un errore - ad esempio una divisione per zero -, quando la procedura incontra tale richiesta di divisione, essa solleverà un errore facendo apparire un MessageBox. In questo caso sarà possibile effettuare lo spostamento. Se, invece, il nostro programma prevede che venga mostrato ad esempio un Message.Info, sarà impossibile spostarlo o modificarne le dimensioni.

Potrebbe questa fattispecie astratta essere il tuo caso. Lo spostamento con il codice, che ti ho comunicato sopra, molto probabilmente ha avuto problemi nell'individuare con precisione il PID della finestra del MessageBox, in quanto - come hai potuto notare - la procedura, usando "xprop" è un po' complessa: ho visto che con i Message.Box la linea di comando in "xprop"' deve essere un po' diversa (vedi Nota in fondo).

Ma proviamo diversamente.
Il seguente codice prevede che i desktop attivi non abbiano altre finestre aperte. In questo modo il MessageBox che ti appare dovrebbe essere la 3a finestra (quindi la num. 2) attiva (qui si presuppone che il programma principale, ove è contenuto la TextBox, sia un programma eseguibile, non lanciato dall'IDE di gambas):
Codice: gambas [Seleziona]

Public Sub Button1_Click()

  Dim dw As DesktopWindow
  Dim i As Integer

   With Desktop
      i = .Windows[2].Id
   End With

    dw = New DesktopWindow(i)

   With dw
     .Move(10, 500)
    ' .Resize(100, 500)
    ' .Close
   End With

End

Lancerai questo applicativo solo dopo la comparsa del MessageBox che dà fastidio.

Prova una per volta tutte e tre le opzioni (Move - Resize - Close).




Nota:
In tal caso il codice per ottenere - ancora mediante "xprop" - il PID di un MessageBox sarà il seguente:
Codice: gambas [Seleziona]

  Private i As Integer  
  
  
Public Sub Form_Open()  
  
 Dim pr As Process  
 Dim x As New String[]  
 Dim s As String

   pr = Shell "xprop | grep XKLAVIER_STATE" For Read

   While Not Eof(pr)    
     Input #pr, s
' Individua il valore decimale della finestra del "MessageBox":
     If Eof(pr) Then i = CInt(s)
   Wend

End
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 06 Ottobre 2012, 15:55:13
...un'alternativa potrebbe essere quella di considerare non la finestra del MessageBox, bensì del form dove è presente la TextBox. Mi viene da pensare che si potrebbe dilatare in modo da cercare di spostare così la parte della TextBox, di cui desideri leggere il contenuto.

In questo caso opereremo similmente a prima, tenendo presente che in questo caso la finestra, ove è posizionata la TextBox, è stata attivata prima della comparsa del MessageBox. Quindi se il MessageBox era la finestra n. 2, quella del programma principale (parlo sempre di un programma eseguibile, non lanciato dall'IDE di gambas) sarà 1. Avremo dunque:
Codice: gambas [Seleziona]

Public Sub Button1_Click()  
      
   Dim dw As DesktopWindow  
   Dim i As Integer  


      With Desktop  
         i = .Windows[1].Id  
      End With  
      
       dw = New DesktopWindow(i)  
      
      With dw  
         .Resize(W, Y)    ' imposta tu i parametri come preferisci !
      End With  
      
End  
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 06 Ottobre 2012, 17:22:23
Ieri, ho fatto delle prove su un MessageBox creato da applicativo Gambas, ed è l'unico tipo di finestra che non riuscivo a spostare e/o a ridimensionare.  :-\ Nonostante anche le finestrine di qualunque MessageBox è - appunto - una finestra ed possiede un suo PID.
Sono riuscito ad ottenere il suo spostamento soltanto insieme con il form del programmino principale che aveva generata.

Dai miei esperimenti ho notato che un MessageBox può essere spostato individualmente solo se non è generato dal codice del nostro applicativo Gambas.

L'ho pensato anch'io, dopo avere provato il tuo codice. Considera inoltre che le mie Form, tranne la FMain sono tutte utilizzate col metodo ShowModal, quindi sono organizzate a mò di scatole cinesi. Quindi l'unica finestra su cui può agire il codice che mi hai proposto é la FMain.


Mi viene da pensare che si potrebbe dilatare in modo da cercare di spostare la parte della TextBox, di cui desideri leggere il contenuto.
Quindi, se non ho capito male, ogni volta che dovrei vedere in piano parallelo sia la finestra della Message.Box che quella della TextBox, dovrei agire col tuo codice sulla finestra della TextBox, ammesso che possa modificarne la dimensione. Ma tutto questo non posso trasferirilo sull'utente generico, in fase di ordinaria esecuzione, dopo avere ottenuto l'eseguibile del mio ContabFam. Finché proviamo possiamo giocare come vogliamo, ma, non potendo predisporre il posizionamento di una Mesasage.Box sulla finestra di una Form modale, credo proprio che mi convenga abbandonare da subito la tua ottima proposta.  Mi conviene piuttosto ridimensionare la Form e spostare la posizione della TextBox oggetto della presente discussione.
Grazie!
 :ciao:

Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 06 Ottobre 2012, 19:29:37
L'asino, però, non si arrende ancora.

Fai quest'ultimo tentativo, perché a me è riuscito: se non è possibile spostare un MessageBox, allora lo si può rinchiudere.

Useremo per questo altro tipo di particolarissimo spostamento l'oggetto Embedder. In buona sostanza otterremo lo spostamento del MessageBox dentro l'oggetto Embedder che porremo all'interno del nostro programmino spazzamessage.

Si dovrà porre, ovviamente, un oggetto Embedder sul Form del programmino, ed attivare il componente gb.desktop:
Codice: gambas [Seleziona]

Public Sub Button1_Click()

  Dim i As Integer

    With Desktop
' Qui va inserito il numero dell'indice della finestra del "messageBox".
' L'ordine dell'indice puoi vederlo facilmente lanciando in un terminale
' il comando " wmctrl -l -p ":
       i = .Windows[num_index].Id
    End With

     Embedder1.Embed(i)

End



Se vuoi manualmente individuare la finestra da inglobare, puoi usare ancora una volta il comando xprop, con il codice descritto sopra nella Nota:
Codice: gambas [Seleziona]

Private i As Integer    
  
  
Public Sub Form_Open()    
  
Dim pr As Process    
Dim s As String  
  
  pr = Shell "xprop | grep XKLAVIER_STATE" For Read  
  
  While Not Eof(pr)      
    Input #pr, s  
' Individua il valore decimale della finestra del "MessageBox":  
    If Eof(pr) Then i = CInt(s)  
  Wend  
  
End


Public Sub Button1_Click()

  Embedder1.Embed(i)

End


A me con entrambe le soluzioni ha funzionato anche con i MessageBox più recalcitranti, come gli... asini !
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: sotema - 08 Ottobre 2012, 10:28:58
Scusate l'intromissione.
@Picavbg
Ma se il testo della message box è generato da te, non potresti riportare nel messaggio il contenuto della textbox?

@Vuott
Visti i tuoi studi e l'impegno profuso propongo agli amministratori di promuoverti almeno a Cavallo... :D
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: md9327 - 08 Ottobre 2012, 10:35:19
Hai saltato il grado "Mulo"...  ;D
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 08 Ottobre 2012, 12:58:29
@Picavbg
Ma se il testo della message box è generato da te, non potresti riportare nel messaggio il contenuto della textbox?
Complimenti per l'idea! Esisterebbero anche altre possibilità, una é, per es., quella di craere una form specifica "fai da te" per i messaggi, delle dimensioni e coordinate di posizionamento a scelta dell'amatore.  Però io pensaserei di affrontare la questione in naturalgambas, ma a quanto pare non é possibile. Devo perciò subire la prepotenza di Gambas che si permette, senza nemmeno chiedere che cosa ne pensi il programmatore applicativo, di posizionare la finestra di Message.Box dove gli pare. Aggiungo che lo studio di vuott é molto interessante, ma, anche se non l'ha ancora detto, la sua azione di riposizionamento ed aggiustamento delle dimensioni della finestra può avere luogo solo dopo che la finestra sia comparsa sul desktop, e questo non sta bene.  :)

@ vuott
Citazione da: vuott
L'asino, però, non si arrende ancora.
.........
.........
.........
A me con entrambe le soluzioni ha funzionato anche con i MessageBox più recalcitranti, come gli... asini !
Ma la vuoi finire con le tue balorde autodefinizioni?   :nonono:
Se non lo vuoi fare per te, fallo almeno per tutti quelli che ti leggiamo e non siamo pochi, perché indirettamente ci manchi di rispetto: prima di autodefinisci "sceccu" e poi ci suggerisci le tue soluzioni.    :violent:   Ma ti sembra che possiamo andare avanti così?   >:( :evil:

Devo ancora dirti che sto cercando, nei limiti delle mie possibilità, sicuramente assai ridotte rispetto alle tue, di capire tutto quello che mi hai proposto nel tuo menù informatico e non ho ancora superato il primo ostacolo su "wmctrl", comando che ho dovuto installare , perché sconosciuto dal default di fedora.

Perciò, se arranco a seguire i tuoi ragionamenti e le tue prove, trova un avatar-attributo adatto alla mia scadente stazza di mente animalesca.  ;)
Se ti ho offeso, allora ... facci il favore, smettila con le tue autodefinizioni e inserisci nel tuo profilo un avatar sopportabile anche all'occhio del destinatario dei tuoi messaggi.  :evil:
Sono stato chiaro?   
:poke:

 :ciao:


Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 08 Ottobre 2012, 14:18:35
Ma se il testo della message box è generato da te, non potresti riportare nel messaggio il contenuto della textbox?
Questa, ovviamente, è la soluzione ottimale, da vero... super-purosangue di razza !  ;D

A me era parso di capire che picavbg il MessageBox non fosse previsto da lui nel codice. Solo ora, leggendo il tuo intervento ed andando a rileggere il primo intervento di picavbg, mi rendo conto che il MessageBox è voluto:
« Il codice che verifica il contenuto di una Text.Box riscontra un errore ed allora produce l'emissione di una finestra Message.Box ».


Visti i tuoi studi e l'impegno profuso propongo agli amministratori di promuoverti almeno a Cavallo...
...ma se qua non riesco neanche a capire più quello che uno scrive  :hard: , devo essere retrocesso irrimediabilmente a "ronzino" !


...ma, anche se non l'ha ancora detto,la sua azione di riposizionamento ed aggiustamento delle dimensioni della finestra può avere luogo solo dopo che la finestra sia comparsa sul desktop
E' così, sì: quei comandi e quelle funzioni agiscono - appunto - solo sulle finestre già aperte.


non ho ancora superato il primo ostacolo su "wmctrl"
Ovviamente ci sono l'help ed i manuali in giro su internet. Su questo forum ne proposi l'uso in questo caso:
http://www.gambas-it.org/smf/index.php?topic=1923.msg21307#msg21307
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 08 Ottobre 2012, 14:50:04
...ma, anche se non l'ha ancora detto,la sua azione di riposizionamento ed aggiustamento delle dimensioni della finestra può avere luogo solo dopo che la finestra sia comparsa sul desktop
E' così, sì: quei comandi e quelle funzioni agiscono - appunto - solo sulle finestre già aperte.

Allora, a questo punto mi pare opportuno un riepilogo:
Il mio ContabFam controlla, all'interno di una sua Form.Class, la digitazione dell'operatore e, in funzione della condizione di uguaglianza non trovata, all'interno di una tabella del DB correlato, emette una MessageBox per segnalare il mancato riscontro. Detta MessageBox viene prodotta da Gambas andando casualmente a sovrapporsi alla TextBox contenente la digitazione dell'utente, impedendone perciò il riscontro visuale, mentre è attiva la finestra di MessageBox.

Soluzione pensata da me: riuscire a comunicare a Gambas, insieme con la stringa di segnalazione, le coordinate di posizionamento della MessageBox dentro la Form attiva.
Soluzione proposta da vuott: intervenire con codice distinto per spostare e/o ridimensionare la MessageBox.
Soluzione proposta da Sotema: ripetere dentro la MessageBox la stringa già contenuta nella TextBox iniziale.

Orientamento mio attuale: Disegnare una Form che funzioni come una MessageBox, ma preimpostabile con coordinate X,Y e dimensionamento in Height e Width.
Penso che solo così posso andare a piazzare la MessageBox.Fai-da-te dove vorrò coi caratteri e  coi colori che riterrò al momento più opportuni.

Mentre scrivo mi sta venedo una nuova idea:  costruire un rettangolo, simulazione di MessageBox, attraverso il codice html.  :D
 :ciao:

Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 08 Ottobre 2012, 15:57:21
Soluzione proposta da vuott: intervenire con codice distinto per spostare e/o ridimensionare la MessageBox.
Vorrei fare un'integrazione a quella che era la mia linea strategica: dato che si è chiarito che si tratta di un MessageBox previsto dal progetto stesso, a questo punto si sarebbe potuto pensare - ovviamente - ad una sub-routine specifica nello stesso applicativo.
Ma comunque questa ipotesi è chiaramente ormai superata.


costruire un rettangolo, simulazione di MessageBox, attraverso il codice html.
In che zenzo ? Come potresti costruire un rettangolo attraverso il codice html ?
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 08 Ottobre 2012, 19:24:02
costruire un rettangolo, simulazione di MessageBox, attraverso il codice html.
In che zenzo ? Come potresti costruire un rettangolo attraverso il codice html ?
In effetii quello che ho scritto abbagliato dal lampo arrivato in quel momento non era un concetto completo, perciò non potevo capirmi nemmeno io. Riprendendo a mente serena quanto scritto, mi sono accorto che l'HTML ha bisogno di un oggetto a cui appoggiarsi e l'oggetto bisogna costruirlo. Ho pensato allora di creare una frame dentro la quale disporre una TextEdit nella quale scrivere il messaggio informativo del tipo (warning, Info, Error) da decidere. La stessa TextEdit potrebbe contenere l'icona uguale a quella della MessageBox, mentre sotto alla TextEdit potrei porre il pulsante di conferma per riavviare il programma dal punto dell'interruzione. Qualcosa simile all'immagine allegata.  :)
 :ciao:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 08 Ottobre 2012, 19:40:06
Sì, ho capito.
 Be'... sì, puoi usare anche l'html (proprio ora ho finito di aggiungere nell'apposita pagina della WIKI http://www.gambas-it.org/wiki/index.php/Controlli_e_finestre_che_supportano_il_codice_HTML altri codici supportati da alcuni oggetti che possono gestire il codice html).
Però è chiaro che puoi usare anche le sole funzioni proprie di Gambas.
A te la scelta.  :-\
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: sotema - 08 Ottobre 2012, 20:58:17
Scusa Picavbg,
a me pare che tu stia reinventando la ruota.
 ;D
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 08 Ottobre 2012, 21:44:09
Scusa Picavbg,
a me pare che tu stia reinventando la ruota.
 ;D
Non é certamente una soluzione entusiasmante. É come se, per grattarmi la parte del collo che sta sotto l'orecchio destro, usassi la mano sinistra. oppure, per i mancini, al contrario. Hai mai provato? Nooooo! Allora prova e ... vedi l'effetto che fa.  :rotfl:

Però, almeno, non subisco le scelte arroganti, diciamo così, di Gambas. Nel frattempo, imparo un pò di "html".  ;D
 :ciao:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: fsurfing - 08 Ottobre 2012, 22:22:53
ma scusate.. solo a me i message box compaiono sempre al centro dello schermo?
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 08 Ottobre 2012, 23:11:38
Però, almeno, non subisco le scelte arroganti, diciamo così, di Gambas.
...e ti butti nel fuoco dell'html !


ma scusate.. solo a me i message box compaiono sempre al centro dello schermo?
Da quello che ho potuto constatare, il comportamento varia. Sul mio PC (Linux Mint 13 - Ubuntu - Gnome) i MessageBox, previsti da un'applicazione Gambas, appaiono sulla parte centrale superiore della finestra dell'applicazione. Insomma seguono l'applicazione, e sono irremovibili con il mouse.
Sul portatile, identico sistema e ambiente grafico, i MessageBox sono invece spostabili con il mouse.   :-\
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 08 Ottobre 2012, 23:39:42
...e ti butti nel fuoco dell'html !

Infatti ho già cominciato a scottarmi! ;D
Ma visto che ormai sono dentro le fiamme, vorrei concludere la prova, imparando qualcosa.  Il nuovo, sconosciuto, é sempre affascinante.   ;)
 :ciao:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 08 Ottobre 2012, 23:54:53
Ho pensato di modificare la mia TextEdit, inserendovi anche l'icona "warning" che nell'allegato trasmesso prima, avevo scelto fra le proprietà della Frame contenente la TextEdit.
Ho letto in una delle tante documentazioni disponibili su "html" che si possono inserire immagini. Perciò ho tentato di organizzare il mio messaggio in formato tabella con tre righe e 1 colonna nella prima riga, 2 colonne nella 2a e 3a riga:
 
Codice: [Seleziona]
MsgMio.richtext = "<TABLE" & 
  "<Tr><TD> <B> ATTENZIONE! </b></TD>" &
  "<Tr><TD  rowspan=2 width=300 <A HREF=/home/piero/gambas3-sorgenti/comp/src/gb.form.stock/stock/scalable/warning.svg>" &
  "<TD Nessun Conto inizia col NOME digitato>" &
  "<TR><TD ------------------ Correggi ------------------>"
ma non funziona e l'icona "warning" non compare. Potrebbe però darsi che non abbia saputo trascrivere il percorso esatto del file che la contiene. Vorrei perciò isolare le due problematiche.
Quindi penso che mi convenga prima sostituire l'icona con un'immagine di cui conosco la locazione, ma non ora.
 :sleepy:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 09 Ottobre 2012, 00:54:14
ho tentato di organizzare il mio messaggio in formato tabella con tre righe e 1 colonna nella prima riga, 2 colonne nella 2a e 3a riga:
 
Codice: [Seleziona]
MsgMio.richtext = "<TABLE" & 
   "<Tr><TD><B> ATTENZIONE! </b></TD>" &
  "<Tr><TD  rowspan=2 width=300 <A HREF=/home/piero/gambas3-sorgenti/comp/src/gb.form.stock/stock/scalable/warning.svg>" &
  "<TD Nessun Conto inizia col NOME digitato>" &
  "<TR><TD ------------------ Correggi ------------------>"
ma non funziona e l'icona "warning" non compare. Potrebbe però darsi che non abbia saputo trascrivere il percorso esatto del file che la contiene. Vorrei perciò isolare le due problematiche.
Quindi penso che mi convenga prima sostituire l'icona con un'immagine di cui conosco la locazione, ma non ora.

In vero, il codice presenta alcuni problemi.
Ogni comando va chiuso fra i segni <>, anche quando vengono specificate sue proprietà e valori.
Quando vuoi caricare un'immagine che è presente in memoria va utilizzato il comando IMG src (A HREF si usa invece per i collegamenti esterni via WEB, o anche interni alla pagina html) (l'immagine ovviamente può essere caricata, se lo si preferisce, anche nella cartella "Dati" del progetto, e quindi richiamata semplicemente così: IMG src=mia_immagine.xxx)
Volendo, si può anche riportare in fine la chiusura di ogni comando costituente la tabella.

Dunque quel codice va così corretto ed avremo:
Codice: gambas [Seleziona]

MsgMio.RichText = " &lt;TABLE>" &
  "&lt;TR>&lt;TD>&lt;B> ATTENZIONE! &lt;/b>&lt;/TD>&lt;/tr>" &
  "&lt;TR>&lt;TD rowspan=2 width=300>&lt;IMG src=percorso_mia_immagine>&lt;/td>" &
  "&lt;TD>Nessun Conto inizia col NOME digitato&lt;/td>" &
  "&lt;TR>&lt;TD> ------------------ Correggi ------------------&lt;/td>&lt;/tr>" &
  "&lt;/table>"
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 09 Ottobre 2012, 18:18:51
Quando vuoi caricare un'immagine che è presente in memoria va utilizzato il comando IMG src (A HREF si usa invece per i collegamenti esterni via WEB, o anche interni alla pagina html) (l'immagine ovviamente può essere caricata, se lo si preferisce, anche nella cartella "Dati" del progetto, e quindi richiamata semplicemente così: IMG src=mia_immagine.xxx)
Prima di leggere il tuo consiglio, avevo rivisitato il mio approccio di codice "HTML" ed ero riuscito a farlo funzionare, in parte. Il problema persistente é sull'immagina da fare comparire sotto la prima riga del messaggio ed alla sinistra delle colonne messaggio delle righe 2 e 3.
Come mi hai indicato, ho copiato un'immagine di tipo icona nella acrtella "Dati", interna a quella del mio progetto ContabFam. Il codice riscritto dopo avere seguito il tuo suggerimento ed avere letto qualcosa in giro é il seguente:
Codice: [Seleziona]
  MsgMio.richtext = "<TABLE>" & 
"<TR><TD width=297 align=center <B>ATTENZIONE!</b>< HR SIZE = 3 WIDTH = 297></TR>" &
"<Tr><TD rowspan=2  width=48><IMG src = PinguinoSherlockHolmes.jpg HEIGHT=48 WIDTH=48> " &
 "<TD> Nessun Conto inizia col NOME digitato</TD></TR>" &
  "<TR><TD>------------------ Correggi ------------------</TD></TR></TABLE>"
Il risultato è assai diverso da quello che pensavo: non funziona la visualizzazione dell'immaginetta e la lunghezza della 1a colonna delle righe 2 e 3, come puoi constatare dall'allegato.
 :(
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 09 Ottobre 2012, 18:25:45
ma scusate.. solo a me i message box compaiono sempre al centro dello schermo?
A me si manifesta un effeto strano. Ho provato a mettere in sequenza tre MessageBox, una .Info, una .Wraning ed una .Error. Ebbene, anche cambiando l'ordine di esecuzione, la prima compare semre al centro, quasi attaccata alla barra del titolo della Form, le altre, compaiono al centro dello schermo.  ???
 :ciao:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 09 Ottobre 2012, 20:40:39
non funziona la visualizzazione dell'immaginetta e la lunghezza della 1a colonna delle righe 2 e 3, come puoi constatare dall'allegato.
Ho provato il codice, ed ho provato due immagini, una .gif l'altra .jpg: ebbene a me le immagini appaiono entrambe  :-\ e si riducono alle dimensioni da te impostate (HEIGHT=48 WIDTH=48).

Riguardo alle dimensioni dell'ampiezza delle colonne, lì ce ne sono due.
Se vuoi modificare la dimensione della colonna di sinistra, devi agire (come hai già fatto) sull'apposita proprietà Width della cella:
Codice: gambas [Seleziona]

 "&lt;TR>&lt;TD width=297 align=center etc... etc


Se vuoi modificare quella di destra, devi spostare la modifica della proprietà qui:
Codice: gambas [Seleziona]

 "&lt;TD  width=valore_che_vuoi>Nessun Conto inizia...etc...etc


e toglierla da: "&lt;TR >&lt;TD rowspan=2  width=48>&lt;IMG src etc...etc

inoltre devi porre su True la proprietà Wrap della TextEdit !
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 10 Ottobre 2012, 00:07:44
Ho provato il codice, ed ho provato due immagini, una .gif l'altra .jpg: ebbene a me le immagini appaiono entrambe  :-\ e si riducono alle dimensioni da te impostate (HEIGHT=48 WIDTH=48).
Ma non hai modificato niente nel codice che ho allegato nel mio ultimo post?
Stasera sono riuscito ad ottenere un risultato soddisfacente, sia impostando Textedit.Wrap=True, sia modificando ulteriormente il codice "html":
Codice: [Seleziona]
 MsgMio.richtext = "<TABLE>" & 
"<TR><TD width=290 align=center colspan=2> <B>ATTENZIONE!</b>< HR SIZE = 3 WIDTH = 290></TD></TR>" &
"<Tr><TD width=48><IMG src = Dati/PinguinoSherlockHolmes.jpg  HEIGHT=48 WIDTH=48></TD>" &
"<TD  width=242> Nessun Conto inizia col NOME digitato</TD></TR>" &
"<TR><TD colspan=2>------------------ Correggi ------------------</TD></TR></TABLE>"

Ho difficoltà invece a fare comparire l'icona warning contenuta nello stosck di Gambas. Infatti scrivendo "IMG src=warning.svg", l'icona non compare. Ho cercato di individuarne la directory in cui rsiede, ma non sono riuscito a capire dove possa essere ubicata. Ho cercato anche fra i file nascosti, ma é stato inutile. Purtroppo per me, io non sono determinato fino in fondo.  :-\
Penso perciò che alla fine rinunzierò all'icona inserita nel codice "html" del messaggio e inserirò un pictureBox dentro la frame a cui appartiene anche la TextEdit.
 :ciao:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 10 Ottobre 2012, 00:36:29
Ma non hai modificato niente nel codice che ho allegato nel mio ultimo post?
No. Non ho modificato niente.


Codice: [Seleziona]
<IMG src = Dati/PinguinoSherlockHolmes.jpg
...non mi sembra che si debba porre anche la parola "Dati", se vuoi richiamare un file che hai posto nel progetto !


Ho difficoltà invece a fare comparire l'icona warning contenuta nello stosck di Gambas. Infatti scrivendo "IMG src=warning.svg", l'icona non compare. Ho cercato di individuarne la directory in cui rsiede, ma non sono riuscito a capire dove possa essere ubicata.
Fai una semplice e normale ricerca scrivendo: warning
A me - ma io ho Mint - l'icona è per esempio qui: /usr/share/icons/Mint-X/status/scalable/dialog-warning.svg
In un altro pc ad esempio, dove ho kubuntu con KDE, ho trovato l'icona del warning qui: /usr/share/icons/default.kde4/128x128/status/dialog-warning.png


Purtroppo per me, io non sono determinato fino in fondo.
Penso perciò che alla fine rinunzierò all'icona
Non potrai diventare mai un asino, né un mulo.
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 10 Ottobre 2012, 00:56:39
Purtroppo per me, io non sono determinato fino in fondo.
Non potrai diventare mai un asino, né un mulo.
Infatti, ho sbagliato ad esprimermi, avrei dovuto scrivere "testardo come te"  :evil:
Se continui imperterritamene a scrivere con la tua nuova terminologia di qualche settimana, ti prometto che non ti risponderò più!  >:( :evil:
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 10 Ottobre 2012, 00:59:06
Se continui imperterritamene a scrivere con la tua nuova terminologia di qualche settimana, ti prometto che non ti risponderò più!  >:( :evil:
Va be'... ma l'icona l'hai trovata o no ?
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 10 Ottobre 2012, 12:03:36
Io non ho capacità di paziente insistenza, ma con una spinta, a volte ce la faccio. Ci sono quasi. Devo solo aggiustare ancora qualcosina e la mia pseudo.MessageBox.fai-da-te è pronta. Qui sotto c'é il codice e l'allegato dell'output prodotto:
 MsgMio.richtext = "<TABLE>" &
Codice: [Seleziona]
"<TR><TD width=290 align=center colspan=2> <B>ATTENZIONE!</b>< HR SIZE = 3 WIDTH = 290></TD></TR>" & 
"<Tr><TD width=48><IMG src= /home/piero/gambas3-sorgenti/comp/src/gb.form.stock/stock/scalable/warning.svg HEIGHT = 48 WIDTH = 48 > < / TD > " & ""
"<TD  width=242> Nessun Conto inizia col NOME digitato</TD></TR>" &
"<TR><TD colspan=2>------------------ Correggi ------------------</TD></TR></TABLE>"
Il risultato mi pare assai soddisfacente, ma soprattutto potrò piazzare le mie Finestre-Messaggi dove vorrò, dentro la Form corrente, secondo le mie necessità.
Grazie, campione  :dj:
Ciao.
Titolo: Re: la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 10 Ottobre 2012, 13:11:48
Ora si che ce l'ho fatta:
Codice: [Seleziona]
MsgMio.richtext = "<TABLE>" & 
"<TR><TD width=100% align=center colspan=2> <B>ATTENZIONE!</b>< HR SIZE = 3 WIDTH = 100%></TD></TR>" &
"<Tr><TD width=3% rowspan=2><IMG src= /home/piero/gambas3-sorgenti/comp/src/gb.form.stock/stock/scalable/warning.svg HEIGHT=48 WIDTH=48></TD>" &
    "<TD width=97%> <BR>Nessun Conto inizia col NOME digitato</TD></TR>" &
"<TR><TD width=97%>------------------ Correggi ------------------</TD></TR></TABLE>"
:2birre:
Titolo: Re: [Risolto] la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 06 Settembre 2013, 11:58:24
Riprendo questa vecchia discussione, perchè la mia scelta di allora era faticosa da gestire e per emettere un semplice messaggio volante non vale la pena di costruire un castello.

Sono riuscito, seguendo quanto trovato nel wiki (http://www.gambas-it.org/wiki/index.php?title=Impostare_le_dimensioni_del_MessageBox) della nostra comunità, a modificare le dimensioni della MessageBox di Gambas. Non capisco e non gradisco l'impossibilità di poterla posizionare agevolmente nello schermo, con un semplice parametro tipo "PAGEX=? PAGEY=?" in HTML. Ho provato in tutti modi a cui ho potuto pensare di inserire i suddetti parametri, ma sempre senza successo.  :rolleyes:
Secondo me è un piccolo inconveniente che, bontà sua,  potrebbe risolvere lo stesso autore di Gambas.
 :(
Titolo: Re: [Risolto] la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 06 Settembre 2013, 12:27:20
Non capisco e non gradisco l'impossibilità di poterla posizionare agevolmente nello schermo...

...ma, scusa, non puoi impostare le coordinate della finestra, che hai creato, attraverso le proprietà .X  ed  .Y  della Classe che hai usato per generare quella finestra ?   :-\
Titolo: Re: [Risolto] la mmessage.Box nasconde la Text.Box relativa
Inserito da: Picavbg - 06 Settembre 2013, 12:44:06
...ma, scusa, non puoi impostare le coordinate della finestra, che hai creato, attraverso le proprietà .X  ed  .Y  della Classe che hai usato per generare quella finestra ?   :-\
la finestra di cui parlo è la classica MessageBox generata con codice simile al seguente:
Codice: [Seleziona]
Message.Warning("<TABLE WIDTH=500><TR><TD><CENTER> <b> Nessuna riga è stata selezionata </b>" & String$(15, "\t") & "<BR> per provvedere all 'autocorrezione <BR> <BR> -------- <b> SELEZIONARE ALMENO UNA RIGA </b> -------- </CENTER>")
Titolo: Re: [Risolto] la mmessage.Box nasconde la Text.Box relativa
Inserito da: vuott - 06 Settembre 2013, 12:47:31
In questo tuo messaggio mi era parso di capire  :-\ che avresti creato una finestra ad hoc, tralasciando il MessageBox.