⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfx.cpp

📁 zip算法的源码
💻 CPP
字号:
#include <vcl\vcl.h>
#pragma hdrstop

#include "SFX.h"

//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TMakeSFX *MakeSFX;

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::ExecButClick( TObject *Sender ) {
	TZipBuilder *zb = MainForm->ZipBuilder1;

	if ( CmdLineCB->Checked )
		  zb->SFXOptions = zb->SFXOptions << SFXAskCmdLine;
	else zb->SFXOptions = zb->SFXOptions >> SFXAskCmdLine;
	if ( FileListCB->Checked )
		  zb->SFXOptions = zb->SFXOptions << SFXAskFiles;
	else zb->SFXOptions = zb->SFXOptions >> SFXAskFiles;
	if ( HideOverWriteCB->Checked )
		  zb->SFXOptions = zb->SFXOptions << SFXHideOverWriteBox;
	else zb->SFXOptions = zb->SFXOptions >> SFXHideOverWriteBox;
	if ( AutoRunCB->Checked )
		  zb->SFXOptions = zb->SFXOptions << SFXAutoRun;
	else zb->SFXOptions = zb->SFXOptions >> SFXAutoRun;
	if ( NoMsgShowCB->Checked )
		  zb->SFXOptions = zb->SFXOptions << SFXNoSuccessMsg;
	else zb->SFXOptions = zb->SFXOptions >> SFXNoSuccessMsg;

	if ( !DfltOverWriteGrp->ItemIndex )
		zb->SFXOverWriteMode = OvrConfirm;
	if ( DfltOverWriteGrp->ItemIndex == 1 )
		zb->SFXOverWriteMode = OvrAlways;
	if ( DfltOverWriteGrp->ItemIndex == 2 )
		zb->SFXOverWriteMode = OvrNever;

	zb->SFXCaption		 = CaptionEdit->Text;
	zb->SFXDefaultDir  = DirectoryEdit->Text;
	zb->SFXCommandLine = CommandEdit->Text;

	zb->SFXMessage     = "";
	if ( OkCancelRB->Checked )
		zb->SFXMessage = "\1";
	if ( YesNoRB->Checked )
		zb->SFXMessage = "\2";
	zb->SFXMessage += MsgEdit->Text;

	MainForm->DoIt = true;
	Close();
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::CancelButClick( TObject *Sender ) {
	MainForm->DoIt = false;
	Close();
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::BitBtn1Click( TObject *Sender ) {
	String SelDir = DirectoryEdit->Text;

	MainForm->AskDirDialog( MakeSFX->Handle, SelDir );
	DirectoryEdit->Text = SelDir;
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::FormShow( TObject *Sender ) {
	TZipBuilder *zb = MainForm->ZipBuilder1;

	CmdLineCB->Checked  = (zb->SFXOptions.Contains( SFXAskCmdLine ) ) ? true : false;
	FileListCB->Checked = (zb->SFXOptions.Contains( SFXAskFiles ) )   ? true : false;
	AutoRunCB->Checked  = (zb->SFXOptions.Contains( SFXAutoRun ) )    ? true : false;
	HideOverWriteCB->Checked = (zb->SFXOptions.Contains( SFXHideOverWriteBox ) ) ? true : false;
	NoMsgShowCB->Checked = (zb->SFXOptions.Contains( SFXNoSuccessMsg ) ) ? true : false;

	switch ( zb->SFXOverWriteMode ) {
		case OvrConfirm: DfltOverWriteGrp->ItemIndex = 0; break;
		case OvrAlways:  DfltOverWriteGrp->ItemIndex = 1; break;
		case OvrNever:   DfltOverWriteGrp->ItemIndex = 2;
	}

	CaptionEdit->Text   = zb->SFXCaption;
	DirectoryEdit->Text = zb->SFXDefaultDir;
	CommandEdit->Text   = zb->SFXCommandLine;

	if ( zb->SFXMessage.Length() > 0 && (zb->SFXMessage[1] == 0x1 || zb->SFXMessage[1] == 0x2) ) {
		if ( zb->SFXMessage[1] == 0x1 )
			OkCancelRB->Checked = true;
		else
			YesNoRB->Checked = true;
			MsgEdit->Text = zb->SFXMessage.SubString( 2, zb->SFXMessage.Length()- 1 );
	} else {
		MsgEdit->Text     = zb->SFXMessage;
		OkBttnRB->Checked = true;
	}

	if ( ImageList1->Count == 3 ) ImageList1->Delete( 2 );
	if ( IconEdit->Text == "" ) {
		if ( zb->SFXIcon->Empty ) {
			ImageList1->GetIcon( (int)AutoRunCB->Checked, Image1->Picture->Icon );
			zb->SFXIcon = Image1->Picture->Icon;
		} else {
			ImageList1->AddIcon( zb->SFXIcon );
			OrigIconRB->Checked = true;
		}
	}
	OrigIconRB->Enabled = (ImageList1->Count == 3) ? true : false;
}


//---------------------------------------------------------------------------
void __fastcall TMakeSFX::IconIndexUDClick( TObject *Sender, TUDBtnType Button ) {
	LoadCustomIcon( IconEdit->Text, StrToIntDef( IconIndexEdit->Text, 0) );
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::IconEditKeyPress( TObject *Sender, char &Key ) {
	if ( FileExists ( IconEdit->Text ) )
		LoadCustomIcon( IconEdit->Text, StrToIntDef( IconIndexEdit->Text, 0 ) );
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::DefIconRBClick( TObject *Sender ) {
	ImageList1->GetIcon( ( (TRadioButton *)Sender )->Tag, Image1->Picture->Icon );
	MainForm->ZipBuilder1->SFXIcon = Image1->Picture->Icon;
	IconEdit->Text          = "";
	IconIndexEdit->Text     = "0";
	IconIndexLabel->Enabled = false;
	IconIndexEdit->Enabled  = false;
	IconIndexUD->Enabled    = false;
	IconIndexEdit->Color    = clBtnFace;
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::BitBtn2Click( TObject *Sender ) {
	if ( IconDir == "" )
		MainForm->GetSpecialFolder( CSIDL_DESKTOPDIRECTORY, IconDir );
	OpenDialog1->InitialDir = IconDir;
	if ( OpenDialog1->Execute() ) {
		IconDir        = ExtractFilePath( OpenDialog1->FileName );
		IconEdit->Text = OpenDialog1->FileName;
		DefIconRB->Checked  = false;
		AutoIconRB->Checked = false;
		if ( UpperCase( ExtractFileExt( OpenDialog1->FileName ) ) != "ICO" ) {
			LoadCustomIcon( OpenDialog1->FileName, StrToIntDef( IconIndexEdit->Text, 0) );
			IconIndexLabel->Enabled = true;
			IconIndexEdit->Enabled  = true;
			IconIndexUD->Enabled    = true;
			IconIndexEdit->Color    = clWindow;
		} else {
			Image1->Picture->Icon->LoadFromFile( OpenDialog1->FileName );
			IconIndexEdit->Text     = "0";
			IconIndexLabel->Enabled = false;
			IconIndexEdit->Enabled  = false;
			IconIndexUD->Enabled    = false;
			IconIndexEdit->Color    = clBtnFace;
			MainForm->ZipBuilder1->SFXIcon = Image1->Picture->Icon;
		}
	}
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::LoadCustomIcon( String IconPath, int IconIndex ) {
	HICON IconHandle;

	Image1->Picture->Icon->ReleaseHandle();
	MainForm->ZipBuilder1->SFXIcon->ReleaseHandle();
	IconHandle = ExtractIcon( HInstance, IconPath.c_str(), IconIndex );
	if ( IconHandle && (int)IconHandle != 1 ) {
		Image1->Picture->Icon->Handle = IconHandle;
		MainForm->ZipBuilder1->SFXIcon->Handle = IconHandle;
	}
}

//---------------------------------------------------------------------------
void __fastcall TMakeSFX::AutoRunCBClick( TObject *Sender ) {
	if ( IconEdit->Text == "" ) {
		ImageList1->GetIcon( (int)AutoRunCB->Checked, Image1->Picture->Icon );
		MainForm->ZipBuilder1->SFXIcon = Image1->Picture->Icon;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -