Determinare la dimensione di una casella di testo prima di disegnarla.Ciao,
è possibile ottenere la dimensione di una casella di testo prima che la casella di testo sia effettivamente disegnata?
Genero dinamicamente una finestra e ho bisogno di generare distanziatori per allineare oggetti. Quindi ho bisogno della dimensione di diversi elementi della casella di testo, prima che li disegni effettivamente.
Saluti
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Potresti voler provare Wait (0). Questo in pratica dice: aspetta fino a quando le attività sono state completate.
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Ecco la funzione che utilizzo per determinare l'altezza della casella di testo. L'argomento hide (1) impedisce che venga visualizzato.
get_height = function({_text, _pixels},
{Default Local},
pname = "get_height";
if (is missing(_text),
// then
pix_height = 0;
,
// else if
_text == "",
pix_height = 0;
,
// else we've got some text to work with
tb = text box(_text, set wrap(_pixels), set width(_pixels), hide(1));
tmp_win = new window("test", tb);
// Get size info
pix_height = (tb << get size)[2];
tmp_win << close window;
);
pix_height;
); // end get_height
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Ciao David,
in fondo questo è quello che ho fatto alla fine, solo che non ho cancellato la finestra ma semplicemente ho inviato i messaggi di dimensione corretta alle caselle di testo con "<< Imposta larghezza"
! ATTENZIONE!
tutti coloro che provano questo: dopo aver disegnato la finestra iniziale, devi aspettare un po 'prima di poter effettuare le misure con "<< Ottieni dimensioni". Un'attesa (0,0001) è stata sufficiente per me. Se non lo fai, succedono cose strane. (Mi ci è voluto mezzo giorno per capire).
! ATTENZIONE!
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Il metodo grezzo - crea una finestra che contiene il tuo contenuto - quindi invia messaggi per ottenere le dimensioni - quindi elimina la finestra (speriamo prima che venga effettivamente visualizzata) - quindi usa le dimensioni per rendere la finestra più elegante - Devo usare questa tecnica a volte per ottenere risultati coerenti su Windows e Mac.
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Sì, è possibile, ma volevo mantenere alcuni elementi dell'interfaccia grafica che interagissero tutti con la stessa tabella dati per rendere il codice più facile da leggere. Quindi sarebbe bello avere un messaggio che fornisca le dimensioni in anticipo. Chrismas arriverà presto, quindi lo metto sulla mia lista dei desideri.
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Sì, è possibile,
ma volevo mantenere alcuni elementi dell'interfaccia grafica che interagissero tutti con la stessa tabella dati per rendere il codice più facile da leggere.
Quindi sarebbe bello avere un messaggio che fornisca le dimensioni in anticipo.
Chrismas arriverà presto, quindi lo metto sulla mia lista dei desideri.
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Hai esaurito le finestre di visualizzazione esistenti che sono specificamente responsabili dell'allineamento e del layout? Il loro comportamento automatico potrebbe ridurre o eliminare la necessità di "tirare il tuo".
Ri: Determinazione della dimensione di una casella di testo prima di disegnarla.Hai provato 'ShowProperties ()' con la casella di testo per vedere quali messaggi comprende? Immagino che la dimensione richiesta dipenda dal testo che vuoi inserire (e dal font usato). L'esempio seguente mostra che JMP rispetterà la larghezza impostata, ma è costretta a sovrascrivere l'altezza quando viene disegnata la finestra.
tb = TextBox();
tb << setWidth(20);
tb << setHeight(30);
Print(tb << getWidth, tb << getHeight, "\!n");
tb << setText("How now brown cow");
Print(tb << getWidth, tb << getHeight, "\!n");
NewWindow("Test", tb);
Print(tb << getWidth, tb << getHeight, "\!n");