klembord kopiëren naar afbeelding op een formulier

Status
Niet open voor verdere reacties.

Jeanjean

Gebruiker
Lid geworden
1 okt 2008
Berichten
22
Ik heb een Access 2003 formuliertje met daarop een knop en een afbeelding.
Nu wil ik graag dat, als er op de knop geklikt wordt, de inhoud van Windows Klembord weergegeven wordt in de afbeelding.
Uiteraard zorg ik ervoor dat die inhoud op dat moment effectief een afbeelding is (het is een 'printscreen' of 'screendump' of hoe noem je dat juist)

Kan iemand mij uitleggen hoe ik zoiets aanpak?

Met dank,
Jeanjean.
 
Je kunt in een Image control alleen afbeeldingen laten zien die daadwerkelijk bestaan, en det betekent dus dat je de printscreen eerst moet opslaan. En dat houdt dan weer in dat je dat vanuit een afbeeldingseditor moet doen. Dus dat wordt een bijna onmogelijke klus.
 
Dat gezegd hebbende, zijn er altijd wel mensen die de noodzakelijke code bij elkaar rapen en er een nette module van maken. Je vindt hem hier. Niet getest nog door mij!
 
Dat ziet een redelijk harde noot uit om te kraken. Tekst van het clipboard halen is niet zo moeilijk (data object), maar of er een MSO-functie of -object bestaat om iets grafisch van het clipboard te halen, lijkt mij onwaarschijnlijk. Er is blijkbaar wel een oplossing door gebruik te maken van API's. Ene meneer (ik vind dat 'meneer' hier wel in hoofdletters mag) Stephen Bullen heeft daar zelfs een kant-en klare functie voor gemaakt en die staat hier: http://www.oaltd.co.uk/excel/ (scroll naar 'PastePicture.zip'). Die functie heb ik eens getest in een Excel-file en dat werkt. Zie bijlage. Als het in Excel werkt, dan vermoed ik dat het ook in Acces zal werken.

Grtz,
MDN111.
 

Bijlagen

  • testclipboard.xls
    49 KB · Weergaven: 38
Het gaat erom dat je de afbeelding in het klembord kunt opslaan als afbeelding en vervolgens kunt inladen in de userformcontrol.

In Excel kan dat simpel gerealiseerd worden met een kleine omweg:
Vooropgesteld dat een afbeelding op het klembord staat:

Code:
Private Sub UserForm_Initialize()
    c00 = "G:\OF\voorbeeld.gif"

    With Sheet1.ChartObjects.Add(Image1.Left, Image1.Top, Image1.Width, Image1.Height).Chart
        .Paste
        .Export c00, "GIF"
        .Parent.Delete
    End With

    Image1.Picture = LoadPicture(c00)
End Sub

Vanuit Access kun je dezelfde methode gebruiken met:

Code:
Private Sub UserForm_Initialize()
    c00 = "G:\OF\voorbeeld.gif"
    
    With CreateObject("excel.application").Workbooks.Add
       With .Sheets(1).ChartObjects.Add(Image1.Left, Image1.Top, Image1.Width, Image1.Height).Chart
        .Paste
        .Export c00, "GIF"
        End With
        .Close 0
        .Application.Quit
    End With

    Image1.Picture = LoadPicture(c00)
End Sub
 
Laatst bewerkt:
@SNB,

Ingevolge uw vraag op http://www.helpmij.nl/forum/showthread.php/794135-Vba-in-excel

Volgens mij is uw code een andere oplossing voor het probleem waar Stephen Bullen zijn oplossing voor bedacht heeft, namelijk een chart als image-picture in de Userform plakken. U doet dat zonder gebruik te maken van API's, puur met VBA. Dat is uiteraard mooie code. Een kleine mogelijke verbetering zou kunnen zijn dat u eerst een random bestandsnaam genereert en controleert of het bestand al bestaat. In uw code wordt een eventueel bestaand bestand "G:\OF\voorbeeld.gif" overschreven.

Het probleem van Jeanjean is dat er reeds een grafische inhoud op het clipboard staat, namelijk een screenshot. En die moet in de Userform geplakt worden. Hoe je dat met alleen VBA moet doen weet ik niet. Met de functie PastePicture() van Stephen Bullen lukt dat wel.

Grtz,
MDN111.
 
Mijn oplossing is voor ieder grafisch bestand dat op het klembord staat, waar die ook vandaan komt.

Blijkbaar heb je de code niet getest, want die plakt het volledige grafische bestand van het klembord via een kleine omweg in het userform-element.
 
@snb,

Omdat het niet direct mijn probleem was had ik jou code niet getest. Ik dacht dat ik die begreep na ze vluchtig gelezen te hebben. Maar na jou reply van deze morgen dacht ik bij mezelf "Oei, hier is meer aan de hand..." Daarom ben ik je code toch nog eens beter gaan analyseren en heb ze ook getest. Dat het werkt, verbaasde me niet, en na een grondige analyse begrijp het ook. Je truuk is de Paste-methode van het Chart-object om de inhoud van het clipboard over te brengen naar een tijdelijke chart, en dan verder... In m'n vorige reply zei ik "Hoe je dat met alleen VBA moet doen weet ik niet", maar nu weet ik dat dus wel.

't Is gewoonweg Super cool, Geweldig ... :thumb::thumb::thumb:

Grtz,
MDN111.
 
Laatst bewerkt:
@MDN111

Leuk zo'n voortschrijdend inzicht !
Bij de meeste 'API' benaderingen heb ik vaak het idee dat het gewoon ook in VBA kan.
Vaak even iets langer zoeken in de VBA bibliotheken, en soms een omweggetje, maar vergelijk dan maar eens de aanpak van Bullen en die van mij.
 
@snb,

Gelijk heb je.

Soms neemt men z'n toevlucht tot een meer ingewikkelde oplossing, terwijl de eenvoudigste over het hoofd gezien wordt. Dat overkomt mij vaker. Zo heb ik eens een API gebruikt om de gebruiker een bestand te laten selecteren, terwijl er daarvoor in VBA zelfs meer dan één oplossing mogelijk is. Hetzelfde heb ik met formules. Als het een beetje te uitgebreid wordt in een sheet, dan zoek ik nogal gemakkelijk mijn toevlucht tot een macro, terwijl men het soms gemakkelijker kan oplossen met geschikte Excel-formules. Ooit komt het wel goed, denk ik ... :)

Grtz,
MDN111.
 
... Je truuk is de Paste-methode van het Chart-object om de inhoud van het clipboard over te brengen naar een tijdelijke chart, en dan verder ...
Dat heeft me even aan het denken gezet, en uiteindelijk voor de makkelijkste oplossing gezorgd!
In plaats van een 'Afbeelding' gebruik ik nu een 'Kader voor afhankelijk object' en met
Code:
kader.Action = acOLEPaste
heb ik precies wat ik wil :thumb:

Iedereen bedankt voor de antwoorden.
In elk antwoord heb ik wel iets nuttig of interessant gevonden!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan