Newsgroup: it.comp.appl.access
Titolo: esportare un oggetto ole

bhè, ieri mi avete risolto un problema così velocemente che quasi
quasi ci riprovo
Nel mio file refertazione (per i curiosi vedi questo post
http://groups.google.it/group/it.comp.appl.access/browse_thread/thread/6ef18681fd9f2ebd?hl=it
)
vorrei che l'utente possa allegare un immagine al record
Finora ho usato i maledetti campi ole, che "ingrassano" il db alla
velocità della luce, ma che d'altro canto sono veramente comodi (ci si
applica l'imagine col copia/incolla)
Ora vorrei che le immagini rimanessero fuori dal db ma che
l'immagazzinamento dell'immagine rimanesse lo stesso così semplice
(gli utenti del mio db sono abbastanza ignorantelli dal punto di vista
informatico, il problema vero è che purtroppo io lo sono solo poco
meno)
Avevo pensato di creare una maschera apposta con un bel campo ole, gli
utenti ci inccolano l'immagine e dando il click l'immagine viene
esportata in un file con nominazione automatica (imagine1.jpg,
immagine2.jpg, ecc..), a quel punto non dovrei fare altro che associare
il path dell'immagine al record relativo (e questa dovrebbe essere la
parte semplice)
Il problema è che non riesco ad esportare l'immagine, ho usato la faq
5.10 del sitocomune, ho messo tutto il codice DAO sull'evento click
della maschera (ho creato l'apposita tabella collegata al campo ole
della mia maschera), ma quando faccio partire la sub non viene creato
il file (nessun errore viene mostrato, il codice viene letto
regolarmente, ho persino messo un messaggio in fondo alla sub che
puntualmente mi viene mostrato)
Quale potrebbe essere il problema ?
E' corretto posizionare tutto il codice sulla machera ?
Potrebbero mancarmi delle librerie ?
Io uso office2003 su windows 2000 (non amministratore)
Grazie dell'eventuale aiuto e aguri di buon anno

Grazie dell'eventuale aiuto e aguri di buon anno
Campo Ole?
mmmm... io lascerei stare...
ho fatto un esempiuccio... 
http://www.accessgroup.it/dbs/downl/GestoreImmagini.zip
;-)
-- 
-- 
Ciao
Pablitomf (Maurizio Facciuti)
-----------------------------------------------------------------
Access: 97, 2000, XP e 2003
ASP
-----------------------------------------------------------------
http://www.accessgroup.it/
-----------------------------------------------------------------
Il mio motto :
""Non mi fido molto delle statistiche, perchč un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media." 

 Pablitomf (Maurizio Facciuti)
oltre quanto consigliato da Maurizio, sul sito di  Alex Baraldi
ci sono due esempi molto utili.
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=117
Ciao
Daniele 

innanzitutto grazie per le risposte,
entrambi gli esempi che mi avete suggerito però non fanno esattamente
al caso mio
Io vorrei mantenere la possibilità per l'utente del copia-incolla,
quindi magari copiare il contenuto di un'immagine nell'oggetto OLE di
una maschera e poi da questa esportare l'immagine in maniera automatica
(naturalmente cancellando l'oggetto OLE in seguito all'esportazione)
Come già avevo scritto credo che la faq5.10 del sitocomune sia una
buona risposta al problema, ma purtroppo non riesco a farla funzionare

 ha scritto nel messaggio 
