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

È stato utile?

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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top