On 2016-07-14 11:31, Bo Berglund wrote: > > function TSSCommHandler.ZipFiles(TargetFile: string; FileList: > TStringList): boolean; > var > ZW: TZipWrite; > i: integer; > FileName: string; > begin > Result := false; > ZW := TZipWrite.Create(TargetFile);
I would replace that with a Factory Method call. For example: var lCompress: TCompressAbs; ... begin lCompress := gCompressFactory.CreateInstance(cZipWrite); lCompress.OutputFile := 'something.zip'; for i := 0 to FileList.Count-1 do lCompress.AddFile(FileList[i]); So later when you want to switch to say TurboPower or ZLib, you simply need to change one line. lCompress := gCompressFactory.CreateInstance(cZLib); or lCompress := gCompressFactory.CreateInstance(cTPAbbrevia); What I also do in my applications is to reduce that to a single constant, so only one location (or compiler define) needs to change. I do this always for database connections with tiOPF too. eg: -----------[ constants.pas ]----------- const {$IFDEF ZIPWRITE} cCompress = cZipWrite; {$ENDIF} {$IFDEF ZLIB} cCompress = cZLib; {$ENDIF} {$IFDEF ABBREVIA} cCompress = cTPAbbrevia; {$ENDIF} then everywhere in my application I use the new constant lCompress := gCompressFactory.CreateInstance(cCompress); So now a simple single project wide compiler define change and recompile, and my program will use a different compression component suite throughout. > Do you have an example of how to do the above with FPC ZLib? Yes, and even a nice chapter on explaining it all. http://tiopf.sourceforge.net/Doc/Concepts/6_TheAdaptorForDatabaseIndependence.shtml See the following units in the tiOPF’s “tiopf2” branch: Git repository: https://sourceforge.net/p/tiopf/code/ci/tiopf2/tree/ Files: Core/tiCompress.pas Options/tiCompressNone.pas Options/tiCompressZLib.pas Regards, Graeme -- fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/ My public PGP key: http://tinyurl.com/graeme-pgp _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal