Autore Topic: Modificare le proprietà x e y in tutti i controlli di un form  (Letto 1575 volte)

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 979
    • Mostra profilo
Come da titolo vorrei modificare le proprietà x e y dei controlli di un form
ho usato questo
Codice: [Seleziona]

dim txt as Control

 FOR EACH txt IN ME.Controls
        Object.Class(txt).x = Object.Class(txt).x * percentuale
 NEXT
 
ma mi riporta errore poichè non conosce la proprietà x in class
dove sbaglio?

grazie
"e il naufragar m'è dolce in questo mar"

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #1 il: 29 Agosto 2011, 13:02:26 »
Object.Class() ti ritorna la classe NON INSTANZIATA di un oggetto.

Il ciclo FOR ti ritorna già un oggetto, istanziato, che puoi usare direttamente.

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 979
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #2 il: 29 Agosto 2011, 14:02:32 »
Quindi dovrebbe essere così?

Codice: [Seleziona]
dim txt as Control

 FOR EACH txt IN ME.Controls
        txt.x = txt.x * percentuale
 NEXT

al momento non ho gambas sottomano ..
"e il naufragar m'è dolce in questo mar"

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #3 il: 29 Agosto 2011, 16:20:44 »
Ricorda, inoltre, che non tutte le proprietà sono comuni a tutti gli oggetti.
Nel caso della locazione (e dimensione) può andare, ma poi devi analizzare quale tipo di oggetto stai trattando.
La proprietà Controls di Form è un array generico di oggetti generici, quindi può contenere tutto (o quasi...).

Infine, non voglio proprio entrare in merito al tuo programma, ma mi pare alquanto strana una gestione simile.
Ti ricordo che esistono oggetti Container, che si posizionano e dimensionano in modo automatico nella form (es. VBox, HBox, ecc.), oltre al fatto che esistono alcune proprietà a corredo di ogni oggetto grafico (es. Autoresize, Expand, ecc.).

Inserendo opportunamente questi oggetti contenitori, e agendo sulle proprità, puoi far assumere qualsiasi forma e posizione ai tuoi oggetti, e in modo automatico, senza una riga di codice (almeno per quanto riguarda codice tuo...).

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 979
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #4 il: 29 Agosto 2011, 16:31:48 »
ok
volevo ridimensionare automaticamente tutti gli  oggetti di un form quando ridimensiono il form stesso
se ne è già parlato, ma volevo provarci io
comunque questa sera do un occhio
VBox e HBox sinceramente non li ho ben capiti

EDIT:

lo so che non è la strada giusta ma mi è venuta fuori una cosa simile
Codice: [Seleziona]
' Gambas class file
PUBLIC x_old AS Integer
PUBLIC y_old AS Integer
PUBLIC x_new AS Integer
PUBLIC y_new AS Integer
PUBLIC x_percent AS Single
PUBLIC y_percent AS Single

PUBLIC SUB Form_Open()

x_old = ME.Width
y_old = ME.Height

END

PUBLIC SUB Form_Resize()

  DIM txt AS control
  x_new = ME.Width
  y_new = ME.Height
  x_percent = x_new / x_old
  y_percent = y_new / y_old
  x_old = x_new
  y_old = y_new
 
  FOR EACH txt IN ME.Controls
    IF txt.name <> "FMain" THEN
      txt.x = txt.x * x_percent
      txt.y = txt.y * y_percent
      txt.width = txt.width * x_percent
      txt.height = txt.height * y_percent
    ENDIF
  NEXT   

END
« Ultima modifica: 29 Agosto 2011, 23:00:06 da Akrobaticone »
"e il naufragar m'è dolce in questo mar"

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #5 il: 30 Agosto 2011, 13:59:03 »
Sperimentare a mano è sempre bene, ma in questo caso, una volta capito come funziona la cosa, credo ti convenga usare gli strumenti già presenti.

Usare gli oggetti VBox e HBox e relativamente semplice, basta anche qui speimentare. Stessa cosa usare le proprietà grafiche degli oggetti.

Gli oggetti VBox e HBox si comportano come pannelli, ma sono invisibili. Il loro scopo è appunto quello di definire l'aspetto degli oggetti in esso contenuti, e quindi anche le loro dimensioni. Ad esempio, per gli altri oggetti, esiste la proprità Expand (boolean), che fà sì che l'oggetto accetti le funzioni di riadattamento automatiche che invia il contenitore padre. Già con questa proprietà è possibile definire se un oggetto permetta il suo ridimensionamento o meno.
La proprietà Auroresize, invece, fà in modo che l'oggetto si autoadatti al suo contenuto. Ad esempio una TextBox si allarga, o restringe, automaticamente in base al testo.

Questi sopra sono alcuni esempi e spunti, basta verificarli sul campo...

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 979
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #6 il: 30 Agosto 2011, 14:12:48 »
non riesco a ben capire come funziona la proprietà expand
potreti postarmi un esempio?
grazie
"e il naufragar m'è dolce in questo mar"

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #7 il: 30 Agosto 2011, 22:01:20 »
L'esempio puoi creartelo tu stesso...

Sappi che la proprietà Expand abilita, come ti avevo scritto, il ridimensionamento dell'oggetto da parte del suo contenitore.
Per fare un esempio scritto, se tu inserisci in una form un qualsiasi oggetto, e per questo oggetto imposti a True la proprietà Expand, indi per cui imposti la proprietà Arrangment della form, vedrai che l'aspetto dell'oggetto cambia (durante l'esecuzione), quando ridimensioni la form con il mouse.

Prova...  :D

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 979
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #8 il: 30 Agosto 2011, 22:35:00 »
Ok bastano poche parole ma dette bene per capire
sei stato molto esauriente e finalmente ne so di più

il mio problema però è quello di fare in modo che se espando un form tutti i controlli presenti nella stessa si ridimensionano proporzionalmente ad essa.
le varie opzioni di expand e arrangement collocano gli oggetti  in posizioni predeterminate (righe, colonne riempiendo tutta la form) ma non rispettano l'aspetto e la collocazione originale degli oggetti
Sto provando su una form con molti oggetti, sembra funzionare, ma non vorrei che ci fossero strani comportamenti
Inoltre , particolare non irrilevante, i font rimangono gli stessi (listbox button textlabel etc..)


"e il naufragar m'è dolce in questo mar"

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #9 il: 01 Settembre 2011, 11:50:23 »
Ok bastano poche parole ma dette bene per capire
sei stato molto esauriente e finalmente ne so di più

il mio problema però è quello di fare in modo che se espando un form tutti i controlli presenti nella stessa si ridimensionano proporzionalmente ad essa.
le varie opzioni di expand e arrangement collocano gli oggetti  in posizioni predeterminate (righe, colonne riempiendo tutta la form) ma non rispettano l'aspetto e la collocazione originale degli oggetti
Sto provando su una form con molti oggetti, sembra funzionare, ma non vorrei che ci fossero strani comportamenti
Inoltre , particolare non irrilevante, i font rimangono gli stessi (listbox button textlabel etc..)




Concettualmente non è sbagliato. Il fatto che un oggetto adatti le proprie dimensioni al form, non vuol dire che deve cambiare anche la forma del testo. Non pensare ad una finestra grande o piccola ma pensa ad una risoluzione alta ed una bassa del monitor. Se fosse come divi tu chi ha un 800x600 troverebbe il form piccolo mentre chi ha risoluzioni elevate (nuove schede video e nuovi monitor) avrebbe dei caratteri enormi...;-)

Comunque nulla toglie che tu possa settare i valori del font da codice in base alle esigenze.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #10 il: 01 Settembre 2011, 14:07:15 »
Il discorso sui Font è diverso, anche se rientra comunque nel stesso concetto grafico.

Comunque, dalle tue risposte, ne evinco che non hai ancora ben chiaro come giocare con le impostazioni grafiche dei controlli, che è poi un discorso valido a prescindere dal linguaggio usato e,tranne alcune piccole differenze, è valido anche per i diversi windows manager.

E' ovvio che, agendo opportunamente sulle proprietà dei singoli oggetti, puoi ottenere più o meno tutto quello che vuoi, ma è altrettanto ovvio che devi prima capire come intervenire sulle varie opzioni.

Come prima cosa ti consiglio di giocare un pò con i vari controlli e le loro property, magari leggendo anche a cosa servono  ;D , dopo magari riesci a farti un'idea di cosa puoi ottenere e agire di conseguenza. Insomma, prima capire il comportamento in certe situazioni, poi applicarlo secondo le proprie esigenze.


Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #11 il: 01 Settembre 2011, 15:34:54 »
Se vuoi sul mio blog trovi meganalotto che l'interfaccia strutturata in questo modo. Ogni oggetto si dimensiona senza che io abbia scritto nulla nel codice.  ;)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #12 il: 01 Settembre 2011, 17:38:57 »
Appunto, mai che lavorassi un pochino..  eh?!?    :evil:


 :P :P :P

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #13 il: 01 Settembre 2011, 18:31:23 »
Appunto, mai che lavorassi un pochino..  eh?!?    :evil:


 :P :P :P

Lavoro già 10 ore al giorno. Figurati se devo alvorare pure quando voglio passare il tempo.... :)

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 979
    • Mostra profilo
Re: Modificare le proprietà x e y in tutti i controlli di un form
« Risposta #14 il: 02 Settembre 2011, 10:28:51 »
Se vuoi sul mio blog trovi meganalotto che l'interfaccia strutturata in questo modo. Ogni oggetto si dimensiona senza che io abbia scritto nulla nel codice.  ;)

Ok darò un occhiata

grazie a tutti per le info :2birre:
"e il naufragar m'è dolce in questo mar"