news:1167407986.5...@k21g2000cwa.googlegroups.com...
bhè, ieri mi avete risolto un problema così velocemente che quasi
quasi ci riprovo
Nel mio file refertazione (per i curiosi vedi questo post
http://groups.google.it/group/it.comp.appl.access/browse_thread/thread/6ef18681fd9f2ebd?hl=it
)
vorrei che l'utente possa allegare un immagine al record
Finora ho usato i maledetti campi ole, che "ingrassano" il db alla
velocità della luce, ma che d'altro canto sono veramente comodi (ci si
applica l'imagine col copia/incolla)
Ora vorrei che le immagini rimanessero fuori dal db ma che
l'immagazzinamento dell'immagine rimanesse lo stesso così semplice
(gli utenti del mio db sono abbastanza ignorantelli dal punto di vista
informatico, il problema vero è che purtroppo io lo sono solo poco
meno)
Avevo pensato di creare una maschera apposta con un bel campo ole, gli
utenti ci inccolano l'immagine e dando il click l'immagine viene
esportata in un file con nominazione automatica (imagine1.jpg,
immagine2.jpg, ecc..), a quel punto non dovrei fare altro che associare
il path dell'immagine al record relativo (e questa dovrebbe essere la
parte semplice)
----------------------------------------
L'utente cosa sta copiando negli appunti? Da dove copia?
Ciao, Carlo 

 Ciao, Carlo
I miei utenti usano un macchinario che riproduce immagini su video
composito, il computer fa una foto usando uno di quegli aggeggini per
l'aquisizione video e loro allegano al record (...e qui stà il
problema) solo una parte della foto (in pratica, una volta aquisita la
foto, aprono l'immagine con un normale editor grafico, usano lo
strumento ritaglia e prendono il solo riquadro dell'immagine che a loro
interessa)
Ciao

 ha scritto nel messaggio 
news:1167517184.7...@48g2000cwx.googlegroups.com...
Carlo Costarella ha scritto:


------------------------------------
Benissimo!
La cosa è di gran lunga più semplice...non hai bisogno di alcun controllo 
perchè puoi fare tutto in memoria usando le API e adattando una routine di 
Lebans modificata da me.
Condizioni indispensabili: riferimento alla libreria STDOLE2.TLB (Ole 
automation) e un'immagine in memoria.
In un modulo pubblico:
Option Compare Database
Option Explicit
Public Declare Function apiDeleteObject Lib "gdi32" _
          Alias "DeleteObject" (ByVal hObject As Long) As Long
Public Const vbPicTypeBitmap = 1
 Public Type IID
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4(7) As Byte
End Type
Public Type PictDesc
   Size As Long
   Type As Long
   hBmp As Long
   hPal As Long
   Reserved As Long
End Type
Public Declare Function OleCreatePictureIndirect Lib _
   "olepro32.dll" _
   (PicDesc As PictDesc, RefIID As IID, _
    ByVal fPictureOwnsHandle As Long, _
    IPic As IPicture) As Long
