diff --git a/packages/fcl-base/src/streamio.pp b/packages/fcl-base/src/streamio.pp index b79826356f..ef6a1b605c 100644 --- a/packages/fcl-base/src/streamio.pp +++ b/packages/fcl-base/src/streamio.pp @@ -99,12 +99,15 @@ begin begin InOutFunc:=@StreamWrite; FlushFunc:=@StreamWrite; - if mode=fmAppend then - Try - GetStream(F).Seek(0,soFromEnd); - except - InOutRes:=156; - end; + if Mode=fmAppend then + begin + Mode:=fmOutput; // see comments in text.inc + Try + GetStream(F).Seek(0,soFromEnd); + except + InOutRes:=156; + end; + end; end; end; end; diff --git a/packages/fcl-report/src/fpreport.pp b/packages/fcl-report/src/fpreport.pp index 119a6fc24c..5945f0f924 100644 --- a/packages/fcl-report/src/fpreport.pp +++ b/packages/fcl-report/src/fpreport.pp @@ -247,6 +247,8 @@ const bmOncePerDataloop,bmOncePerPage,bmOncePerPage,bmOncePerPage, bmUnrestricted); + DefaultImageType = 'png'; + const cMMperInch = 25.4; cCMperInch = 2.54; @@ -2090,10 +2092,12 @@ type FImage: TFPCustomImage; FStretched: boolean; FFieldName: TFPReportString; + FDBImageType : TFPReportString; FImageID: integer; procedure SetImage(AValue: TFPCustomImage); procedure SetStretched(AValue: boolean); - procedure SetFieldName(AValue: TFPReportString); + procedure SetFieldName(AValue: TFPReportString); + procedure SetDBImageType(AValue: TFPReportString); procedure LoadDBData(AData: TFPReportData); procedure SetImageID(AValue: integer); function GetImage: TFPCustomImage; @@ -2105,6 +2109,7 @@ type property ImageID: integer read FImageID write SetImageID; property Stretched: boolean read FStretched write SetStretched; property FieldName: TFPReportString read FFieldName write SetFieldName; + property DBImageType : TFPReportString read FDBImageType write SetDBImageType; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -2126,6 +2131,7 @@ type property ImageID; property Stretched; property FieldName; + property DBImageType; property OnBeforePrint; end; @@ -5331,16 +5337,55 @@ begin Changed; end; +procedure TFPReportCustomImage.SetDBImageType(AValue: TFPReportString); +begin + if FDBImageType = AValue then + exit; + FDBImageType := AValue; + Changed; +end; + +function TryVarByteArrayToStream(var AValue : Variant; Stream : TMemoryStream) : boolean; +var + p : Pointer; + c : Integer; +begin + Result := False; + if not VarIsArray(AValue) then + exit; + c := VarArrayHighBound(AValue,1) - VarArrayLowBound(AValue,1) + 1; + Result := (c > 0) and VarIsType(AValue[VarArrayLowBound(AValue,1)],varByte); + if not Result then + exit; + p := VarArrayLock(AValue); + try + Stream.SetSize(c); + Move(p^,Stream.Memory^,c); + finally + VarArrayUnlock(AValue); + end; +end; + procedure TFPReportCustomImage.LoadDBData(AData: TFPReportData); var + v : Variant; s: string; lStream: TMemoryStream; + irc : TFPCustomImageReaderClass; begin - s := AData.FieldValues[FFieldName]; + v := AData.FieldValues[FFieldName]; lStream := TMemoryStream.Create; try - FPReportMIMEEncodeStringToStream(s, lStream); - LoadPNGFromStream(lStream) + if not TryVarByteArrayToStream(v,lStream) then + begin + s := v; + FPReportMIMEEncodeStringToStream(s, lStream); + end; + s := Trim(DBImageType); + if (s = '') then + s := DefaultImageType; + irc := TFPCustomImage.FindReaderFromExtension(s); + LoadFromStream(lStream,irc); finally lStream.Free; end; @@ -5389,7 +5434,8 @@ begin idx := TFPReportCustomBand(Parent).Page.Report.Images.GetIndexFromID(ImageID); AWriter.WriteInteger('ImageIndex', idx); AWriter.WriteBoolean('Stretched', Stretched); - AWriter.WriteString('FieldName', FieldName); + AWriter.WriteString('FieldName', FieldName); + AWriter.WriteString('DBImageType', DBImageType); end; procedure TFPReportCustomImage.RecalcLayout; @@ -5402,15 +5448,25 @@ function TFPReportCustomImage.PrepareObject(aRTParent: TFPReportElement): TFPRep Var Img : TFPReportCustomImage; B : TFPReportCustomBand; + D : TFPReportData; begin Result:=inherited PrepareObject(aRTParent); if Result=Nil then exit; img := TFPReportCustomImage(Result); - B:=artParent as TFPReportCustomBand; - if (img.FieldName <> '') and Assigned(B.GetData) then - img.LoadDBData(B.GetData); + if Assigned(Band) then + B := Band + else + B := artParent as TFPReportCustomBand; + if (img.FieldName <> '') then + begin + D := B.GetData; + if not(Assigned(D)) and Assigned(B.Page.Data) then + D := B.Page.Data; + if Assigned(D) then + img.LoadDBData(D); + end; end; constructor TFPReportCustomImage.Create(AOwner: TComponent); @@ -5419,6 +5475,7 @@ begin FImage := nil; FStretched := False; FImageID := -1; + FDBImageType := DefaultImageType; end; destructor TFPReportCustomImage.Destroy; @@ -5458,6 +5515,7 @@ begin end; FStretched := i.Stretched; FFieldName := i.FieldName; + FDBImageType := i.DBImageType; FImageID := i.ImageID; end; end; @@ -5468,7 +5526,8 @@ begin { See code comments in DoWriteLocalProperties() } ImageID := AReader.ReadInteger('ImageIndex', -1); Stretched := AReader.ReadBoolean('Stretched', Stretched); - FieldName := AReader.ReadString('FieldName', FieldName); + FieldName := AReader.ReadString('FieldName', FieldName); + DBImageType := AReader.ReadString('DBImageType', DBImageType); end; procedure TFPReportCustomImage.LoadFromFile(const AFileName: string); diff --git a/packages/winunits-jedi/src/jwawinsock2.pas b/packages/winunits-jedi/src/jwawinsock2.pas index 94b8e1f9e4..0494801130 100644 --- a/packages/winunits-jedi/src/jwawinsock2.pas +++ b/packages/winunits-jedi/src/jwawinsock2.pas @@ -115,7 +115,7 @@ type // type - TSocket = Cardinal; + TSocket = UINT_PTR; // // Select uses arrays of SOCKETs. These macros manipulate such diff --git a/packages/winunits-jedi/src/jwawinsvc.pas b/packages/winunits-jedi/src/jwawinsvc.pas index 3989dfe097..67a1482a6f 100644 --- a/packages/winunits-jedi/src/jwawinsvc.pas +++ b/packages/winunits-jedi/src/jwawinsvc.pas @@ -157,6 +157,12 @@ const {$EXTERNALSYM SERVICE_CONTROL_POWEREVENT} SERVICE_CONTROL_SESSIONCHANGE = $0000000E; {$EXTERNALSYM SERVICE_CONTROL_SESSIONCHANGE} + SERVICE_CONTROL_TIMECHANGE = $00000010; + {$EXTERNALSYM SERVICE_CONTROL_TIMECHANGE} + SERVICE_CONTROL_TRIGGEREVENT = $00000020; + {$EXTERNALSYM SERVICE_CONTROL_TRIGGEREVENT} + SERVICE_CONTROL_USERMODEREBOOT = $00000040; + {$EXTERNALSYM SERVICE_CONTROL_USERMODEREBOOT} // // Service State -- for CurrentState @@ -197,6 +203,13 @@ const {$EXTERNALSYM SERVICE_ACCEPT_POWEREVENT} SERVICE_ACCEPT_SESSIONCHANGE = $00000080; {$EXTERNALSYM SERVICE_ACCEPT_SESSIONCHANGE} + SERVICE_ACCEPT_TIMECHANGE = $00000200; + {$EXTERNALSYM SERVICE_ACCEPT_TIMECHANGE} + SERVICE_ACCEPT_TRIGGEREVENT = $00000400; + {$EXTERNALSYM SERVICE_ACCEPT_TRIGGEREVENT} + SERVICE_ACCEPT_USERMODEREBOOT = $00000800; + {$EXTERNALSYM SERVICE_ACCEPT_USERMODEREBOOT} + // // Service Control Manager object specific access types