1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-04-17 06:57:13 +02:00

Fixed resize issue in the FMXExternalPumpBrowser demo

- Added a button to FMXExternalPumpBrowser to take a snapshot.
- Removed unused constant
- Added more comments to MDIBrowser demo
This commit is contained in:
Salvador Díaz Fau 2018-01-27 10:40:10 +01:00
parent 6caf630669
commit 75cee6e6d8
4 changed files with 98 additions and 25 deletions

View File

@ -24,28 +24,51 @@ object FMXExternalPumpBrowserFrm: TFMXExternalPumpBrowserFrm
Size.Height = 33.000000000000000000 Size.Height = 33.000000000000000000
Size.PlatformDefault = False Size.PlatformDefault = False
TabOrder = 1 TabOrder = 1
object GoBtn: TButton
Align = Right
Position.X = 759.000000000000000000
Position.Y = 5.000000000000000000
Size.Width = 36.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
Text = 'Go'
OnClick = GoBtnClick
OnEnter = GoBtnEnter
end
object AddressEdt: TEdit object AddressEdt: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap] Touch.InteractiveGestures = [LongTap, DoubleTap]
Align = Client Align = Client
TabOrder = 0 TabOrder = 0
Text = 'https://www.google.com' Text = 'https://www.google.com'
Size.Width = 754.000000000000000000 Size.Width = 709.000000000000000000
Size.Height = 23.000000000000000000 Size.Height = 23.000000000000000000
Size.PlatformDefault = False Size.PlatformDefault = False
OnEnter = AddressEdtEnter OnEnter = AddressEdtEnter
end end
object Panel2: TPanel
Align = Right
Padding.Left = 5.000000000000000000
Position.X = 714.000000000000000000
Position.Y = 5.000000000000000000
Size.Width = 81.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
object GoBtn: TButton
Align = Left
Position.X = 5.000000000000000000
Size.Width = 36.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
Text = 'Go'
OnClick = GoBtnClick
OnEnter = GoBtnEnter
end
object SnapshotBtn: TButton
Align = Right
StyledSettings = [Style, FontColor]
Position.X = 45.000000000000000000
Size.Width = 36.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
Text = #181
TextSettings.Font.Family = 'Webdings'
TextSettings.Font.Size = 32.000000000000000000
OnClick = SnapshotBtnClick
OnEnter = SnapshotBtnEnter
end
end
end end
object Panel1: TFMXBufferPanel object Panel1: TFMXBufferPanel
Align = Client Align = Client
@ -71,8 +94,15 @@ object FMXExternalPumpBrowserFrm: TFMXExternalPumpBrowserFrm
Enabled = False Enabled = False
Interval = 300 Interval = 300
OnTimer = Timer1Timer OnTimer = Timer1Timer
Left = 384 Left = 40
Top = 313 Top = 137
end
object SaveDialog1: TSaveDialog
DefaultExt = 'bmp'
Filter = 'Bitmap files (*.bmp)|*.BMP'
Title = 'Save snapshot'
Left = 40
Top = 201
end end
object chrmosr: TFMXChromium object chrmosr: TFMXChromium
OnAfterCreated = chrmosrAfterCreated OnAfterCreated = chrmosrAfterCreated
@ -85,7 +115,7 @@ object FMXExternalPumpBrowserFrm: TFMXExternalPumpBrowserFrm
OnPopupSize = chrmosrPopupSize OnPopupSize = chrmosrPopupSize
OnPaint = chrmosrPaint OnPaint = chrmosrPaint
OnCursorChange = chrmosrCursorChange OnCursorChange = chrmosrCursorChange
Left = 272 Left = 40
Top = 313 Top = 73
end end
end end

View File

