VB6 Forma altezza / larghezza ignorati con riga di comando Corporatura
-
23-08-2019 - |
Domanda
Ci stiamo muovendo fuori VB6 il più rapidamente possibile, ma nel frattempo abbiamo iniziato a costruire le nostre applicazioni VB6 dalla riga di comando su una build dei server.
Problema: La build server dispone di una scheda video di base e fa sì che i moduli per essere troncati verso il basso per la risoluzione della scheda di base piuttosto che l'altezza e la larghezza nella forma stessa
.Una soluzione che abbiamo scoperto richiede di entrare in evento Load di ogni forma e impostare manualmente le proprietà altezza e larghezza per le dimensioni osservate nella finestra Proprietà modulo.
uffa ..
Ci sono molte decine di forme coinvolte in questa applicazione e più applicazioni con più decine di forme a venire. Voglio costruire uno script per gestire questa situazione.
Due domande:
1) Se nel codice / progetto / etc trovo l'altezza e la larghezza del modulo, come mostrato nella finestra Proprietà? Una ricerca del file * .frm non gira eventuali vincitori; nessuno fa opeing il file con estensione frx * e conversione di un noto altezza o larghezza a Hex (quindi la ricerca).
2) C'è qualcos'altro che posso fare oltre a modificare ogni e qualsiasi forma?
Grazie in anticipo.
Jon
Soluzione
Il formato FRM è documentato nella manuale . Si dice che l'altezza e la larghezza sono memorizzati in twip, come osservato Angry Jim. Non spiega circa clientHeight e clientWidth ma come OneNerd e cmsjr hanno detto, che è la dimensione degli interni del modulo (senza barre dei menu e le frontiere). La build server può essere anche cambiando il ClientLeft e ClientTop, se avete forme con StartupPosition insieme al manuale.
Non bisogna mai impostare l'altezza e la larghezza del modulo in fase di esecuzione. Queste includono la barra dei menu e delle frontiere, che sono diversi spessori su diverse versioni di Windows o con temi diversi. Così si otterrà le dimensioni sbagliate. Impostare lo ScaleHeight e ScaleWidth invece, che sono le dimensioni dell'interno della forma. Il runtime VB6 calcola l'appropriata altezza e la larghezza da quelli.
E, infine, semplicemente acquistare una nuova build server (o una nuova scheda video). Piombo tutti gli sviluppatori per il boss agitando fiaccole e forconi fiammeggianti, o forse solo con calma spiegare la differenza tra il costo di un PC e il costo del tempo di sviluppo.
Altri suggerimenti
Se aprite i file .frm in notepad o qualsiasi editor di testo, le dimensioni del modulo sono definite alcune linee dall'alto:
ad esempio:
ClientHeight = 8445
ClientLeft = 60
ClientTop = 450
ClientWidth = 9960
Non sono sicuro perché si è verificato il problema - sembra strano - ma se il vostro server di build sta causando un problema, allora le uniche opzioni che vedo sono (1) cambiare la build server (o l'aggiornamento della scheda video forse), o scrivere il codice in caso di carico per ogni modulo come si parla, anche se questo può avere effetti sulla centratura del modulo se avete la postion-> centro impostato nell'IDE modo verificare che i moduli siano ancora centrati se questo è il risultato desiderato.
In base a questo direi che l'altezza come si vede nella finestra delle proprietà è un valore calcolato che include clientHeight del form (che si trova nel .frm) + il confine e titolo altezze bar. Così clientHeight è probabilmente il numero che si sta cercando.
L'altezza e la larghezza sono memorizzati in Twips (un'unità indipendente dal dispositivo di misura), quindi si deve dividere per Screen.TwipsPerPixelX e -Y per ottenere il valore corretto. Per la maggior parte schermi, questo sarà 15. (Utilizzando la larghezza in esempio di OneNerd, 9960 twips è 664 pixel.)