Non mi sembra.
Puoi ottenere un risultato analogo lungo la riga prescelta inserendo degli spazi prima del testo mediante la funzione "String()".
Esempio:
TextArea1.Text = String(20, Chr(32)) & "abcde"
Una textarea con più righe, dove c'è un dato a inizio riga e il relativo valore da posizionare a una certa posizione da inizio riga.
Tipo una cosa del genere?
Public Sub Form_Open()
Dim aStringhe As String[] = ["Chiave inglese", "11,20", "Ferro da stiro a vapore", "32,40", "Macchinetta da caffè per cialde", "112,00", "Aermacchi bicilindrica 1953", "7.500,00"]
Dim iLen1, iLen2 As Integer
Dim sStringa1, sStringa2 As String
TextArea1.Font = Font["monospace,11"]
For i As Integer = 0 To aStringhe.Max
If i > 1 Then
If i Mod 2 = 0 Then
If Comp(aStringhe[i - 2], aStringhe[i]) = 1 Then
sStringa1 = aStringhe[i - 2]
Else
sStringa1 = aStringhe[i]
Endif
Else
If Comp(aStringhe[i - 2], aStringhe[i]) = 1 Then
sStringa2 = aStringhe[i - 2]
Else
sStringa2 = aStringhe[i]
Endif
Endif
Endif
Next
iLen1 = String.Len(sStringa1) + 4
iLen2 = String.Len(sStringa2)
TextArea1.Text = "DESCRIZIONE" & Space(iLen1 - String.Len("DESCRIZIONE")) & Space(iLen2 - String.Len("PREZZO")) & "PREZZO" & "\n\n"
For i As Integer = 0 To aStringhe.Max Step 2
TextArea1.Text &= aStringhe[i] & Space(iLen1 - String.Len(aStringhe[i])) & Space(iLen2 - String.Len(aStringhe[i + 1])) & aStringhe[i + 1] & "\n"
Next
End
Se serve qualche spiegazione sono qui :)
Tipo una cosa del genere?
Poniamo il caso che si abbia soltanto il dato all'inizio di ogni riga e che il "relativo valore" debba essere posizionato via codice solo successivamente...
Intendi dire qualcosa del genere (rimanendo nell'esempio precedente)?
Public Sub Form_Open()
Dim aDescrizione As String[] = ["Chiave inglese", "Ferro da stiro a vapore", "Macchinetta da caffè per cialde", "Aermacchi bicilindrica 1953"]
TextArea1.Font = Font["monospace,11"]
TextArea1.Text = "DESCRIZIONE" & "\n\n"
For i As Integer = 0 To aDescrizione.Max
TextArea1.Text &= aDescrizione[i] & "\n"
Next
End
Public Sub Button1_Click()
Dim aStringhe As String[] = ["DESCRIZIONE", "PREZZO", "Chiave inglese", "11,20", "Ferro da stiro a vapore", "32,40", "Macchinetta da caffè per cialde", "112,00", "Aermacchi bicilindrica 1953", "7.500,00"]
Dim aSplit As String[] = Split(TextArea1.Text, "\n", Null, True)
Dim iLen1, iLen2, iStart As Integer
Dim sStringa1, sStringa2, sPrezzo As String
For i As Integer = 0 To aSplit.Max
If i > 0 Then
If Comp(aSplit[i - 1], aSplit[i]) = 1 Then
sStringa1 = aSplit[i - 1]
Else
sStringa1 = aSplit[i]
Endif
Endif
Next
iLen1 = String.Len(sStringa1) + 4
For i = 0 To aStringhe.Max
If i > 1 Then
If i Mod 2 <> 0 Then
If Comp(aStringhe[i - 2], aStringhe[i]) = 1 Then
sStringa2 = aStringhe[i - 2]
Else
sStringa2 = aStringhe[i]
Endif
Endif
Endif
Next
iLen2 = String.Len(sStringa2)
For i As Integer = 0 To aSplit.Max
iStart = String.Instr(TextArea1.text, aSplit[i]) - 1
sPrezzo = aStringhe[aStringhe.Find(aSplit[i]) + 1]
TextArea1.Pos = iStart + String.Len(aSplit[i])
TextArea1.Insert(Space(iLen1 - String.Len(aSplit[i])) & Space(iLen2 - String.Len(sPrezzo)) & sPrezzo)
Next
End
Cliccando sul Button, mi dà errore (" Argomento sbagliato ") qui:
TextArea1.Insert(...etc...)
Perché usare una 'TextArea' quando si può usare una 'GridView'?
(https://www.cogier.com/gambas/lineup.png)
GridView1 As GridView
Public Sub Form_Open()
Dim aStringhe As String[] = ["DESCRIZIONE", "PREZZO", "", "", "Chiave inglese", "11,20", "Ferro da stiro a vapore", "32,40", "Macchinetta da caffè per cialde", "112,00", "Aermacchi bicilindrica 1953", "7.500,00"]
Dim iLoop, iRow As Integer
With Me
.padding = 5
.Height = 150
.Width = 300
.Arrangement = Arrange.Vertical
End With
With GridView1 = New GridView(Me) As "GridView1"
.Clear
.Expand = True
.Grid = False
.Rows.Count = aStringhe.Count / 2
.Columns.Count = 3
End With
For iLoop = 0 To aStringhe.Max Step 2
GridView1[iRow, 0].Text = aStringhe[iLoop]
GridView1[iRow, 1].Text = aStringhe[iLoop + 1]
GridView1[iRow, 1].Alignment = Align.Right
Inc iRow
Next
GridView1.Columns.Width = -1
End
Tipo una cosa del genere?
Poniamo il caso che si abbia soltanto il dato all'inizio di ogni riga e che il "relativo valore" debba essere posizionato via codice solo successivamente...
Intendi dire qualcosa del genere (rimanendo nell'esempio precedente)?
Public Sub Form_Open()
Dim aDescrizione As String[] = ["Chiave inglese", "Ferro da stiro a vapore", "Macchinetta da caffè per cialde", "Aermacchi bicilindrica 1953"]
TextArea1.Font = Font["monospace,11"]
TextArea1.Text = "DESCRIZIONE" & "\n\n"
For i As Integer = 0 To aDescrizione.Max
TextArea1.Text &= aDescrizione[i] & "\n"
Next
End
Public Sub Button1_Click()
Dim aStringhe As String[] = ["DESCRIZIONE", "PREZZO", "Chiave inglese", "11,20", "Ferro da stiro a vapore", "32,40", "Macchinetta da caffè per cialde", "112,00", "Aermacchi bicilindrica 1953", "7.500,00"]
Dim aSplit As String[] = Split(TextArea1.Text, "\n", Null, True)
Dim iLen1, iLen2, iStart As Integer
Dim sStringa1, sStringa2, sPrezzo As String
For i As Integer = 0 To aSplit.Max
If i > 0 Then
If Comp(aSplit[i - 1], aSplit[i]) = 1 Then
sStringa1 = aSplit[i - 1]
Else
sStringa1 = aSplit[i]
Endif
Endif
Next
iLen1 = String.Len(sStringa1) + 4
For i = 0 To aStringhe.Max
If i > 1 Then
If i Mod 2 <> 0 Then
If Comp(aStringhe[i - 2], aStringhe[i]) = 1 Then
sStringa2 = aStringhe[i - 2]
Else
sStringa2 = aStringhe[i]
Endif
Endif
Endif
Next
iLen2 = String.Len(sStringa2)
For i As Integer = 0 To aSplit.Max
iStart = String.Instr(TextArea1.text, aSplit[i]) - 1
sPrezzo = aStringhe[aStringhe.Find(aSplit[i]) + 1]
TextArea1.Pos = iStart + String.Len(aSplit[i])
TextArea1.Insert(Space(iLen1 - String.Len(aSplit[i])) & Space(iLen2 - String.Len(sPrezzo)) & sPrezzo)
Next
End
Molto bella e ben fatta grazie Gianluigi, anche se molto lontana dal mio modo (mooooolto scadente ) di programmare...io sono ancora fermo al TextArea1.text=TextArea1.text & Chr$(13) & "Aermacchi 350 "& " "& prezzo
e via di seguito con il problema di posizionare via via il prezzo sempre sulla stessa colonna. Alla fine comunque la TextArea mi serve per poi selezionare e copiare il testo visualizzato per poi trattarlo su LibreO Writer
Come promesso, anche se in ritardo, allego un programma per la stampa delle schede tecniche.
È un filino complicato ed è creato con l'ultima master.
Dimmi se per caso non riesci a farlo funzionare con il tuo Gambas e chiedi pure lumi riguardo al codice.
Purtroppo non conosco la materia mi sono dovuto basare esclusivamente su quanto hai postato.
Se il tuo programma crea automaticamente i dati devi fare in modo di inviarli alla classe e da li al report.
Ciao
P.S. Report.Path è stata introdotta da poco se hai la stabile oppure una master un po datata devi commentare il codice:
hReport.Path = "/tmp/" & aPanel[0].Cliente & ".pdf"
altrimenti otterrai un errore.
Programma rimosso vedi il post successivo (appena sotto)