diff --git a/tim2view.dpr b/tim2view.dpr index 0bb4b83..3d4a86c 100644 --- a/tim2view.dpr +++ b/tim2view.dpr @@ -14,9 +14,9 @@ uses uTIM in 'units\uTIM.pas', uDrawTIM in 'units\uDrawTIM.pas', uEventWaitThread in 'units\uEventWaitThread.pas', - uBrowseForFolder in 'units\uBrowseForFolder.pas', uScanResult in 'units\uScanResult.pas', - uSettings in 'units\uSettings.pas'; + uSettings in 'units\uSettings.pas', + uBrowseForFolder in 'units\uBrowseForFolder.pas'; {$R *.res} diff --git a/tim2view.dproj b/tim2view.dproj index 01adc29..0733094 100644 --- a/tim2view.dproj +++ b/tim2view.dproj @@ -6,8 +6,8 @@ tim2view.dpr True Release - Win32 - 1 + Win64 + 3 Application @@ -34,6 +34,12 @@ true true + + true + Cfg_1 + true + true + true Base @@ -45,6 +51,12 @@ true true + + true + Cfg_2 + true + true + bindcompfmx;fmx;rtl;dbrtl;DbxClientDriver;IndySystem;bindcomp;inetdb;DataSnapClient;DataSnapServer;DataSnapCommon;DBXInterBaseDriver;DataSnapProviderClient;xmlrtl;DbxCommonDriver;IndyProtocols;dbxcds;DBXMySQLDriver;bindengine;soaprtl;DBXOracleDriver;CustomIPTransport;dsnap;DBXInformixDriver;IndyCore;fmxase;DBXFirebirdDriver;inet;fmxobj;inetdbxpress;DBXSybaseASADriver;fmxdae;IPIndyImpl;dbexpress;DataSnapIndy10ServerTransport;$(DCC_UsePackage) System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) @@ -59,7 +71,7 @@ .\units;$(DCC_UnitSearchPath) - vcldbx;TeeDB;inetdbbde;vclib;DBXOdbcDriver;Tee;DBXSybaseASEDriver;ibxpress;svnui;vclimg;fmi;intrawebdb_120_160;vclactnband;vcldb;FMXTee;vcldsnap;bindcompvcl;TeeUI;vclie;DBXDb2Driver;Intraweb_120_160;vcltouch;websnap;vclribbon;VclSmp;vcl;DataSnapConnectors;CloudService;DBXMSSQLDriver;FmxTeeUI;dsnapcon;vclx;webdsnap;svn;bdertl;adortl;$(DCC_UsePackage) + vcldbx;TeeDB;inetdbbde;vclib;DBXOdbcDriver;Tee;DBXSybaseASEDriver;ibxpress;svnui;vclimg;fmi;intrawebdb_120_160;vclactnband;vcldb;FMXTee;vcldsnap;bindcompvcl;TeeUI;vclie;DBXDb2Driver;Intraweb_120_160;vcltouch;websnap;vclribbon;VclSmp;vcl;DataSnapConnectors;CloudService;DBXMSSQLDriver;FmxTeeUI;dsnapcon;vclx;webdsnap;svn;bdertl;adortl;PBFolderDialogPackRun;$(DCC_UsePackage) true Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 1033 @@ -67,6 +79,11 @@ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\default_app.manifest + 1033 + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + true + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= DBXOdbcDriver;DBXSybaseASEDriver;vclimg;vclactnband;vcldb;vcldsnap;bindcompvcl;vclie;DBXDb2Driver;vcltouch;websnap;VclSmp;vcl;DBXMSSQLDriver;dsnapcon;vclx;webdsnap;adortl;$(DCC_UsePackage) @@ -80,6 +97,7 @@ true + false false 3 true @@ -95,6 +113,11 @@ 1033 false + + 3 + true + $(BDS)\bin\default_app.manifest + false RELEASE;$(DCC_Define) @@ -102,15 +125,24 @@ 0 + false + true + 3 + 10485760 CompanyName=Lab 313;FileDescription=The best TIMs tool ever!:);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= true - true - madExcept;LeakChecking;$(DCC_Define) - 3 1033 false true + + true + 1033 + false + 3 + true + true + MainSource @@ -126,9 +158,9 @@ - + Cfg_2 Base @@ -184,7 +216,7 @@ True - False + True 12 diff --git a/tim2view.res b/tim2view.res index fadbcb1..2a0bfa4 100644 Binary files a/tim2view.res and b/tim2view.res differ diff --git a/units/uBrowseForFolder.pas b/units/uBrowseForFolder.pas index 4a1016f..1f7917d 100644 --- a/units/uBrowseForFolder.pas +++ b/units/uBrowseForFolder.pas @@ -21,6 +21,7 @@ function BrowseForFolderCallBack(Wnd: HWND; uMsg: UINT; lParam, lpData: lParam) begin if uMsg = BFFM_INITIALIZED then SendMessage(Wnd, BFFM_SETSELECTION, 1, Integer(@lg_StartFolder[1])); + result := 0; end; @@ -52,7 +53,7 @@ begin browse_info.pszDisplayName := @folder[0]; browse_info.lpszTitle := PChar(browseTitle); browse_info.ulFlags := BIF_DONTGOBELOWDOMAIN or BIF_RETURNONLYFSDIRS or - BIF_STATUSTEXT or BIF_VALIDATE or BIF_USENEWUI or BIF_NONEWFOLDERBUTTON; + BIF_STATUSTEXT or BIF_VALIDATE {or BIF_USENEWUI} or BIF_NONEWFOLDERBUTTON; browse_info.hwndOwner := appHWND; if initialFolder <> '' then diff --git a/units/uCommon.pas b/units/uCommon.pas index 29fd2be..a49bb62 100644 --- a/units/uCommon.pas +++ b/units/uCommon.pas @@ -26,7 +26,6 @@ type TBytesArray = array [0 .. cMaxFileSize - 1] of byte; PBytesArray = ^TBytesArray; -function GetStartDir: string; function GetFileSizeAPI(const FileName: string): Int64; function CheckFileExists(const FileName: string): boolean; // function cHex2Int( const Value : string) : Integer; @@ -124,7 +123,7 @@ var FindData: TWin32FindData; hFind: THandle; begin - Result := -1; + Result := 0; hFind := FindFirstFile(PChar(FileName), FindData); if hFind <> INVALID_HANDLE_VALUE then @@ -137,21 +136,4 @@ begin end; -function GetStartDir: string; -const - MAX_PATH = 260; -var - Buffer: array [0 .. MAX_PATH] of Char; - I: Integer; -begin - I := GetModuleFileName(0, Buffer, MAX_PATH); - for I := I downto 0 do - if Buffer[I] = '\' then - begin - Buffer[I + 1] := #0; - break; - end; - Result := Buffer; -end; - end. diff --git a/units/uDrawTIM.pas b/units/uDrawTIM.pas index e23c74f..459e6d9 100644 --- a/units/uDrawTIM.pas +++ b/units/uDrawTIM.pas @@ -119,14 +119,14 @@ begin IMAGE_DATA_POS := 0; + Transparent := TranspMode in [0, 1]; + SemiTransparent := TranspMode in [0, 2]; + R := 0; G := 0; B := 0; STP := 0; - Transparent := TranspMode in [0, 1]; - SemiTransparent := TranspMode in [0, 2]; - for Y := 1 to RH do for X := 1 to RW do begin diff --git a/units/uMain.pas b/units/uMain.pas index 7faef91..887ee89 100644 --- a/units/uMain.pas +++ b/units/uMain.pas @@ -342,7 +342,7 @@ begin TIM_NAME := Format(cAutoExtractionTimFormat, [ExtractJustName(FName), I, BIT_MODE]); - Path := IncludeTrailingPathDelimiter(GetStartDir + cExtractedTimsDir); + Path := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)) + cExtractedTimsDir); CreateDir(Path); Path := IncludeTrailingPathDelimiter(Path + ExtractFileName(FName)); CreateDir(Path); @@ -403,6 +403,7 @@ begin begin ScanPath(SelectedDir); LastDir := SelectedDir; + Settings.LastDir := LastDir; end; end; @@ -500,10 +501,20 @@ begin end; procedure TfrmMain.btnStopScanClick(Sender: TObject); +var + I: Integer; begin if ScanThreads.Count = 0 then Exit; - ScanThreads.First.StopScan := True; + for I := 1 to ScanThreads.Count do + ScanThreads[I - 1].StopScan := True; + + ScanThreads.Clear; + StartedScans := 0; + btnStopScan.Tag := NativeInt(True); + + ScanFinished(nil); + actReturnFocusExecute(Self); end; @@ -676,6 +687,7 @@ begin actStretch.Checked := Settings.StretchMode; cbbTranspMode.ItemIndex := Settings.TranspMode; + LastDir := Settings.LastDir; hGridRect.Top := -1; hGridRect.Left := -1; @@ -690,7 +702,7 @@ begin StartedScans := 0; New(PNG); PNG^ := nil; - LastDir := GetStartDir; + SetCLUTListToNoCLUT; Caption := Format('%s v%s', [cProgramName, cProgramVersion]); DragAcceptFiles(Handle, True); @@ -792,14 +804,15 @@ var Dir: string; begin Dir := IncludeTrailingPathDelimiter(Directory); - isFound := FindFirst(Dir + '*.*', faAnyFile, sRec) = 0; + isFound := FindFirst(Dir + '*', faAnyFile, sRec) = 0; while isFound do begin if (sRec.Name <> '.') and (sRec.Name <> '..') then begin if (sRec.Attr and faDirectory) = faDirectory then - ScanDirectory(Dir + sRec.Name); - ScanPath(Dir + sRec.Name); + ScanDirectory(Dir + sRec.Name) + else + ScanFile(Dir + sRec.Name); end; Application.ProcessMessages; isFound := FindNext(sRec) = 0; @@ -867,19 +880,23 @@ begin begin cbbFiles.ItemIndex := cbbFiles.Items.IndexOf(FileName); btnStopScan.Enabled := False; + btnStopScan.Tag := NativeInt(True); CheckButtonsAndMainMenu; Exit; end; - ScanThreads.Add(TScanThread.Create(FileName, GetImageScan(FileName))); - ScanThreads.Last.FreeOnTerminate := True; - ScanThreads.Last.Priority := tpNormal; - ScanThreads.Last.OnTerminate := ScanFinished; - - if StartedScans < GetCoreCount then + if not Boolean(btnStopScan.Tag) then begin - ScanThreads.Last.Start; - Inc(StartedScans); + ScanThreads.Add(TScanThread.Create(FileName, GetImageScan(FileName))); + ScanThreads.Last.FreeOnTerminate := True; + ScanThreads.Last.Priority := tpNormal; + ScanThreads.Last.OnTerminate := ScanFinished; + + if StartedScans < GetCoreCount then + begin + ScanThreads.Last.Start; + Inc(StartedScans); + end; end; end; @@ -893,7 +910,7 @@ begin if ScanThreads.Count <> 0 then begin for I := 1 to ScanThreads.Count do - if ScanThreads[I - 1].Suspended then + if ScanThreads[I - 1].Suspended and (not ScanThreads[I - 1].StopScan) then begin ScanThreads[I - 1].Start; Inc(StartedScans); @@ -913,12 +930,16 @@ begin end; btnStopScan.Enabled := False; + btnStopScan.Tag := NativeInt(True); end; procedure TfrmMain.ScanPath(const Path: string); begin if Path = '' then Exit; + btnStopScan.Enabled := True; + btnStopScan.Tag := NativeInt(False); + if CheckFileExists(Path) then ScanFile(Path) else diff --git a/units/uScanThread.pas b/units/uScanThread.pas index c86b804..5691d49 100644 --- a/units/uScanThread.pas +++ b/units/uScanThread.pas @@ -29,7 +29,7 @@ type public constructor Create(const FileToScan: string; ImageScan: boolean); //property Started: boolean read pStarted write pStarted; - property StopScan: boolean write pStopScan; + property StopScan: boolean read pStopScan write pStopScan; end; implementation @@ -115,7 +115,8 @@ begin pScanFinished := False; pTIMNumber := 0; - repeat + while not pStopScan do + begin if LoadTimFromBuf(ClearBuffer, TIM, pClearBufferPosition) then begin if pScanResult.IsImage then @@ -158,12 +159,13 @@ begin ClearSectorBuffer(SectorBuffer, ClearBuffer); end; - until pStopScan; + end; FreeTIM(TIM); FreeMemory(SectorBuffer); FreeMemory(ClearBuffer); pSrcFileStream.Free; + pStopScan := True; pFilePos := 0; pStatusText := ''; @@ -197,7 +199,6 @@ end; procedure TScanThread.StartScan; begin - frmMain.btnStopScan.Enabled := True; frmMain.cbbFiles.Enabled := False; frmMain.lvList.Enabled := False; frmMain.actExtractList.Enabled := False; diff --git a/units/uSettings.pas b/units/uSettings.pas index 9eee8a1..6680caf 100644 --- a/units/uSettings.pas +++ b/units/uSettings.pas @@ -19,11 +19,13 @@ unit uSettings; private FTranspMode: Integer; FStretchMode: Boolean; + FLastDir: string; public constructor Create; published property TranspMode: Integer read FTranspMode write FTranspMode; property StretchMode: Boolean read FStretchMode write FStretchMode; + property LastDir: string read FLastDir write FLastDir; end; var