Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Clipboard und GlobalLock ergibt Fehler (https://www.delphipraxis.net/117460-clipboard-und-globallock-ergibt-fehler.html)

Wapiti 18. Jul 2008 13:58


Clipboard und GlobalLock ergibt Fehler
 
Ich habe mit
Delphi-Quellcode:
Image1.Picture.Bitmap.SaveToClipboardFormat(myFormat, hData, aPalette);
Clipboard.SetAsHandle(myFormat, hData);
ein Bitmap in der Zwischenablage gespeichert.

Ein Zugriff auf
Delphi-Quellcode:
hData // direkt z.B. vor Clipboard.SetAsHandle

  bzw.

hData := Clipboard.GetAsHandle(CF_BITMAP)
 
  bzw.

hData := Clipboard.GetAsHandle(myFormat)
führt ordnungsgemäß zu einem gültigen DIB-Handle, was anderweitig auch korrekt weiterverarbeitet werden kann. Jetzt soll man eigentlich (lt. diversen Webseiten) per
Delphi-Quellcode:
GlobalLock(hData)
auf den Speicherbereich (DIB-Stream) zugreifen können, um beispielsweise an den BITMAPINFOHEADER heranzukommen.

Dies führt aber stets zu einem Fehler "Das Handle ist ungültig." / "The handle is invalid."

Bei allem Suchen bin ich nur auf folgende Seite gestoßen, wo dieser Fehler auch beschrieben wird, was mir aber nicht direkt weiterhilft.

Warum das alles: Ich möchte in den Zwischenablagedaten die Auflösung der DIBs einfügen (biXPelsPerMeter und biYPelsPerMeter) um beim Einfügen die richtigen Abmaße auch bei Auflösungen ungleich 72 dpi zu bekommen. IrfanView kann die Auflösung setzen. Beim Import ins Office wird dann die richtige Größe verwendet. Vieleicht gibt es auch eine andere Lösung.

Muetze1 18. Jul 2008 14:06

Re: Clipboard und GlobalLock ergibt Fehler
 
Moin!

Irrglaube. Nur bei CF_DIB erhälst du einen solches HGLOBAL Handle. Bei CF_BITMAP erhälst du ein HBITMAP Handle.

Einfach mal informieren.

MfG
Muetze1

Wapiti 18. Jul 2008 14:21

Re: Clipboard und GlobalLock ergibt Fehler
 
Danke.
Delphi-Quellcode:
hData := clipboard.GetAsHandle(CF_DIB);
pbih := PBITMAPINFOHEADER(GlobalLock(hData));
geht fehlerfrei.

Mein Ursprungsproblem funktioniert aber so doch noch nicht, wie ich es dachte. Ich werde mal dazu einen neuen Eintrag aufmachen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz