Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | added CreateBitmapFromScan0, BitmapLockBits and BitmapUnlockBits methods to TGDIPlusFull |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f09f1b0174e4fb028b92c33231769934 |
User & Date: | ab 2011-03-26 11:48:18 |
2011-03-26
| ||
12:35 |
| |
11:48 | added CreateBitmapFromScan0, BitmapLockBits and BitmapUnlockBits methods to TGDIPlusFull check-in: f09f1b0174 user: ab tags: trunk | |
11:46 | fixed issue: no modal dialog windows and they cannot be closed with ESC check-in: 478dbb2449 user: ab tags: trunk | |
Changes to SynGdiPlus.pas.
121 122 123 124 125 126 127 128 129 130 131 132 133 134 ... 170 171 172 173 174 175 176 177 178 179 180 181 182 183 ... 416 417 418 419 420 421 422 423 424 425 426 427 428 429 .... 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 .... 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 |
TEmfType = ( etEmfOnly=3, etEmfPlusOnly, etEmfPlusDual); /// GDI+ available filling modes TFillMode = ( fmAlternate, fmWinding); /// GDI+ error codes TGdipStatus = ( stOk, stGenericError, stInvalidParameter, stOutOfMemory, stObjectBusy, ................................................................................ X,Y: Single; end; PGdipPointFArray = ^TGdipPointFArray; /// GDI+ floating point coordinates for an array of points TGdipPointFArray = array[0..1000] of TGdipPointF; type /// an object wrapper to load dynamically a library TSynLibrary = class protected fHandle: HMODULE; /// helper to load all needed procedure entries from a dynamic library ................................................................................ AddPathEllipse: function(path: THandle; X,Y,width,height: Integer): TGdipStatus; stdcall; AddPathPolygon: function(path: THandle; Points: pointer; Count: integer): TGdipStatus; stdcall; AddPathRectangle: function(path: THandle; X,Y,width,height: Integer): TGdipStatus; stdcall; ClosePath: function(path: THandle): TGdipStatus; stdcall; DrawArc: function(graphics, pen: THandle; X,Y,width,height: Integer; StartAndle, SweepAngle: single): TGdipStatus; stdcall; DrawBezier: function(graphics, pen: THandle; X1,Y1,X2,Y2,X3,Y3,X4,Y4: Integer): TGdipStatus; stdcall; DrawPie: function(graphics, pen: THandle; X,Y,width,height: Integer; StartAndle, SweepAngle: single): TGdipStatus; stdcall; protected /// this function is available only with GDI+ version 1.1 fConvertToEmfPlus: function(graphics, image: THandle; var flag: BOOL; emftype: TEmfType; description: PWideChar; var out_metafile: integer): TGdipStatus; stdcall; fConvertToEmfPlusTested: Boolean; fForceInternalConvertToEmfPlus: boolean; function getNativeConvertToEmfPlus: boolean; ................................................................................ FreeMem(VerBuf); end; end; end; {$endif} constructor TGDIPlusFull.Create(aDllFileName: TFileName); const GdiPFullProcNames: array[0..61] of PChar = ('GdipDrawLineI','GdipCreatePen1','GdipDeletePen','GdipFlush', 'GdipSetSmoothingMode','GdipSetTextRenderingHint', 'GdipSetPenBrushFill','GdipSetPenColor','GdipSetPenWidth', 'GdipDeleteBrush','GdipCreateSolidFill', 'GdipFillRectangleI', 'GdipFillEllipseI', 'GdipDrawEllipseI', 'GdipDrawCurveI', 'GdipGraphicsClear', 'GdipSetPageUnit','GdipDrawRectangleI', 'GdipSetPenDashStyle', ................................................................................ 'GdipCreateFontFromDC','GdipDeleteFont', 'GdipCreateFontFromLogfontW', 'GdipDrawString','GdipMeasureString','GdipDrawDriverString', 'GdipCreatePath','GdipDeletePath','GdipDrawPath','GdipFillPath', 'GdipAddPathLineI','GdipAddPathLine2I','GdipAddPathArcI','GdipAddPathCurveI', 'GdipAddPathClosedCurveI','GdipAddPathEllipseI','GdipAddPathPolygonI', 'GdipAddPathRectangleI','GdipClosePathFigure', 'GdipDrawArcI','GdipDrawBezierI','GdipDrawPieI', nil); Office2003Version= $B0000; // Office 2003 = Office 11 ($B) var i: integer; begin if (aDllFileName='') or not FileExists(aDllFileName) then begin // first search gdiplus11.dll / gdiplus.dll in the same directory aDllFileName := ExtractFilePath(paramstr(0))+'gdiplus11.dll'; |
> > > > > > > > > > > > > > > > > > > | > |
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 ... 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 ... 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 .... 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 .... 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 |
TEmfType = ( etEmfOnly=3, etEmfPlusOnly, etEmfPlusDual); /// GDI+ available filling modes TFillMode = ( fmAlternate, fmWinding); /// GDI+ lock mode for GdipFull.BitmapLockBits TLockModeOption = ( lmRead, lmWrite, lmUserInputBuf, lmReserved=31); /// GDI+ error codes TGdipStatus = ( stOk, stGenericError, stInvalidParameter, stOutOfMemory, stObjectBusy, ................................................................................ X,Y: Single; end; PGdipPointFArray = ^TGdipPointFArray; /// GDI+ floating point coordinates for an array of points TGdipPointFArray = array[0..1000] of TGdipPointF; /// data as retrieved by GdipFull.BitmapLockBits TGdipBitmapData = packed record Width: Cardinal; Height: Cardinal; Stride: Integer; PixelFormat: Integer; Scan0: Pointer; Reserved: Cardinal; end; PGdipBitmapData = ^TGdipBitmapData; type /// an object wrapper to load dynamically a library TSynLibrary = class protected fHandle: HMODULE; /// helper to load all needed procedure entries from a dynamic library ................................................................................ AddPathEllipse: function(path: THandle; X,Y,width,height: Integer): TGdipStatus; stdcall; AddPathPolygon: function(path: THandle; Points: pointer; Count: integer): TGdipStatus; stdcall; AddPathRectangle: function(path: THandle; X,Y,width,height: Integer): TGdipStatus; stdcall; ClosePath: function(path: THandle): TGdipStatus; stdcall; DrawArc: function(graphics, pen: THandle; X,Y,width,height: Integer; StartAndle, SweepAngle: single): TGdipStatus; stdcall; DrawBezier: function(graphics, pen: THandle; X1,Y1,X2,Y2,X3,Y3,X4,Y4: Integer): TGdipStatus; stdcall; DrawPie: function(graphics, pen: THandle; X,Y,width,height: Integer; StartAndle, SweepAngle: single): TGdipStatus; stdcall; CreateBitmapFromScan0: function(width, height, stride, format: integer; scan0: PByte; out bitmap: THandle): TGdipStatus; stdcall; BitmapLockBits: function(Bitmap: THandle; const Rect: PGdipRect; Flags: TLockModeOption; Format: integer; out LockedBitmapData: TGdipBitmapData): TGdipStatus; stdcall; BitmapUnlockBits: function(Bitmap: THandle; const LockedBitmapData: TGdipBitmapData): TGdipStatus; stdcall; protected /// this function is available only with GDI+ version 1.1 fConvertToEmfPlus: function(graphics, image: THandle; var flag: BOOL; emftype: TEmfType; description: PWideChar; var out_metafile: integer): TGdipStatus; stdcall; fConvertToEmfPlusTested: Boolean; fForceInternalConvertToEmfPlus: boolean; function getNativeConvertToEmfPlus: boolean; ................................................................................ FreeMem(VerBuf); end; end; end; {$endif} constructor TGDIPlusFull.Create(aDllFileName: TFileName); const GdiPFullProcNames: array[0..64] of PChar = ('GdipDrawLineI','GdipCreatePen1','GdipDeletePen','GdipFlush', 'GdipSetSmoothingMode','GdipSetTextRenderingHint', 'GdipSetPenBrushFill','GdipSetPenColor','GdipSetPenWidth', 'GdipDeleteBrush','GdipCreateSolidFill', 'GdipFillRectangleI', 'GdipFillEllipseI', 'GdipDrawEllipseI', 'GdipDrawCurveI', 'GdipGraphicsClear', 'GdipSetPageUnit','GdipDrawRectangleI', 'GdipSetPenDashStyle', ................................................................................ 'GdipCreateFontFromDC','GdipDeleteFont', 'GdipCreateFontFromLogfontW', 'GdipDrawString','GdipMeasureString','GdipDrawDriverString', 'GdipCreatePath','GdipDeletePath','GdipDrawPath','GdipFillPath', 'GdipAddPathLineI','GdipAddPathLine2I','GdipAddPathArcI','GdipAddPathCurveI', 'GdipAddPathClosedCurveI','GdipAddPathEllipseI','GdipAddPathPolygonI', 'GdipAddPathRectangleI','GdipClosePathFigure', 'GdipDrawArcI','GdipDrawBezierI','GdipDrawPieI', 'GdipCreateBitmapFromScan0', 'GdipBitmapLockBits', 'GdipBitmapUnlockBits', nil); Office2003Version= $B0000; // Office 2003 = Office 11 ($B) var i: integer; begin if (aDllFileName='') or not FileExists(aDllFileName) then begin // first search gdiplus11.dll / gdiplus.dll in the same directory aDllFileName := ExtractFilePath(paramstr(0))+'gdiplus11.dll'; |