Public Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal 
wFormat As Integer) As Long
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As 
Long
Public Declare Function GetClipboardData Lib "user32" (ByVal wFormat As 
Integer) As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" 
(ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Public Declare Function CopyImage Lib "user32" (ByVal handle As Long, ByVal 
un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Const CF_BITMAP = 2
Const CF_PALETTE = 9
Const CF_ENHMETAFILE = 14
Const IMAGE_BITMAP = 0
Const LR_COPYRETURNORG = &H4
Const xlPicture = CF_BITMAP
Const xlBitmap = CF_BITMAP
'Le funzioni che seguono sono state create da Lebans
'Ricorda di citare la fonte
Public Function BitmapToPicture(ByVal hBmp As Long, _
    Optional ByVal hPal As Long = 0&) _
    As IPicture    '
    Dim lngRet As Long
    Dim IPic As IPicture, picdes As PictDesc, iidIPicture As IID
    picdes.Size = Len(picdes)
    picdes.Type = vbPicTypeBitmap
    picdes.hBmp = hBmp
    picdes.hPal = hPal
    iidIPicture.Data1 = &H7BF80980
    iidIPicture.Data2 = &HBF32
    iidIPicture.Data3 = &H101A
    iidIPicture.Data4(0) = &H8B
    iidIPicture.Data4(1) = &HBB
    iidIPicture.Data4(2) = &H0
    iidIPicture.Data4(3) = &HAA
    iidIPicture.Data4(4) = &H0
    iidIPicture.Data4(5) = &H30
    iidIPicture.Data4(6) = &HC
    iidIPicture.Data4(7) = &HAB
    lngRet = OleCreatePictureIndirect(picdes, iidIPicture, True, IPic)
    Set BitmapToPicture = IPic
    End Function
Function GetClipBoard() As Long
Dim hClipBoard As Long
Dim hBitmap As Long
Dim hBitmap2 As Long
 hClipBoard = OpenClipboard(0&)
 If hClipBoard <> 0 Then
    hBitmap = GetClipboardData(CF_BITMAP)
    If hBitmap = 0 Then GoTo exit_error
        hBitmap2 = CopyImage(hBitmap, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
        hClipBoard = CloseClipboard
 GetClipBoard = hBitmap2
 Exit Function
 End If
exit_error:
GetClipBoard = -1
End Function
'Quando vuoi tu e avendo un'immagine in memoria, per esempio su clic di un 
pulsante:
Private Sub Comando0_Click()
Dim hPix As IPicture
Dim hBitmap As Long
hBitmap = GetClipBoard
Set hPix = BitmapToPicture(hBitmap)
'qui puoi creare una routine per attribuire un nome al file
'che adesso è di fantasia
SavePicture hPix, "C:\" & "pip" & ".bmp"
apiDeleteObject (hBitmap)
Set hPix = Nothing
End Sub
Fammi sapere se funziona.
Intanto ti faccio l'augurio di un ottimo 2007.
Ciao, Carlo

Grazie infinite, se funzionasse sarebbe grandioso, ti faccio sapere
qualcosa al più presto

ahhhhhhhhh, funzionaaaaaaaa
Grazie -grazie-grazie,
hai reso questo mio termine d'anno molto migliore


Eh VAI!!
Si puņ fare anche di meglio salvando in jpg, almeno credo.
Forse la pubblico sul sitocomune.
Ciao, Carlo 

 Ciao, Carlo
Scusate se riporto in alto questo thread di qualche decina di giorni fa
ma ho bisogno ancora di un piccolo aiuto al proposito e magari Carlo (
o qualcunaltro) potrà nuovamente aiutarmi:
SavePicture hPix, "C:\" & "pip" & ".bmp"
vorrei che le immagini create dal codice fossero immesse nella stessa
cartella dove é presente il db (o in una sottocartella, farebbe lo
stesso) a prescindere da dove esso si trovi (es: se sto facendo partire
il db da c:\test le immagini devono essere archiviate in c:\test, se lo
sposto in f:\pinco spostare anche la destinazione di creazione
dell'immagine, non quindi quelle già create ovviamente, in f:\pinco)
Grazie ancora una volta
Pokoto

 ha scritto nel messaggio 
news:1169122866.7...@11g2000cwr.googlegroups.com...





..............................................
Una strada:
Public Function DimmiPath()
    Dim pos, Cartella As String
    Cartella = CurrentDb.Name
    pos = InStr(1, Cartella, ".")
    While Mid$(Cartella, pos, 1) <> "\"
        pos = pos - 1
    Wend
    DimmiPath = Left$(Cartella, pos - 1)
End Function
In questo caso DimmiPath restiuisce per esempio c:
se vuoi avere anche il backslash
DimmiPath = Left$(Cartella, pos - 1)
diventa:
DimmiPath = Left$(Cartella, pos - 1) & "\"
Ciao, Carlo

 ha scritto nel messaggio 
news:eoo5s7$6ed$1...@tdi.cu.mi.it...
cut
Scusa, dimenticavo la cosa più importante.
la funzione diventa:
Public Function DimmiPath() As String
anzichè Public Function DimmiPath()
Una volta salvata la funzione in un modulo pubblico il tuo spezzone di 
codice:
SavePicture hPix, "C:\" & "pip" & ".bmp"
diventa:
SavePicture hPix, DimmiPath & "pip" & ".bmp"
Ciao, Carlo 

Carlo Costarella ha scritto:

Caro Carlo,
ho messo una tua fotografia sul comodino di fianco al mio letto
...naturalmente non é una tua foto ...non so' nemmeno che faccia hai
...in realtà é quella di una famosa pornodiva ma sotto ci ho messo il
tuo nome !!
Scherzo naturalmente, grazie infinite ancora una volta