@ -58,10 +58,13 @@ type
TFMXExternalPumpBrowserFrm = class(TForm) TFMXExternalPumpBrowserFrm = class(TForm)
AddressPnl: TPanel; AddressPnl: TPanel;
AddressEdt: TEdit; AddressEdt: TEdit;
GoBtn: TButton;
Panel1: TFMXBufferPanel; Panel1: TFMXBufferPanel;
chrmosr: TFMXChromium; chrmosr: TFMXChromium;
Timer1: TTimer; Timer1: TTimer;
Panel2: TPanel;
GoBtn: TButton;
SnapshotBtn: TButton;
SaveDialog1: TSaveDialog;
procedure GoBtnClick(Sender: TObject); procedure GoBtnClick(Sender: TObject);
procedure GoBtnEnter(Sender: TObject); procedure GoBtnEnter(Sender: TObject);
@ -97,6 +100,8 @@ type
procedure Timer1Timer(Sender: TObject); procedure Timer1Timer(Sender: TObject);
procedure AddressEdtEnter(Sender: TObject); procedure AddressEdtEnter(Sender: TObject);
procedure SnapshotBtnClick(Sender: TObject);
procedure SnapshotBtnEnter(Sender: TObject);
protected protected
FPopUpBitmap : TBitmap; FPopUpBitmap : TBitmap;
@ -533,9 +538,11 @@ procedure TFMXExternalPumpBrowserFrm.chrmosrPaint(Sender : TObject;
height : Integer); height : Integer);
var var
src, dst: PByte; src, dst: PByte;
i, j, TempLineSize, TempSrcOffset, TempDstOffset, SrcStride, DstStride : Integer; i, j, TempLineSize, TempSrcOffset, TempDstOffset, SrcStride, TempWidth, TempHeight : Integer;
n : NativeUInt; n : NativeUInt;
TempWidth, TempHeight, TempScanlineSize : integer; {$IFNDEF DELPHI17_UP}
TempScanlineSize, DstStride : integer;
{$ENDIF}
TempBufferBits : Pointer; TempBufferBits : Pointer;
TempForcedResize : boolean; TempForcedResize : boolean;
TempBitmapData : TBitmapData; TempBitmapData : TBitmapData;
@ -563,7 +570,9 @@ begin
TempWidth := FPopUpBitmap.Width; TempWidth := FPopUpBitmap.Width;
TempHeight := FPopUpBitmap.Height; TempHeight := FPopUpBitmap.Height;
{$IFNDEF DELPHI17_UP}
TempScanlineSize := FPopUpBitmap.BytesPerLine; TempScanlineSize := FPopUpBitmap.BytesPerLine;
{$ENDIF}
TempBitmap := FPopUpBitmap; TempBitmap := FPopUpBitmap;
end end
else else
@ -571,7 +580,9 @@ begin
TempForcedResize := Panel1.UpdateBufferDimensions(Width, Height) or not(Panel1.BufferIsResized(False)); TempForcedResize := Panel1.UpdateBufferDimensions(Width, Height) or not(Panel1.BufferIsResized(False));
TempWidth := Panel1.BufferWidth; TempWidth := Panel1.BufferWidth;
TempHeight := Panel1.BufferHeight; TempHeight := Panel1.BufferHeight;
{$IFNDEF DELPHI17_UP}
TempScanlineSize := Panel1.ScanlineSize; TempScanlineSize := Panel1.ScanlineSize;
{$ENDIF}
TempBitmap := Panel1.Buffer; TempBitmap := Panel1.Buffer;
end; end;
@ -579,13 +590,11 @@ begin
if (TempBitmap <> nil) {$IFDEF DELPHI17_UP}and TempBitmap.Map(TMapAccess.ReadWrite, TempBitmapData){$ENDIF} then if (TempBitmap <> nil) {$IFDEF DELPHI17_UP}and TempBitmap.Map(TMapAccess.ReadWrite, TempBitmapData){$ENDIF} then
begin begin
try try
{$IFDEF DELPHI17_UP} {$IFNDEF DELPHI17_UP}
TempBufferBits := TempBitmapData.Data;
{$ELSE}
TempBufferBits := TempBitmapData.StartLine; TempBufferBits := TempBitmapData.StartLine;
DstStride := TempScanlineSize;
{$ENDIF} {$ENDIF}
SrcStride := Width * SizeOf(TRGBQuad); SrcStride := Width * SizeOf(TRGBQuad);
DstStride := TempScanlineSize;
n := 0; n := 0;
@ -598,19 +607,33 @@ begin
if (TempLineSize > 0) then if (TempLineSize > 0) then
begin begin
TempSrcOffset := ((dirtyRects[n].y * Width) + dirtyRects[n].x) * SizeOf(TRGBQuad); TempSrcOffset := ((dirtyRects[n].y * Width) + dirtyRects[n].x) * SizeOf(TRGBQuad);
{$IFDEF DELPHI17_UP}
TempDstOffset := (dirtyRects[n].x * SizeOf(TRGBQuad));
{$ELSE}
TempDstOffset := (dirtyRects[n].y * TempScanlineSize) + (dirtyRects[n].x * SizeOf(TRGBQuad)); TempDstOffset := (dirtyRects[n].y * TempScanlineSize) + (dirtyRects[n].x * SizeOf(TRGBQuad));
{$ENDIF}
src := @PByte(buffer)[TempSrcOffset]; src := @PByte(buffer)[TempSrcOffset];
{$IFNDEF DELPHI17_UP}
dst := @PByte(TempBufferBits)[TempDstOffset]; dst := @PByte(TempBufferBits)[TempDstOffset];
{$ENDIF}
i := 0; i := 0;
j := min(dirtyRects[n].height, TempHeight - dirtyRects[n].y); j := min(dirtyRects[n].height, TempHeight - dirtyRects[n].y);
while (i < j) do while (i < j) do
begin begin
{$IFDEF DELPHI17_UP}
TempBufferBits := TempBitmapData.GetScanline(dirtyRects[n].y + i);
dst := @PByte(TempBufferBits)[TempDstOffset];
{$ENDIF}
Move(src^, dst^, TempLineSize); Move(src^, dst^, TempLineSize);
{$IFNDEF DELPHI17_UP}
inc(dst, DstStride); inc(dst, DstStride);
{$ENDIF}
inc(src, SrcStride); inc(src, SrcStride);
inc(i); inc(i);
end; end;
@ -803,4 +826,14 @@ begin
{$ENDIF} {$ENDIF}
end; end;
procedure TFMXExternalPumpBrowserFrm.SnapshotBtnClick(Sender: TObject);
begin
if SaveDialog1.Execute then Panel1.SaveToFile(SaveDialog1.FileName);
end;
procedure TFMXExternalPumpBrowserFrm.SnapshotBtnEnter(Sender: TObject);
begin
chrmosr.SendFocusEvent(False);
end;
end. end.

