FORM con contenuti ON THE FLY

Buongiorno a tutti.
La mia App per la contabilit oramai quasi finita… ( ce ne sono in giro una marea … ma non per MAC OS e LINUX ) mancano alcuni aggiustamenti, ma veramente delle piccolezze.
In questo momento sto facendo debugging a tutto spiano per trovare errori e correggerli, e devo scrivere un tool per la verifica/modifica dei dati in archivio.
In pratica devo poter creare una form con le barre di scorrimento per visualizzare / cercare / modificare i dati nei record
Il contenuto variabile perch letto direttamente dal ‘database schema’ e quindi devo poter inserire label e textfield in base a questa tabella

Chiedo quindi, qualcuno ha un’idea di come creare ON THE FLY elementi in una finestra ?
E per attivare le barre di scorrimento verticale ???

Sarei molto grato.
Di nuovo buona giornata a tutti.

Ti conviene creare dei container control per ogni tipologia di dato
Aggiungerli alla bisogna e spostarli all’interno usando una scrollbar (da dimensionare in base alla grandezza virtuale del contenuto)

Ho creato un container control con un canvas e una scrollbar …
Un’altro container control con una label e un textfield

che popolo in questo modo …

Sub apri(tabella as string)
  //  il db per l'applicazione
  dim db as new MySQLCommunityServer
  db.DatabaseName = procedure.dbname
  db.Host = procedure.dbhost
  db.Port = procedure.dbport
  db.Username = procedure.dbusername
  db.Password = procedure.dbpassword
  if not db.Connect() then
    MsgBox("Errore durante la connessione del db.azienda ")
  else
    // imposto il db come principale
    db.SQLExecute("USE " + procedure.dbname + ";")
    if db.error then
      MsgBox("Errore la selezione del db di default ")
      exit sub
    else
      db.SQLExecute("SET SQL_SAFE_UPDATES = 0;")
      if db.Error then 
        MsgBox("Errore durante esecuzione del comando set sql_safe_update ")
        exit sub
      end if
    end if
    
    // Se sono qui ... 
    
    dim rspragma as RecordSet
    rspragma = db.FieldSchema(tabella)
    dim campo(-1) as campotesto
    dim indice as integer = -1
    dim altezza as integer = 22
    dim margine as integer = 5
    
    while not rspragma.EOF
      indice = indice + 1 
      numeroelementi = numeroelementi + 1
      campo.Append(new campotesto)
      campo(indice) = new campotesto
      campo(indice).EmbedWithin( fieldarea.nomecanvas, 10, fieldarea.posizioneverticale + (25 * (indice + 1)), 360,22 )
      campo(indice).testoetichetta = rspragma.IdxField(1).StringValue
      campo(indice).field = rspragma.IdxField(1).StringValue
      campo(indice).tipocampo = rspragma.IdxField(2).IntegerValue
      campo(indice).lunghezza = rspragma.IdxField(5).IntegerValue
      rspragma.MoveNext
    wend 
    
  end if
  
End Sub

Il codice qui : CODICE

Vorrei capire come effettuare lo scrolling della finestra o dell’elemento fieldarea

Metterei il vettore dei campi come vettore della fieldarea
semplificherei i parametri (o sono sul fieldArea o nella procedura)

In ogni caso
Calcoli l’area (altezza) che fuori della dimensione attuale
Questa il valore dello scroll (se <=0 disabiliti lo scroll e lo poni come value a 0)

Al variare dello scroll ricalcoli la posizione dei campi (top) in base alla loro (altezza + margineverticale) * i

Ricordati di ricalcolate l’altezza disponibile sul resized

Qui trovi un esempio (al volo) sul tuo codice

https://www.dropbox.com/s/n224fwjz5hi43y7/test-3.xojo_binary_project?dl=0