/BrowseFolder.pas |
---|
0,0 → 1,165 |
unit BrowseFolder platform; |
{.$DEFINE USE_FILECTRL_FUNCTIONS} // not recommended! |
{$DEFINE USE_FORMS} // important |
interface |
uses |
Windows, SysUtils, ShlObj, ActiveX |
{$IFDEF USE_FILECTRL_FUNCTIONS}, FileCtrl{$ENDIF} |
{$IFDEF USE_FORMS}, Forms{$ENDIF}; |
function MySelectDirectory(AMsg: string): string; |
implementation |
{$IFNDEF USE_FILECTRL_FUNCTIONS} |
{ |
This code shows the SelectDirectory dialog with additional expansions: |
- an edit box, where the user can type the path name, |
- also files can appear in the list, |
- a button to create new directories. |
Dieser Code zeigt den SelectDirectory-Dialog mit zusätzlichen Erweiterungen: |
- eine Edit-Box, wo der Benutzer den Verzeichnisnamen eingeben kann, |
- auch Dateien können in der Liste angezeigt werden, |
- eine Schaltfläche zum Erstellen neuer Verzeichnisse. |
Ref: http://www.swissdelphicenter.ch/de/showcode.php?id=1802 |
MODIFIED for AutoSFX! |
} |
function AdvSelectDirectory(const Caption: string; const Root: WideString; |
var Directory: string; EditBox: Boolean = False; ShowFiles: Boolean = False; |
AllowCreateDirs: Boolean = True): Boolean; |
// callback function that is called when the dialog has been initialized |
//or a new directory has been selected |
// Callback-Funktion, die aufgerufen wird, wenn der Dialog initialisiert oder |
//ein neues Verzeichnis selektiert wurde |
function SelectDirCB(Wnd: HWND; uMsg: UINT; lParam, lpData: lParam): Integer; |
stdcall; |
var |
PathName: array[0..MAX_PATH] of Char; |
begin |
case uMsg of |
// BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, Ord(True), Integer(lpData)); |
// include the following comment into your code if you want to react on the |
//event that is called when a new directory has been selected |
// binde den folgenden Kommentar in deinen Code ein, wenn du auf das Ereignis |
//reagieren willst, das aufgerufen wird, wenn ein neues Verzeichnis selektiert wurde |
BFFM_SELCHANGED: |
begin |
SHGetPathFromIDList(PItemIDList(lParam), @PathName); |
if PathName = '' then |
begin |
SendMessage(Wnd, BFFM_ENABLEOK, 0, 0); |
end; |
// the directory "PathName" has been selected |
// das Verzeichnis "PathName" wurde selektiert |
end; |
end; |
Result := 0; |
end; |
var |
{$IFDEF USE_FORMS} |
WindowList: Pointer; |
{$ENDIF} |
BrowseInfo: TBrowseInfo; |
Buffer: PChar; |
RootItemIDList, ItemIDList: PItemIDList; |
ShellMalloc: IMalloc; |
IDesktopFolder: IShellFolder; |
Eaten, Flags: LongWord; |
const |
// necessary for some of the additional expansions |
// notwendig für einige der zusätzlichen Erweiterungen |
BIF_USENEWUI = $0040; |
BIF_NOCREATEDIRS = $0200; |
begin |
Result := False; |
if not DirectoryExists(Directory) then |
Directory := ''; |
FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); |
if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then |
begin |
Buffer := ShellMalloc.Alloc(MAX_PATH); |
try |
RootItemIDList := nil; |
if Root <> '' then |
begin |
SHGetDesktopFolder(IDesktopFolder); |
IDesktopFolder.ParseDisplayName({$IFDEF USE_FORMS}Application.Handle{$ELSE}0{$ENDIF}, nil, |
POleStr(Root), Eaten, RootItemIDList, Flags); |
end; |
OleInitialize(nil); |
with BrowseInfo do |
begin |
hwndOwner := {$IFDEF USE_FORMS}Application.Handle{$ELSE}0{$ENDIF}; |
pidlRoot := RootItemIDList; |
pszDisplayName := Buffer; |
lpszTitle := PChar(Caption); |
// defines how the dialog will appear: |
// legt fest, wie der Dialog erscheint: |
ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI or |
BIF_EDITBOX * Ord(EditBox) or BIF_BROWSEINCLUDEFILES * Ord(ShowFiles) or |
BIF_NOCREATEDIRS * Ord(not AllowCreateDirs); |
lpfn := @SelectDirCB; |
if Directory <> '' then |
lParam := Integer(PChar(Directory)); |
end; |
{$IFDEF USE_FORMS} |
WindowList := DisableTaskWindows(0); |
{$ENDIF} |
try |
ItemIDList := ShBrowseForFolder(BrowseInfo); |
finally |
{$IFDEF USE_FORMS} |
EnableTaskWindows(WindowList); |
{$ENDIF} |
end; |
Result := ItemIDList <> nil; |
if Result then |
begin |
ShGetPathFromIDList(ItemIDList, Buffer); |
ShellMalloc.Free(ItemIDList); |
Directory := Buffer; |
end; |
finally |
ShellMalloc.Free(Buffer); |
end; |
end; |
end; |
{$ENDIF} |
function MySelectDirectory(AMsg: string): string; |
begin |
{$IFNDEF USE_FILECTRL_FUNCTIONS} |
if not AdvSelectDirectory(AMsg, '', result, False, False, True) then |
begin |
result := ''; |
Exit; |
end; |
{$ELSE} |
// Nicht so gut: "Arbeitsplatz" etc nicht ausgegraut |
if not SelectDirectory(AMsg, '', result, [sdNewUi, sdNewFolder]) then |
begin |
result := ''; |
Exit; |
end; |
{$ENDIF} |
// Optional |
result := IncludeTrailingPathDelimiter(result); |
result := ExpandUNCFileName(result); |
end; |
end. |
/MakeSFX.exe.manifest |
---|
0,0 → 1,45 |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> |
<security> |
<requestedPrivileges> |
<requestedExecutionLevel |
level="asInvoker" |
uiAccess="false" |
/> |
</requestedPrivileges> |
</security> |
</trustInfo> |
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> |
<application> |
<!-- This Id value indicates the application supports Windows Vista functionality --> |
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" /> |
<!-- This Id value indicates the application supports Windows 7 functionality --> |
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" /> |
</application> |
</compatibility> |
<assemblyIdentity |
version="1.0.0.0" |
processorArchitecture="X86" |
name="viathinksoft.autosfx.creator" |
type="win32" |
/> |
<description>ViaThinkSoft AutoSFX Maker</description> |
<dependency> |
<dependentAssembly> |
<assemblyIdentity |
type="win32" |
name="Microsoft.Windows.Common-Controls" |
version="6.0.0.0" |
publicKeyToken="6595b64144ccf1df" |
language="*" |
processorArchitecture="*" |
/> |
</dependentAssembly> |
</dependency> |
</assembly> |
/MakeSFX.res |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/MakeSFX.rc |
---|
0,0 → 1,30 |
#include "resource.h" |
MAINICON ICON "Icons\RarSFX.ico" |
1 24 "MakeSFX.exe.manifest" |
VS_VERSION_INFO VERSIONINFO |
FILEVERSION 1, 0, 0, 0 |
PRODUCTVERSION 1, 0, 0, 0 |
FILEOS VOS_WINDOWS32 // 0x4 |
FILETYPE VFT_APP // 0x1 |
BEGIN |
BLOCK "StringFileInfo" |
BEGIN |
BLOCK "040704E4" |
BEGIN |
VALUE "CompanyName", "ViaThinkSoft" |
VALUE "FileDescription", "ViaThinkSoft AutoSFX Maker" |
VALUE "FileVersion", "1.0.0.0" |
VALUE "InternalName", "AutoSFX" |
VALUE "LegalCopyright", "© Copyright 2010 ViaThinkSoft" |
VALUE "LegalTrademarks", "Keine" |
VALUE "OriginalFilename", "MakeSFX.exe" |
VALUE "ProductName", "ViaThinkSoft AutoSFX" |
VALUE "ProductVersion", "1.0.0.0" |
VALUE "Webseite", "www.viathinksoft.de" |
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de" |
END |
END |
END |
/ExtractorMain.pas |
---|
2,8 → 2,6 |
{$DEFINE USE_DZIP_UNPACK} |
// todo: compilerswitch, der auch selectdirectory() anzeigt (ohne foldercreate) |
interface |
uses |
26,6 → 24,8 |
procedure AutoTimerTimer(Sender: TObject); |
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
private |
ExtractionInProcess: boolean; |
uz: TZipMaster19; |
RenamingOldPrefix: string; |
RenamingNewPrefix: string; |
zb: TZIPBehavior; |
33,21 → 33,21 |
AbortUnzip: boolean; |
StopAskingPassword: boolean; |
LastTriedPassword: string; |
OverwriteDecision: TOverwriteDecision; |
CachedOverwriteDecision: TOverwriteDecision; |
{$IFNDEF USE_DZIP_UNPACK} |
procedure ExtractDllFromResource(ADirectory: string); |
{$ENDIF} |
procedure ExtractZipHere(AZipfile: string); |
procedure ArcExtFNChange(Sender: TObject; var FileName: TZMString; const BaseDir: TZMString; var IsChanged: Boolean); |
procedure ArcProzess(Sender: TObject; details: TZMProgressDetails); |
procedure ArcTick(Sender: TObject); |
procedure ArcCheckTerminate(Sender: TObject; var abort: Boolean); |
procedure ConfirmOverwrite(Sender: TObject; const ForFile: TZMString; |
procedure EvExtFNChange(Sender: TObject; var FileName: TZMString; const BaseDir: TZMString; var IsChanged: Boolean); |
procedure EvProgress(Sender: TObject; details: TZMProgressDetails); |
procedure EvTick(Sender: TObject); |
procedure EvCheckTerminate(Sender: TObject; var abort: Boolean); |
procedure EvConfirmOverwrite(Sender: TObject; const ForFile: TZMString; |
IsOlder: Boolean; var DoOverwrite: Boolean; DirIndex: Integer); |
procedure ArcPassword(Sender: TObject; IsZipAction: Boolean; |
procedure EvPasswordEvent(Sender: TObject; IsZipAction: Boolean; |
var NewPassword: String; const ForFile: TZMString; var RepeatCount: Longword; |
var Action: TMsgDlgBtn); |
procedure SkipEvent(Sender: TObject; const ForFile: TZMString; |
procedure EvSkipEvent(Sender: TObject; const ForFile: TZMString; |
SkipType: TZMSkipTypes; var ExtError: Integer); |
function StripBaseDir(const s: string): string; |
end; |
58,10 → 58,11 |
implementation |
uses |
ExtractorPassword, ExtractorError, Functions, SFXAutoRun, ExtractorComment; |
ExtractorPassword, ExtractorError, Functions, SFXAutoRun, ExtractorComment, |
BrowseFolder; |
const |
MaxTries = 15; |
EvPasswordTries = 15; |
{$R *.dfm} |
143,12 → 144,15 |
procedure TMainForm.ExtractZipHere(AZipfile: string); |
var |
uz: TZipMaster19; |
l: TStringList; |
s: string; |
ec: Integer; |
ar: TExecuteSFXAutoRunResult; |
GeneralBaseDir: string; |
const |
C_Explorer_Open_Param = '"%s"'; |
C_Explorer_Select_Param = '/n,/select,"%s"'; |
EXPLORER_EXE = 'explorer'; |
resourcestring |
Lng_Aborted = 'Der laufende Prozess wurde abgebrochen. Das extrahierten Dateien sind somit unvollständig.'; |
Lng_Zip_Error = 'ZIP-Master Fehler "%s" (%d)'; |
160,8 → 164,11 |
RenamingOldPrefix := ''; |
RenamingNewPrefix := ''; |
if Assigned(uz) then uz.Free; // uz ist global, damit AbortDLL aufgerufen werden kann |
uz := TZipMaster19.Create(nil); |
try |
ExtractionInProcess := true; |
{$IFNDEF USE_DZIP_UNPACK} |
uz.DLLDirectory := GetTempDirectory + DelZipDLL_Name; |
{$ENDIF} |
175,18 → 182,14 |
uz.ExtrOptions := [ExtrDirNames, ExtrOverWrite, ExtrFreshen, ExtrUpdate, |
ExtrForceDirs, ExtrNTFS]; |
if zb.ConflictBehavior <> cbAvoid then |
begin |
uz.OnExtractOverwrite := ConfirmOverwrite; |
end; |
uz.OnProgress := ArcProzess; |
uz.OnTick := ArcTick; |
uz.OnCheckTerminate := ArcCheckTerminate; |
uz.OnPasswordError := ArcPassword; |
uz.PasswordReqCount := MaxTries; |
uz.OnSkipped := SkipEvent; |
uz.OnSetExtName := ArcExtFNChange; |
// TODO: Mehr events? |
uz.OnExtractOverwrite := EvConfirmOverwrite; |
uz.OnProgress := EvProgress; |
uz.OnTick := EvTick; |
uz.OnCheckTerminate := EvCheckTerminate; |
uz.OnPasswordError := EvPasswordEvent; |
uz.PasswordReqCount := EvPasswordTries; |
uz.OnSkipped := EvSkipEvent; |
uz.OnSetExtName := EvExtFNChange; |
// Find out base dirtory |
202,12 → 205,10 |
end; |
etAsk: |
begin |
if not AdvSelectDirectory(Lng_SelectDir, '', GeneralBaseDir, False, False, True) then |
begin |
Exit; |
GeneralBaseDir := MySelectDirectory(Lng_SelectDir); |
if GeneralBaseDir = '' then Exit; |
end; |
end; |
end; |
GeneralBaseDir := IncludeTrailingPathDelimiter(GeneralBaseDir); |
// Semantic scanning of ZIP to determinate the final extraction directory |
311,8 → 312,9 |
if DirectoryExists(s) then |
begin |
// If it is a folder, open it |
ShellExecute(0, 'open', 'explorer', |
PChar('"'+s+'"'), '', SW_NORMAL); |
ShellExecute(0, 'open', EXPLORER_EXE, |
PChar(Format(C_Explorer_Open_Param, [s])), '', SW_NORMAL); |
end |
else if FileExists(s) then |
begin |
322,23 → 324,27 |
// Im Moment wird bei einem BESTEHENDEN Fenster |
// die Selektion nicht durchgeführt. |
ShellExecute(0, 'open', 'explorer', |
PChar('/n,/select,"'+s+'"'), '', SW_NORMAL); |
ShellExecute(0, 'open', EXPLORER_EXE, |
PChar(Format(C_Explorer_Select_Param, [s])), '', SW_NORMAL); |
end |
else |
begin |
if not AbortUnzip then |
begin |
MessageDlg(Lng_Unknown_Error, mtError, [mbOk], 0); |
end; |
end; |
end; |
finally |
l.Free; |
end; |
finally |
uz.Free; |
ExtractionInProcess := false; |
end; |
end; |
procedure TMainForm.ArcProzess(Sender: TObject; details: TZMProgressDetails); |
procedure TMainForm.EvProgress(Sender: TObject; details: TZMProgressDetails); |
begin |
CurrentFileLabel.Caption := details.ItemName; |
351,7 → 357,7 |
Application.ProcessMessages; |
end; |
procedure TMainForm.ArcExtFNChange(Sender: TObject; |
procedure TMainForm.EvExtFNChange(Sender: TObject; |
var FileName: TZMString; const BaseDir: TZMString; |
var IsChanged: Boolean); |
begin |
360,17 → 366,17 |
IsChanged := true; |
end; |
procedure TMainForm.ArcTick(Sender: TObject); |
procedure TMainForm.EvTick(Sender: TObject); |
begin |
Application.ProcessMessages; |
end; |
procedure TMainForm.ArcCheckTerminate(Sender: TObject; var abort: Boolean); |
procedure TMainForm.EvCheckTerminate(Sender: TObject; var abort: Boolean); |
begin |
abort := AbortUnzip; |
end; |
procedure TMainForm.ConfirmOverwrite(Sender: TObject; const ForFile: TZMString; |
procedure TMainForm.EvConfirmOverwrite(Sender: TObject; const ForFile: TZMString; |
IsOlder: Boolean; var DoOverwrite: Boolean; DirIndex: Integer); |
resourcestring |
Lng_Overwrite = 'Bestehende Datei "%s" überschreiben?'; |
397,27 → 403,31 |
Exit; |
end; |
if OverwriteDecision = odUndefined then |
if CachedOverwriteDecision = odUndefined then |
begin |
res := MessageDlg(Format(Lng_Overwrite, [ForFile]), mtConfirmation, [mbYes, mbNo, mbYesToAll, mbNoToAll], 0); |
DoOverwrite := (res = mrYes) or (res = mrYesToAll); |
if res = mrNoToAll then OverwriteDecision := odOverwriteNothing; |
if res = mrYesToAll then OverwriteDecision := odOverwriteAll; |
if res = mrNoToAll then CachedOverwriteDecision := odOverwriteNothing; |
if res = mrYesToAll then CachedOverwriteDecision := odOverwriteAll; |
end |
else |
begin |
DoOverwrite := OverwriteDecision = odOverwriteAll; |
DoOverwrite := CachedOverwriteDecision = odOverwriteAll; |
end; |
end |
else if zb.ConflictBehavior = cbAvoid then |
begin |
// Nothing to do |
end; |
end; |
procedure TMainForm.ArcPassword(Sender: TObject; IsZipAction: Boolean; |
procedure TMainForm.EvPasswordEvent(Sender: TObject; IsZipAction: Boolean; |
var NewPassword: String; const ForFile: TZMString; var RepeatCount: Longword; |
var Action: TMsgDlgBtn); |
var |
repc: integer; |
begin |
repc := MaxTries - RepeatCount + 1; |
repc := EvPasswordTries - RepeatCount + 1; |
// Eine Passworteingabe wurde abgebrochen. Frage nicht mehr nach. |
if StopAskingPassword then Exit; |
439,7 → 449,7 |
end; |
end; |
if PasswordDlg.ShowModal(StripBaseDir(ForFile), repc, MaxTries) = mrOk then |
if PasswordDlg.ShowModal(StripBaseDir(ForFile), repc, EvPasswordTries) = mrOk then |
begin |
NewPassword := PasswordDlg.Password.Text; |
if NewPassword = '' then NewPassword := ' '; // Neue Eingabe erzwingen. |
456,19 → 466,34 |
resourcestring |
Lng_AbortExtract = 'Extrahieren abbrechen?'; |
begin |
if not ExtractionInProcess then |
begin |
Close; |
Exit; |
end; |
if MessageDlg(Lng_AbortExtract, mtConfirmation, mbYesNoCancel, 0) = mrYes then |
begin |
CancelBtn.Enabled := false; |
uz.AbortDLL; |
AbortUnzip := true; |
// Close wird durch den Timer durchgeführt |
Exit; |
end; |
end; |
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
begin |
if not ExtractionInProcess then |
begin |
CanClose := true; |
Exit; |
end; |
if not AbortUnzip then |
begin |
CanClose := false; |
CancelBtn.Click; |
CanClose := false; |
end; |
end; |
565,7 → 590,6 |
end; |
end; |
finally |
AbortUnzip := true; // Damit es zu keiner Abfrage in OnCloseQuery kommt |
Close; |
end; |
end; |
577,7 → 601,7 |
result := Copy(s, Length(BaseDir)+1, Length(s)-Length(BaseDir)); |
end; |
procedure TMainForm.SkipEvent(Sender: TObject; const ForFile: TZMString; |
procedure TMainForm.EvSkipEvent(Sender: TObject; const ForFile: TZMString; |
SkipType: TZMSkipTypes; var ExtError: Integer); |
resourcestring |
Lng_PasswordWrong = 'Das Passwort wurde zu oft falsch eingegeben. Die Datei "%s" wird nicht extrahiert.'; |
/Extractor.res |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/Extractor.cfg |
---|
37,6 → 37,7 |
-O"c:\programme\borland\bds\4.0\lib\Debug;c:\programme\borland\bds\4.0\Lib\Debug\Indy10;zmstr1900102" |
-I"c:\programme\borland\bds\4.0\lib\Debug;c:\programme\borland\bds\4.0\Lib\Debug\Indy10;zmstr1900102" |
-R"c:\programme\borland\bds\4.0\lib\Debug;c:\programme\borland\bds\4.0\Lib\Debug\Indy10;zmstr1900102" |
-w-UNIT_PLATFORM |
-w-UNSAFE_TYPE |
-w-UNSAFE_CODE |
-w-UNSAFE_CAST |
/Icons/RarSFX Source/RarSFX.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Icons/RarSFX Source/RarSFX.psd |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Icons/RarSFX Source/Source.txt |
---|
0,0 → 1,2 |
by Elmer BeFuddled @ DA |
/Icons/Software used.txt |
---|
0,0 → 1,0 |
IcoFX |
/Icons/RarSFX.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/resource.h |
---|
0,0 → 1,2 |
#define VOS_WINDOWS32 0x4 |
#define VFT_APP 0x1 |
/MakeSFX.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/td.txt |
---|
1,3 → 1,9 |
sfxmaker ohne argumente: datei open dialog + folder selection dialog |
wenn sich das sfx auf cd oder diskette befindet, auf desktop oder ASK extrahieren |
Kompatibel mit Filenameencryption? |
- ein besseres win7 highres icon machen? |
- spanned sfx possible? |
test 2files, 1file, 1folder |
/ExtractorMain.dfm |
---|
67,6 → 67,7 |
Font.Style = [] |
ParentFont = False |
TabOrder = 1 |
TabStop = False |
OnClick = CancelBtnClick |
end |
object itemBar: TProgressBar |
78,7 → 79,6 |
TabOrder = 2 |
end |
object AutoTimer: TTimer |
Interval = 100 |
OnTimer = AutoTimerTimer |
Left = 320 |
Top = 8 |
/Functions.pas |
---|
3,8 → 3,8 |
interface |
uses |
Forms, Windows, Classes, SysUtils, ShellAPI, ShlObj, ActiveX, |
ZipMstr19, ZmUtils19; |
Forms, Windows, Classes, SysUtils, ShellAPI, |
ZipMstr19, ZmUtils19, ShlObj, ActiveX; |
type |
TLineBreak = (lbWindows, lbLinux, lbMac); |
17,9 → 17,6 |
function NormalizeLineBreaks(s: string; mode: TLineBreak): string; |
function ExtractFileNameWithoutExt(const fil: string): string; |
function SearchNextFreeName(s: string; wantDir: boolean): string; |
function AdvSelectDirectory(const Caption: string; const Root: WideString; |
var Directory: string; EditBox: Boolean = False; ShowFiles: Boolean = False; |
AllowCreateDirs: Boolean = True): Boolean; |
function GetSpecialFolderPath(const Folder: integer): string; |
function IsExtractable(AFilename: string): boolean; |
187,114 → 184,8 |
end; |
end; |
{ |
This code shows the SelectDirectory dialog with additional expansions: |
- an edit box, where the user can type the path name, |
- also files can appear in the list, |
- a button to create new directories. |
Dieser Code zeigt den SelectDirectory-Dialog mit zusätzlichen Erweiterungen: |
- eine Edit-Box, wo der Benutzer den Verzeichnisnamen eingeben kann, |
- auch Dateien können in der Liste angezeigt werden, |
- eine Schaltfläche zum Erstellen neuer Verzeichnisse. |
Ref: http://www.swissdelphicenter.ch/de/showcode.php?id=1802 |
} |
function AdvSelectDirectory(const Caption: string; const Root: WideString; |
var Directory: string; EditBox: Boolean = False; ShowFiles: Boolean = False; |
AllowCreateDirs: Boolean = True): Boolean; |
// callback function that is called when the dialog has been initialized |
//or a new directory has been selected |
// Callback-Funktion, die aufgerufen wird, wenn der Dialog initialisiert oder |
//ein neues Verzeichnis selektiert wurde |
function SelectDirCB(Wnd: HWND; uMsg: UINT; lParam, lpData: lParam): Integer; |
stdcall; |
// var |
// PathName: array[0..MAX_PATH] of Char; |
begin |
case uMsg of |
BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, Ord(True), Integer(lpData)); |
// include the following comment into your code if you want to react on the |
//event that is called when a new directory has been selected |
// binde den folgenden Kommentar in deinen Code ein, wenn du auf das Ereignis |
//reagieren willst, das aufgerufen wird, wenn ein neues Verzeichnis selektiert wurde |
{BFFM_SELCHANGED: |
begin |
SHGetPathFromIDList(PItemIDList(lParam), @PathName); |
// the directory "PathName" has been selected |
// das Verzeichnis "PathName" wurde selektiert |
end;} |
end; |
Result := 0; |
end; |
var |
WindowList: Pointer; |
BrowseInfo: TBrowseInfo; |
Buffer: PChar; |
RootItemIDList, ItemIDList: PItemIDList; |
ShellMalloc: IMalloc; |
IDesktopFolder: IShellFolder; |
Eaten, Flags: LongWord; |
const |
// necessary for some of the additional expansions |
// notwendig für einige der zusätzlichen Erweiterungen |
BIF_USENEWUI = $0040; |
BIF_NOCREATEDIRS = $0200; |
begin |
Result := False; |
if not DirectoryExists(Directory) then |
Directory := ''; |
FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); |
if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then |
begin |
Buffer := ShellMalloc.Alloc(MAX_PATH); |
try |
RootItemIDList := nil; |
if Root <> '' then |
begin |
SHGetDesktopFolder(IDesktopFolder); |
IDesktopFolder.ParseDisplayName(Application.Handle, nil, |
POleStr(Root), Eaten, RootItemIDList, Flags); |
end; |
OleInitialize(nil); |
with BrowseInfo do |
begin |
hwndOwner := Application.Handle; |
pidlRoot := RootItemIDList; |
pszDisplayName := Buffer; |
lpszTitle := PChar(Caption); |
// defines how the dialog will appear: |
// legt fest, wie der Dialog erscheint: |
ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI or |
BIF_EDITBOX * Ord(EditBox) or BIF_BROWSEINCLUDEFILES * Ord(ShowFiles) or |
BIF_NOCREATEDIRS * Ord(not AllowCreateDirs); |
lpfn := @SelectDirCB; |
if Directory <> '' then |
lParam := Integer(PChar(Directory)); |
end; |
WindowList := DisableTaskWindows(0); |
try |
ItemIDList := ShBrowseForFolder(BrowseInfo); |
finally |
EnableTaskWindows(WindowList); |
end; |
Result := ItemIDList <> nil; |
if Result then |
begin |
ShGetPathFromIDList(ItemIDList, Buffer); |
ShellMalloc.Free(ItemIDList); |
Directory := Buffer; |
end; |
finally |
ShellMalloc.Free(Buffer); |
end; |
end; |
end; |
// GetSpecialFolderPath |
// Ref: http://www.wer-weiss-was.de/theme159/article1058561.html |
function GetSpecialFolderPath(const Folder: integer): string; |
var |
PIDL: PItemIDList; |
325,7 → 216,7 |
if (q and zqbHasLocal) <> zqbHasLocal then result := false; |
if (q and zqbHasCentral) <> zqbHasCentral then result := false; |
if ((q and zqbHasEOC) <> zqbHasEOC) and |
((q and zqbHasEOC64) <> zqbHasEOC) then result := false; |
((q and zqbHasEOC64) <> zqbHasEOC64) then result := false; |
finally |
uz.Free; |
end; |
/Extractor.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/Extractor.dpr |
---|
14,7 → 14,8 |
ExtractorComment in 'ExtractorComment.pas' {CommentForm}, |
Functions in 'Functions.pas', |
SFXAutoRun in 'SFXAutoRun.pas', |
SFXBehavior in 'SFXBehavior.pas'; |
SFXBehavior in 'SFXBehavior.pas', |
BrowseFolder in 'BrowseFolder.pas'; |
{$R *.res} |
/Tools/RemoveSignature.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/Tools/Sources.txt |
---|
6,3 → 6,6 |
upx.exe |
http://upx.sourceforge.net/ |
rc.dll, rcdll.dll |
Windows Server 2003 SP1 SDK |
/Extractor.exe.manifest |
---|
0,0 → 1,45 |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> |
<security> |
<requestedPrivileges> |
<requestedExecutionLevel |
level="asInvoker" |
uiAccess="false" |
/> |
</requestedPrivileges> |
</security> |
</trustInfo> |
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> |
<application> |
<!-- This Id value indicates the application supports Windows Vista functionality --> |
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" /> |
<!-- This Id value indicates the application supports Windows 7 functionality --> |
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" /> |
</application> |
</compatibility> |
<assemblyIdentity |
version="1.0.0.0" |
processorArchitecture="X86" |
name="viathinksoft.autosfx.creator" |
type="win32" |
/> |
<description>ViaThinkSoft AutoSFX Maker</description> |
<dependency> |
<dependentAssembly> |
<assemblyIdentity |
type="win32" |
name="Microsoft.Windows.Common-Controls" |
version="6.0.0.0" |
publicKeyToken="6595b64144ccf1df" |
language="*" |
processorArchitecture="*" |
/> |
</dependentAssembly> |
</dependency> |
</assembly> |
/_PreBuild.bat |
---|
1,4 → 1,10 |
@echo off |
rem brcc32 is not compatible with Vista icons |
Tools\rc Extractor.rc |
Tools\rc MakeSFX.rc |
cd zmstr1900102\DLL\ResDLL-Maker\ |
call MakeResDll.bat |
pause. |
/Extractor.bdsproj |
---|
53,7 → 53,7 |
<Compiler Name="SymbolPlatform">True</Compiler> |
<Compiler Name="SymbolExperimental">True</Compiler> |
<Compiler Name="UnitLibrary">True</Compiler> |
<Compiler Name="UnitPlatform">True</Compiler> |
<Compiler Name="UnitPlatform">False</Compiler> |
<Compiler Name="UnitDeprecated">True</Compiler> |
<Compiler Name="UnitExperimental">True</Compiler> |
<Compiler Name="HResultCompat">True</Compiler> |
130,7 → 130,7 |
<Directories Name="UsePackages">False</Directories> |
</Directories> |
<Parameters> |
<Parameters Name="RunParams">single_file.zip</Parameters> |
<Parameters Name="RunParams">Tests\single_file.zip</Parameters> |
<Parameters Name="HostApplication"></Parameters> |
<Parameters Name="Launcher"></Parameters> |
<Parameters Name="UseLauncher">False</Parameters> |
172,8 → 172,7 |
<VersionInfoKeys Name="Comments"></VersionInfoKeys> |
<VersionInfoKeys Name="Webseite">www.viathinksoft.de</VersionInfoKeys> |
<VersionInfoKeys Name="Projektleiter">Daniel Marschall - www.daniel-marschall.de</VersionInfoKeys> |
</VersionInfoKeys> |
<Excluded_Packages> |
</VersionInfoKeys> <Excluded_Packages> |
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclib100.bpl">Borland InterBase Express Components</Excluded_Packages> |
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIntraweb_80_100.bpl">Intraweb 8.0 Design Package for Borland Development Studio 2006</Excluded_Packages> |
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyCore100.bpl">Indy 10 Core Design Time</Excluded_Packages> |
/Extractor.rc |
---|
0,0 → 1,30 |
#include "resource.h" |
MAINICON ICON "Icons\RarSFX.ico" |
1 24 "Extractor.exe.manifest" |
VS_VERSION_INFO VERSIONINFO |
FILEVERSION 1, 0, 0, 0 |
PRODUCTVERSION 1, 0, 0, 0 |
FILEOS VOS_WINDOWS32 // 0x4 |
FILETYPE VFT_APP // 0x1 |
BEGIN |
BLOCK "StringFileInfo" |
BEGIN |
BLOCK "040704E4" |
BEGIN |
VALUE "CompanyName", "ViaThinkSoft" |
VALUE "FileDescription", "ViaThinkSoft AutoSFX Extractor" |
VALUE "FileVersion", "1.0.0.0" |
VALUE "InternalName", "AutoSFX Extractor" |
VALUE "LegalCopyright", "© Copyright 2010 ViaThinkSoft" |
VALUE "LegalTrademarks", "Keine" |
VALUE "OriginalFilename", "Extractor.exe" |
VALUE "ProductName", "ViaThinkSoft AutoSFX" |
VALUE "ProductVersion", "1.0.0.0" |
VALUE "Webseite", "www.viathinksoft.de" |
VALUE "Projektleiter", "Daniel Marschall - www.daniel-marschall.de" |
END |
END |
END |