1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-02-02 10:25:26 +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.PlatformDefault = False
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
Touch.InteractiveGestures = [LongTap, DoubleTap]
Align = Client
TabOrder = 0
Text = 'https://www.google.com'
Size.Width = 754.000000000000000000
Size.Width = 709.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
OnEnter = AddressEdtEnter
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
object Panel1: TFMXBufferPanel
Align = Client
@ -71,8 +94,15 @@ object FMXExternalPumpBrowserFrm: TFMXExternalPumpBrowserFrm
Enabled = False
Interval = 300
OnTimer = Timer1Timer
Left = 384
Top = 313
Left = 40
Top = 137
end
object SaveDialog1: TSaveDialog
DefaultExt = 'bmp'
Filter = 'Bitmap files (*.bmp)|*.BMP'
Title = 'Save snapshot'
Left = 40
Top = 201
end
object chrmosr: TFMXChromium
OnAfterCreated = chrmosrAfterCreated
@ -85,7 +115,7 @@ object FMXExternalPumpBrowserFrm: TFMXExternalPumpBrowserFrm
OnPopupSize = chrmosrPopupSize
OnPaint = chrmosrPaint
OnCursorChange = chrmosrCursorChange
Left = 272
Top = 313
Left = 40
Top = 73
end
end

View File

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

View File

@ -193,6 +193,17 @@ begin
else
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
// override it in the TChromium.CreateBrowser function
Chromium1.CreateBrowser(CEFWindowParent1, '', TempContext);

View File

@ -366,7 +366,6 @@ const
CEF_DESTROY = WM_APP + $A06;
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_MAXIMUM = $7FFFFFFF;
CEF_TIMER_MAXDELAY = 1000 div 30; // 30fps