![]() |
Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Hallo,
wenn ich in GIMP einen Bildbereich in die Zwischenablage kopiere, kann MS Paint den wunderbar einfügen. Mein Programm aber nicht:
Delphi-Quellcode:
Folgende Meldung kommt:
procedure TFMain.SBPasteClick(Sender: TObject);
var pic: TPicture; b: TBitmap; begin pic := TPicture.Create; {if Clipboard.HasFormat(CF_PICTURE) then begin Showmessage('CF_PICTURE'); pic.Assign(Clipboard); end else} if Clipboard.HasFormat(CF_BITMAP) then begin Showmessage('CF_BITMAP'); pic.Bitmap.Assign(Clipboard); end {else if Clipboard.HasFormat(CF_METAFILEPICT) then begin ShowMessage('CF_METAFILEPICT'); pic.Metafile.Assign(Clipboard); end} else Exit; LoadImage(pic); pic.Free; end; Zitat:
Naja, die Frage steht im Titel... |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Ich sehe da 2 Möglichkeiten: Die JPEG Kompression von GiMP ist "komisch anders" bzw. nicht von TJPEGImage unterstützt (siehe Titel der MessageBox) oder das Format des ClipBoards ist komisch. Dort könnte ja vllt. mal helfen heraus zu bekommen, wie denn das Format heisst, in welchem das Bild in der Zwischenablage vorliegt:
Delphi-Quellcode:
EDIT: Über die Eigenschaft FormatCount und Formats[] des TClipBoard's bzw. der globalen Instanz ClipBoard kannst du auch mal eroieren, welche Formate GiMP denn in die Zwischenablage ablegt, vllt. findest du ja noch ein besseres als das bisher selektierte...
Uses
Windows; ... Function NameOfClipBoardFormat(Const AFormatId: LongWord): String; Var lStr: String; Begin SetLength(lStr, 2049); SetLength(lStr, GetClipBoardFormatName(AFormatId, PChar(lStr), 2048)); Result := lStr; End; EDIT2: GetAsHandle() ist die Methode von TClipBoard um ein bestimmtes Format zu erhalten, wenn du dich im Formats[] Array für ein anderes entschieden hast. |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Liste der Anhänge anzeigen (Anzahl: 1)
Da gehts nicht um JPEGs :P
Das Format ist CF_BITMAP. Wenn du dir meinen Code angesehen hättest, wäre dir das doch wohl auch aufgefallen :gruebel: ich kann ja gerne mal die datei anhängen, um dies geht, sollte einigen bekannt vorkommen... //Dein EDIT: Naja... CF_BITMAP sollte eigentlcih doch genügen... EDIT: wie kann ich denn sicherstellen, dass das tpicture.bitmap auch mein CF_BITMAP format lädt? EDIT2: Wir unterhalten uns hier jetzt nur noch über Edits, oder? :lol: |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Zitat:
Und wenn es nicht um JPEG's geht, warum hat dann die Fehlermeldung in der Caption "JPEG-Kompressor"?? Was meinst du denn, wie ich bei ausgeklammerten Code auf JPEG komme? Doof bin ich nicht... (dachte ich bisher...) |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
ja, is klar ^^ es ist ja nicht der ganze code auskommentiert :P
also, im moment gehts erstmal nur um bitmaps. Wo tu ich das Handle denn hin, das ich von GetAsHandle kriege? EDIT: Code sieht jetzt so aus:
Delphi-Quellcode:
Fehler bleibt gleich...
if Clipboard.HasFormat(CF_BITMAP) then
begin Showmessage('CF_BITMAP'); h := Clipboard.GetAsHandle(CF_BITMAP); pic.Bitmap.LoadFromClipboardFormat(CF_BITMAP,h,CLipboard.GetAsHandle(CF_PALETTE)); end |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Das ist dann zumindest komisch. Im Normalfall sollte es klappen - aber ich bin mir nicht sicher, ob noch extra eine Palette mit in das ClipBoard gelegt wird - ist ja auch nicht immer nötig (siehe PixelFormat).
Ansonsten wäre noch dies möglich:
Delphi-Quellcode:
if Clipboard.HasFormat(CF_BITMAP) then
begin h := Clipboard.GetAsHandle(CF_BITMAP); pic.Bitmap.Handle := h; end; |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
ne... das gibt bei mir eine AV an 0... warum auch immer.
|
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Hmm, meine Glaskugel funktioniert zur Zeit wieder recht gut, glaube ich. Sie ist endlich von der Eichung zurück, daher lass mich mal aufschreiben, was ich in ihr sehen konnte:
1. h wird ordentlich befüllt mit einem Handle 2. Picture ist ungleich Nil, da vorher angelegt 3. Picture.Bitmap ist Nil, da nicht vorher angelegt 4. Es knallt beim Zugriff auf die Eigenschaft Bitmap von TPicture, da nicht vorher angelegt. 5. Mein Glaskugel munkelt, dass dies auch der Fehler vorherigen Versuche sein wird, da Methoden von Bitmap aufgerufen wurden, welche an keine Instanz gebunden waren, da Bitmap auch dort Nil war. Du hast den Code, du hast somit auch die Macht... ... den Debugger zu benutzen und zu schauen ob meine Glaskugel Recht hatte. Nutze die Macht, Luke! |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
meine glaskugel sagt, dass wenn ein bitmap nil ist, dass es dann nicht sagen kann "Format der Zwischenablage wird nicht unterstützt."
Mir ist klar, dass eine Av bei 0 meistens ein zugriff auf einen nil-pointer ist... ich habe deswegen vorübergehend pic.bitmap durch ein zuvor erzeugtes TBitmap ersetzt:
Delphi-Quellcode:
Knallt dann nur "woanders", also AV irgendwo.
Showmessage('CF_BITMAP');
h := Clipboard.GetAsHandle(CF_BITMAP); b.Handle := h; |
Re: Was kann Paint, was ich nicht kann? ( Clipboard pasten )
Naja, das knallen mit einer AV ist aber ungesund und nicht normal, daher unbedingt diese erstmal abstellen würde ich raten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz