Avatar billede jensen363 Forsker
16. januar 2008 - 09:43 Der er 25 kommentarer og
1 løsning

Print Screen af arkfaneindhold

I en database har jeg en række arkfaner, hver især repræsenterende en grafisk fremstilling. Jeg vil gerne at bruger har mulighed for nemt at "klippe" den aktuelle graf ud og benytte denne i eksempelvis en Power Point præsentation.

[Alt]+[Prt Scr] virker ikke :-(

Er der nogen måde hvorpå at jeg kan gøre dette "smart" ... altså uden at bruger skal via paint ?
Avatar billede Slettet bruger
16. januar 2008 - 10:17 #1
Her er et modul, som laver en PrtScr. Call ScreenDump!~)

Modul:

Option Compare Database
Option Explicit

Type RECT_Type

  left As Long
  top As Long
  right As Long
  bottom As Long

End Type

'The following declare statements are case sensitive.

Declare Function GetActiveWindow Lib "User32" () As Long
Declare Function GetDesktopWindow Lib "User32" () As Long
Declare Sub GetWindowRect Lib "User32" (ByVal Hwnd As Long, _
                                    lpRect As RECT_Type)
Declare Function GetDC Lib "User32" (ByVal Hwnd As Long) As Long
Declare Function CreateCompatibleDC Lib "Gdi32" (ByVal hdc As Long) _
                                    As Long
Declare Function CreateCompatibleBitmap Lib "Gdi32" (ByVal hdc _
                                    As Long, ByVal nWidth As Long, _
                                    ByVal nHeight As Long) As Long
Declare Function SelectObject Lib "Gdi32" (ByVal hdc As Long, _
                                    ByVal hObject As Long) As Long
Declare Function BitBlt Lib "Gdi32" (ByVal hDestDC As Long, _
                                    ByVal X As Long, ByVal Y _
                                    As Long, ByVal nWidth As Long, _
                                    ByVal nHeight As Long, _
                                    ByVal hSrcDC As Long, _
                                    ByVal XSrc As Long, _
                                    ByVal YSrc As Long, _
                                    ByVal dwRop As Long) As Long
Declare Function OpenClipboard Lib "User32" (ByVal Hwnd As Long) As Long
Declare Function EmptyClipboard Lib "User32" () As Long
Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, _
                                    ByVal hMem As Long) As Long
Declare Function CloseClipboard Lib "User32" () As Long
Declare Function ReleaseDC Lib "User32" (ByVal Hwnd As Long, _
                                    ByVal hdc As Long) As Long
Declare Function DeleteDC Lib "Gdi32" (ByVal hdc As Long) As Long

Global Const SRCCOPY = &HCC0020
Global Const CF_BITMAP = 2

Function ScreenDump()
  Dim AccessHwnd As Long, DeskHwnd As Long
  Dim hdc As Long
  Dim hdcMem As Long
  Dim rect As RECT_Type
  Dim junk As Long
  Dim fwidth As Long, fheight As Long
  Dim hBitmap As Long

  DoCmd.Hourglass True

  '---------------------------------------------------
  ' Get window handle to Windows and Microsoft Access
  '---------------------------------------------------
  DeskHwnd = GetDesktopWindow()
  AccessHwnd = GetActiveWindow()

  '---------------------------------------------------
  ' Get screen coordinates of Microsoft Access
  '---------------------------------------------------
  Call GetWindowRect(AccessHwnd, rect)
  fwidth = rect.right - rect.left
  fheight = rect.bottom - rect.top

  '---------------------------------------------------
  ' Get the device context of Desktop and allocate memory
  '---------------------------------------------------
  hdc = GetDC(DeskHwnd)
  hdcMem = CreateCompatibleDC(hdc)
  hBitmap = CreateCompatibleBitmap(hdc, fwidth, fheight)

  If hBitmap <> 0 Then
      junk = SelectObject(hdcMem, hBitmap)

      '---------------------------------------------
      ' Copy the Desktop bitmap to memory location
      ' based on Microsoft Access coordinates.
      '---------------------------------------------
      junk = BitBlt(hdcMem, 0, 0, fwidth, fheight, hdc, rect.left, _
                    rect.top, SRCCOPY)

      '---------------------------------------------
      ' Set up the Clipboard and copy bitmap
      '---------------------------------------------
      junk = OpenClipboard(DeskHwnd)
      junk = EmptyClipboard()
      junk = SetClipboardData(CF_BITMAP, hBitmap)
      junk = CloseClipboard()
  End If

  '---------------------------------------------
  ' Clean up handles
  '---------------------------------------------
  junk = DeleteDC(hdcMem)
  junk = ReleaseDC(DeskHwnd, hdc)

  DoCmd.Hourglass False

End Function
Avatar billede jensen363 Forsker
16. januar 2008 - 10:43 #2
Hvordan virker den i praksis ??
Avatar billede Slettet bruger
16. januar 2008 - 11:03 #3
Lige som print screen knappen, den ligger et screendump i udklipsholderen... Du kunne jo lave en autokeys makro og ligge den på ^p eller hvad du nu ønsker, så ville ctrl-p gøre det samme som print screen!~)
Avatar billede Slettet bruger
16. januar 2008 - 11:05 #4
Lige et øjeblik, du vil selvfølgelig kun have selve grafen....
Avatar billede jensen363 Forsker
16. januar 2008 - 11:14 #5
Korrekt ... det var udelukkende et udsnit / en enkelt arkfane ... ikke hele skærmbilledet :-)
Avatar billede Slettet bruger
16. januar 2008 - 11:17 #6
fwidth = skriv bredden    'rect.right - rect.left
  fheight = skriv højden    'rect.bottom - rect.top

      junk = BitBlt(hdcMem, 0, 0, fwidth, fheight, hdc, rect.left+venstreStartpunkt, _
                    rect.top+højreStartpunkt, SRCCOPY)
Avatar billede Slettet bruger
16. januar 2008 - 11:18 #7
Du kan jo prøve, om du kan sætte noget sammen på den måde!~)
Avatar billede Slettet bruger
16. januar 2008 - 11:19 #8
jeg mente selvfølgelig øvreStartpunkt og ikke højreStartpunkt...
Avatar billede jensen363 Forsker
16. januar 2008 - 11:35 #9
16/01-2008 11:17:24

De koorninater der angives der, bliver de påvirket hvis eksempelvis en bruger har en anden skærmopsætning ????
Avatar billede Slettet bruger
16. januar 2008 - 11:41 #10
Jeg tror det ikke, da det er twips (eller noget i den retning!~)

..men det kommer nok an på en prøve..
Avatar billede jensen363 Forsker
16. januar 2008 - 11:43 #11
Ok. takker so far ... super god løsning :-)
Avatar billede jensen363 Forsker
16. januar 2008 - 11:43 #12
Nu overhaler du mig snart på Top 10 :-)
Avatar billede jensen363 Forsker
16. januar 2008 - 12:15 #13
Tillægsspørgsmål :-)

Jeg har nu lavet det sådan, at den kan aktiveres via en makro i en lokal menu ... men da denne ScreenDump er specialdesignet til netop dette formål, vil jeg gerne at menupunktet udelukkende er aktivt når den rigtige form er aktiv ... er det muligt ?
Avatar billede Slettet bruger
16. januar 2008 - 12:30 #14
Det virker også, som om du har travlt med et eller andet, jeg har nogen gange taget mig selv i at være lidt nysgerrig!~)
Avatar billede Slettet bruger
16. januar 2008 - 12:31 #15
Hov, jeg røg lige i et hotline tidshul!~)
Avatar billede Slettet bruger
16. januar 2008 - 12:32 #16
Ang. tillæg...

Hvis det ikke er muligt, så kan du skifte menulinjen ud, når fanebladet er aktivt!~)
Avatar billede jensen363 Forsker
16. januar 2008 - 12:34 #17
Jamen, jeg har faktisk også så travlt med at udvikle, at jeg sjældent får tid til at hjælpe andre :-( .... med mindre der er tale om helt åbentlyse ting som kan klares på 1-3 svar ...
Avatar billede jensen363 Forsker
16. januar 2008 - 12:35 #18
Ahh ... det var selvfølgelig en mulighed :-)
Avatar billede jensen363 Forsker
16. januar 2008 - 12:36 #19
Nogen gange er løsningen lige for næsem af een :-)
Avatar billede Slettet bruger
16. januar 2008 - 12:39 #20
Apropos point har du så lagt mærke til at alle andre end du og jeg stort set passer i points... men at der er et eller andet galt hos os!~)

http://www.eksperten.dk/pointstat.phtml?catid=33&date_year=0&date_month=0&date_day=0
Avatar billede jensen363 Forsker
16. januar 2008 - 13:04 #21
Jeg mener at kunne huske noget med, at du på Top 10 udelukkende ser de point du har tjent ved at hjælpe andre ... i mit tilfælde ( og dit ) er der spørgsmål du selv har oprettet og likket som løst af dig selv :-)
Avatar billede Slettet bruger
16. januar 2008 - 13:40 #22
Fair enough... det viser bare hvor hurtige vi er!~)
Avatar billede jensen363 Forsker
16. januar 2008 - 13:42 #23
Eller utålmodige :-)
Avatar billede jensen363 Forsker
16. januar 2008 - 13:43 #24
Hvad beskæftiger du dig egentlig med ?
Avatar billede Slettet bruger
16. januar 2008 - 14:20 #25
Har du en adresse, jeg kan e-maile...
Avatar billede Slettet bruger
16. januar 2008 - 14:24 #26
eller send mig en mail på spg.eksperten@gmail.com
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester