21-12-2016, Saat: 21:57
(21-12-2016, Saat: 10:53)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: İhtiyacı olabilecek arkadaşların benim gibi sıkıntı yaşamaması adına yazdığım kodu beğeninize sunuyorum:
function GetPNGImageFromClipboard : TGraphic; var APngRegisterFormat : Word; AClipboardData : NativeUInt; ADataPointer : PByte; ADataSize : NativeUInt; APureData : TBytes; ADataStream : TBytesStream; begin Result := nil; APngRegisterFormat := RegisterClipboardFormat('PNG'); if APngRegisterFormat = 0 then Exit; if OpenClipboard(0) then begin try if IsClipboardFormatAvailable(APngRegisterFormat) then begin AClipboardData := GetClipboardData( APngRegisterFormat ); if AClipboardData <> 0 then begin ADataPointer := GlobalLock( AClipboardData ); if Assigned(ADataPointer) then begin try ADataSize := GlobalSize( AClipboardData ); if ADataSize <> 0 then begin SetLength(APureData, ADataSize); Move(ADataPointer^, APureData[0], ADataSize); ADataStream := TBytesStream.Create(APureData); try ADataStream.Position := 0; Result := TPngImage.Create; Result.LoadFromStream(ADataStream); finally FreeAndNil(ADataStream); APureData := nil; end; // try..finally end; // if ADataSize <> 0 then finally GlobalUnlock( AClipboardData ); end; // try..finally end; // if Assigned(ADataPointer) then end; // if AClipboardData <> 0 then end; // if IsClipboardFormatAvailable(APngRegisterFormat) then finally CloseClipboard; end; // try..finally end; // if OpenClipboard(0) then end;
Tuğrul hocam müsadenizle yorum satırlarını uçurarak fonksiyonu daha düz hale çevirdim.
function GetPNGImageFromClipboard: TGraphic; var APngRegisterFormat: Word; AClipboardData: NativeUInt; ADataPointer: PByte; ADataSize: NativeUInt; APureData: TBytes; ADataStream: TBytesStream; begin Result := nil; APngRegisterFormat := RegisterClipboardFormat('PNG'); if APngRegisterFormat = 0 then Exit; if not IsClipboardFormatAvailable(APngRegisterFormat) then Exit; if not OpenClipboard(0) then Exit; AClipboardData := GetClipboardData(APngRegisterFormat); if AClipboardData = 0 then begin CloseClipboard; Exit; end; ADataPointer := GlobalLock(AClipboardData); if not Assigned(ADataPointer) then begin CloseClipboard; Exit; end; ADataSize := GlobalSize(AClipboardData); if ADataSize = 0 then begin GlobalUnlock(AClipboardData); CloseClipboard; Exit; end; try SetLength(APureData, ADataSize); Move(ADataPointer^, APureData[0], ADataSize); ADataStream := TBytesStream.Create(APureData); ADataStream.Position := 0; Result := TPngImage.Create; Result.LoadFromStream(ADataStream); finally FreeAndNil(ADataStream); APureData := nil; end; GlobalUnlock(AClipboardData); CloseClipboard; end;
Dosyayı word'e atıp denediğimde bende de çalıştı.
One of the major software engineering challenges is managing change.