View File

@ -193,6 +193,17 @@ begin
else else
TempContext := nil; TempContext := nil;
{
// This would be a good place to set the proxy server settings for all your child
// browsers if you use a proxy
Chromium1.ProxyType := CEF_PROXYTYPE_FIXED_SERVERS;
Chromium1.ProxyScheme := psHTTP;
Chromium1.ProxyServer := '1.2.3.4';
Chromium1.ProxyPort := 1234;
Chromium1.ProxyUsername := '';
Chromium1.ProxyPassword := '';
}
// In case you used a custom cookies path in the GlobalCEFApp you can // In case you used a custom cookies path in the GlobalCEFApp you can
// override it in the TChromium.CreateBrowser function // override it in the TChromium.CreateBrowser function
Chromium1.CreateBrowser(CEFWindowParent1, '', TempContext); Chromium1.CreateBrowser(CEFWindowParent1, '', TempContext);

View File

@ -366,7 +366,6 @@ const
CEF_DESTROY = WM_APP + $A06; CEF_DESTROY = WM_APP + $A06;
CEF_DOONBEFORECLOSE = WM_APP + $A07; CEF_DOONBEFORECLOSE = WM_APP + $A07;
CEF_TIMER_FIRST_ID = high(cardinal) div 3; // A highly unlikely nIDEvent for our timers
CEF_TIMER_MINIMUM = $0000000A; CEF_TIMER_MINIMUM = $0000000A;
CEF_TIMER_MAXIMUM = $7FFFFFFF; CEF_TIMER_MAXIMUM = $7FFFFFFF;
CEF_TIMER_MAXDELAY = 1000 div 30; // 30fps CEF_TIMER_MAXDELAY = 1000 div 30; // 30fps