Newsgroup: it.comp.appl.access
Titolo: accostamento testo e immagini nei reports

Ri-buongiorno a tutti,
vorrei illustrarvi un problema che mi si era presentato nella formattazione
dei reports ed il modo in cui l'ho risolto, per sapere se c'erano modi
migliori oppure per rendere utile la mia soluzione a chi ancora non ci aveva
pensato
Il problema era questo:
in un report dovevo visualizzare un lungo testo di descrizione (campo memo)
con al fianco sinistro un'immagine (controllo immagine).
Il controllo immagine ha la proprietà picture sul valore di un campo testo
di una tabella che mi da il percorso per trovare l'immagine in una cartella
esterna al db
Picture type=linked
Per ogni record devo visualizzare immagini di dimensioni molto diverse tra
loro. Alcune cioè sono molto allungate, altre quadrate ed altre alte e
strette, quindi ovviamente Size mode= Zoom
Il problema era come far scorrere il testo il più vicino possibile
all'immagine in modo da salvare spazio sulla pagina del report (e anche per
renderlo più gradevole e uniforme).
Non potevo agire ogni volta sulla dimensione del controllo immagine in
quanto le varie immagini sono di grandezza molto sproporzionata tra loro (ho
alcune tiff di
dimensioni enormi ed altre jpg piccolette), quindi non era possibile una
soluziuone del tipo ctlImg.witdh=ctlImg.ImageWidth  e quindi left del
controllo memo settato di conseguenza.
L'idea che ho avuto è stata quella di paragonare il rapporto delle
dimensioni del controllo con le dimensioni dell'immagine originale in modo
da poter calcolare l'effettiva dimensione orizzontale alla quale l'immagine
sarà mostrata.
If ctlImg.Width / ctlImg.Height < ctlImg.ImageWidth / ctlImg.ImageHeight
Then
l'originale è più "allungato" del controllo. Non posso fare nulla in quanto
l'immagine verrà zoomata fino a riempire tutta l'estensione orizzontale del
controllo e mi sarà sufficiente settare il margine sinistro del campo memo a
destra del controllo immagine
    ctlMemo.LeftMargin = ctlImg.Width + [il margine che si vuole lasciare]
Else
l'immagine non occuperà tutta l'estensione orizzontale del controllo quindi
risulterà dello spazio in + sfruttabile per il testo
Calcolo la dimensione orizzontale alla quale l'immagine verrà effettivamente
mostrata e setto di conseguenza il margine del memo (il codice che segue è
riferito al caso in cui l'immagine sia centrata all'interno del controllo.
con le dovute modifiche si può fare il caso di immagine allineata a
sinistra)
        Dim HPW As Single, HPH As Single, HPIW As Single, HPIH As Single
        HPW = ctlImg.Width    :HPH = ctlImg.Height    :HPIW =
ctlImg.ImageWidth    :HPIH = ctlImg.ImageHeight
        ctlMemo.LeftMargin = Int(HPW / 2 + HPIW * HPH / (2 * HPIH)) + [il
margine che si vuole lasciare]
End If
Perchè il tutto funzioni, ovviamente il campo memo deve essere dimensionato
allineando il bordo sinistro con il bordo sinistro del controllo immagine
ovviamente con i dovuti adattamenti il procedimento è sfruttabile anche per
allineamenti verticali
Ora, se ho scoperto l'acqua calda non avete che da dirmelo :-)))))  (però in
google non ho trovato nulla sull'argomento.)
Se invece c'erano metodi migliori o più efficaci mi piacerebbe
conoscerli......
già che ci sono approfitto anche per chiedere due informazioni:
come si fa a settare a nullo la proprietà Picture del ctl immagine???
Il problema è che ho piazzato inizialmente il controllo immagine sul report
settandolo ad una data immagine con il wizard.
Ora vorrei toglierla (perchè essendo linkata, se sposto o cancello questa
immagine iniziale e il report non la trova ricevo un errore in apertura) ma
non ce la faccio!!!!!!!!!!
Se cancello o sostituisco il percorso dell'immagine nella proprietà Picture
con un stringa vuota "", salvando il report automaticamente la proprietà
viene risettata sul vecchio valore (!!!)
Ho provato a settare da codice ctlImg.Picture="" sia nell'evento apertura
del report che su formattazione dei dettagli (dove si trova appunto il
controllo). ma niente!! all'apertura ricevo sempre il messaggio di errore
che il controllo non trova la vecchia immagine :-(((
Poi....per un errore avevo inizialmente settato ad embedded il size mode. Se
non sbaglio, credo che in questo modo access all'apertura di ogni immagine
si salvi una copia in formato bitmap, infatti le dimensioni del file del db
si sono alzate esponenzialmente.....
Ora ho settato a linked e compattato, ma le dimensioni del db sono ancora
molto più grandi di quanto erano prima che costruissi il report.....c'è un
modo per eliminare queste copie che access ha creato per ogni immagine?
oppure il problema delle grosse dimensioni può essere un'altro?
grazie in anticipo per ogni aiuto!
Carlo


(1) Io avrei (ho) utilizzato word e la stampa unione;
(2) crea un file bianco (vuoto) e collegalo a quello...
Ciao.
-- 
Sergio MAZZA

 (1) Io avrei (ho) utilizzato word e la stampa unione;
Ciao e grazie,
posso chiederti qualche info in + sulla cosa?
che vantaggi può dare per la formattazione rispetto ad un report di access?
Carlo


Hai provato a riprodurre con word una pagina (già con i contenuti) del report?
E' sicuramente più agevole perché word ha gli strumenti e funzionalità per gestire dei layout di quel tipo (immagine + testo).
I report di access sono molto malleabili ma non ci puoi creare dei documenti simili a lettere; quello lo fa word. Io sono per: "ad
ognuno il suo mestiere"...
Ciao.
-- 
Sergio MAZZA


fatto, ma ora ho un altro problema :-)
vorrei dare un percorso relativo ma non ci riesco....
ho questa esigenza perchè sposterò il db anche su altre macchine (non
collegate in rete tra loro, quindi non posso usare percorsi di rete).
La mia immagine Blank.gif è nella sottocartella Icons della cartella dove ho
il db.
ho provato con icons\blanck.gif , con \icons\blanck.gif  , con
CurrentDb.Name & entrambe le due possibilità, ma non funziona.....
come posso fare?
Ho dato un'occhiata all'help ma non trovato specifiche..
grazie anche per i consigli riguardanti la stampa unione. In futuro
utilizzerò questo sistema, ma per stavolta sono già troppo avanti con lo
sviluppo del report :-((
Ciao
Carlo

 ha scritto nel messaggio news:2s1bv9F...@uni-berlin.de...

Potresti utilizzare le "variabili ambiente" impostandola (per esempio) Set dirImg = c:\icons; poi da VBA la richiami con la funzione
Environ (vedi help) ottieni il valore...
Ciao.
-- 
Sergio MAZZA