Autore Topic: [RISOLTO] Ridimensionare TUTTO automaticamente  (Letto 1820 volte)

Offline TeoLupo

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
[RISOLTO] Ridimensionare TUTTO automaticamente
« il: 22 Luglio 2009, 16:38:40 »
Salve a tutti,

prima di tutto un saluto e un ringraziamento. Spero di trovare l'aiuto che cerco e di essere d'aiuto a chi ne cerca nei limiti delle mie possibilità (scarse :-x).

Ho iniziato da poco a programmare in Gambas principalmente per la sua somiglianza a VB (che conosco a livello scolastico) tuttavia fin dalle prime righe di codice mi sono accorto di non essere in grado di fare una cosa indispensabile per il mio attuale progetto.

1. Ho la necessità di creare una form che l'utente possa ridimensionare a piacimento ridimensionando automaticamente anche gli elementi al suo interno (textbox, combobox, bottoni,...) magari in scala.
2. Se la form diventa più piccola di X deve essere possibile interrompere il ridimensionamento degli elementi e far comparire le barre di scorrimento.

Credo che la seconda parte sia abbastanza facile da realizzare ma non sapendo fare la prima non ho potuto provare (potrebbero anche bastare dei parametri X e Y da passare ad una funzione...).

In ogni caso Grazie mille a tutti per l'aiuto!

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Ridimensionare TUTTO automaticamente
« Risposta #1 il: 22 Luglio 2009, 16:51:22 »
Ciao e benvenuto...

devi sapere che i nuovi arrivati devono versare dei soldi sul mio conto corrente quindi tra un pò ti arriva un email con le mie coordinate. Per favore sii rapido che ho tante spese da fare.....:-D

Scherzi a parte (in onda il giovedì alle 21.00)

il tuo problema è più semplice di quanto pensi.

immagina di volere un button che sia grande quanto tutto il form (supposizioni stupide ovviamente). Puoi utilizzare semplicemente

Codice: [Seleziona]
button.widht = Me.widht
button.height = Me.height


dove Me dice all'interprete di tenere in considerazione il form su cui sei.
Ovviamente se vuoi il bottone che sia alto la metà del form usi:

Codice: [Seleziona]
button.widht = Me.widht / 2
button.height = Me.height / 2


dove /2 è la semplice divisione matematica.

Queste righe di codice devi implementarle nella funzione Form_resize per dire a gambas di usarle quando il form viene ridimensionato.

Sono stato soddisfacente o serve altro?

Offline TeoLupo

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: Ridimensionare TUTTO automaticamente
« Risposta #2 il: 23 Luglio 2009, 10:19:57 »
Infatti ho già percorso questa strada...creando un modulo da chiamare una volta per ogni elemento ad evento resize della form che passi come parametri le coordinate (X e Y) e le dimensioni (W e H) degli elementi espressi in percentuale sulle dimensioni della form (e quindi la form stessa).

esempio:
   ...
   MdlPosizionamento.Posizione(elemento, x, y, w, h, me)
   MdlPosizionamento.Posizione(elemento, x, y, w, h, me)
   MdlPosizionamento.Posizione(elemento, x, y, w, h, me)
   MdlPosizionamento.Posizione(elemento, x, y, w, h, me)
   ...

E' proprio pesante da leggere per i 70-80 elementi con cui devo lavorare...

Sinceramente mi sembrava una forzatura e sono sorpreso che non sia previsto qualcosa di automatico, se mi confermi che però è così continuerò con questo metodo...

Grazie per l'aiuto.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Ridimensionare TUTTO automaticamente
« Risposta #3 il: 23 Luglio 2009, 12:54:34 »
E' così....non penso che esista un linguaggio di programmazione che permette il ridimensionamento automatico...se poi non è così allora ho imparato una cosa nuova!

Offline TeoLupo

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: Ridimensionare TUTTO automaticamente
« Risposta #4 il: 23 Luglio 2009, 13:47:39 »
Vabbè...in tal caso continuerò con quel modulo, chissà che non ci faccia su l'occhio...

Grazie di nuovo!

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Ridimensionare TUTTO automaticamente
« Risposta #5 il: 23 Luglio 2009, 14:23:22 »
Una curiosità: ma il tuo modulo contiene una funzione che fa quello che ti ho detto io?

Offline TeoLupo

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: Ridimensionare TUTTO automaticamente
« Risposta #6 il: 23 Luglio 2009, 16:09:28 »
Una Subroutine, si...
all'inizio ho fatto anche io semplicemente come hai consigliato tu nel tuo precedente post ma mi sono reso conto che se X e Y non si adattano alla dimensione della form assieme a W e H gli elementi si sovrappongono, in più ho anche voluto mettere delle dimensioni massime e minime per l'elemento in modo da non trovarmi con textbox con un'altezza di 1 o 150.

Ora sono al lavoro, magari quando torno a casa posto il codice...può fare comodo a qualcuno forse...e chissà che qualcun'altro non trovi il modo di renderlo un po' più digeribile per l'occhio umano...

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Ridimensionare TUTTO automaticamente
« Risposta #7 il: 23 Luglio 2009, 16:11:20 »
bene!

se hai risolto il tuo problema puoi inserire [Risolto] nel titolo del topic. Grazie...;-)

Offline TeoLupo

  • Gamberetto
  • *
  • Post: 7
    • Mostra profilo
Re: Ridimensionare TUTTO automaticamente
« Risposta #8 il: 23 Luglio 2009, 18:55:15 »
Dunque come promesso posto il codice della subroutine posiziona da me creata per posizionare i vari elementi all'interno di una form.
Come ho detto è un po' incasinata e vedere una sfilza di elementi con i vari parametri al seguito è davvero brutto...spero in un vostro aiuto per migliorare e correggere eventuali errori perché dovrò usarla molto... :-?

Codice: [Seleziona]
PUBLIC SUB posiziona(elemento AS Object, X AS Integer, Y AS Integer, W AS Integer, H AS Integer, Form AS form, MaxW AS Integer, MaxH AS Integer, MinW AS Integer, MinH AS Integer)

  DIM Larghezza AS Integer = 0
  DIM Altezza AS Integer = 0
 
  'esprimo in percentuale la posizione X e Y di elemento rispetto alle
  'dimensioni della form

  elemento.x = (Form.w / 100) * X    
  elemento.y = (Form.h / 100) * Y
 
  'assegno ad una variabile la larghezza espressa in percentuale

  Larghezza = (Form.w / 100) * W

  'verifico che siano rispetta te le condizioni di larghezza minima e massima
  'se il parametro passato è 0 ignora la condizione

  IF Larghezza < MaxW OR MaxW = 0 THEN
    IF Larghezza > MinW OR MinW = 0 THEN
      elemento.w = Larghezza
    ELSE
      elemento.w = MinW
    ENDIF
  ELSE
  elemento.w = MaxW
  ENDIF
 
  'come per larghezza

  Altezza = (Form.h / 100) * H
  IF Altezza < MaxH OR MaxH = 0 THEN
    IF Altezza > MinH OR MinH = 0 THEN
      elemento.h = Altezza
    ELSE
      elemento.h = MinH
    ENDIF
  ELSE
  elemento.h = MaxH
  ENDIF

END


Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [RISOLTO] Ridimensionare TUTTO automaticamente
« Risposta #9 il: 24 Luglio 2009, 00:24:54 »
Ti chiedo per favore di racchiudere il codice tra gli appositi tag code....questo favorisce la leggibilità e la chiarezza del codice stesso...grazie...