Files
AC_Pro/VSTPathFormUnit.cpp
2026-06-13 00:05:19 +08:00

129 lines
3.5 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "VSTPathFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "GeneralDialogPanel"
#pragma link "LineEdit"
#pragma link "TextButton"
#pragma link "CKBox"
#pragma resource "*.dfm"
TVSTPathForm *VSTPathForm;
#include <shlobj.h>
#include <System.IOUtils.hpp>
#include "GlobalUnit.h"
TCHAR u_lpSelectDir[MAX_PATH]; //当前初始化目录路径
//---------------------------------------------------------------------------
int CALLBACK BrowserCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch( uMsg )
{
case BFFM_INITIALIZED:
::SendMessage(hWnd, BFFM_SETSELECTION, 1, (long)(u_lpSelectDir) );
break;
default:
break;
}
return 0;
}
//---------------------------------------------------------------------------
__fastcall TVSTPathForm::TVSTPathForm(TComponent* Owner, bool bShowCheck)
: TForm(Owner)
{
m_ckHide->Visible = bShowCheck;
m_lblMessage->Visible = !bShowCheck;
}
//---------------------------------------------------------------------------
void __fastcall TVSTPathForm::FormCreate(TObject *Sender)
{
m_BKGPanel->Font->Size = g_szFont9;
m_BtnCancel->FontSize = g_szFont9;
m_BtnSure->FontSize = g_szFont9;
m_btnVSTPath->FontSize = g_szFont9;
m_btnVSTiPath->FontSize = g_szFont9;
m_editVST->SetTextFont(g_strTxtFontName, g_szFont9);
m_editVSTi->SetTextFont(g_strTxtFontName, g_szFont9);
m_ckHide->Font->Name = g_strTxtFontName;
m_ckHide->Font->Size = g_szFont9;
String strVSTPath, strVSTiPath;
if( g_strVSTPath.empty() ){
strVSTPath = g_strExecutePath.c_str();
strVSTPath += VST_DIRNAME;
}
else
strVSTPath = g_strVSTPath.c_str();
if( g_strVSTiPath.empty() ){
strVSTiPath = g_strExecutePath.c_str();
strVSTiPath += VST_DIRNAME;
}
else
strVSTiPath = g_strVSTiPath.c_str();
m_editVST->Text = strVSTPath;
m_editVSTi->Text = strVSTiPath;
SetTransparent( this );
}
//---------------------------------------------------------------------------
void __fastcall TVSTPathForm::VSTPathClick(TObject *Sender)
{
TTextButton* pBtn = (TTextButton*)Sender;
TLineEdit* pEdit = pBtn==m_btnVSTPath ? m_editVST : m_editVSTi;
wcscpy( u_lpSelectDir, (LPTSTR)(pBtn->Text.c_str()) );
if( CrnBrowseDir(Handle, (LPTSTR)( str2wstr("请选择文件路径").c_str() ), u_lpSelectDir ) ) {
pEdit->Text = wstr2str(u_lpSelectDir).c_str();
}
}
//---------------------------------------------------------------------------
void __fastcall TVSTPathForm::SureClick(TObject *Sender)
{
wcscpy( m_lpSelectVSTDir, (LPTSTR)(m_editVST->Text.c_str()) );
wcscpy( m_lpSelectVSTiDir, (LPTSTR)(m_editVSTi->Text.c_str()) );
}
//---------------------------------------------------------------------------
bool TVSTPathForm::CrnBrowseDir(HWND hOwner, LPTSTR lpTitle, LPTSTR lpSelectDir)
{
bool bReslut = false;
LPMALLOC pShellMalloc;
if (SHGetMalloc(&pShellMalloc) == NO_ERROR){
BROWSEINFO bi;
WCHAR wszDisplayName[MAX_PATH];
memset(&bi, 0x00, sizeof(bi));
bi.hwndOwner = hOwner;
bi.pidlRoot = 0;
bi.pszDisplayName = wszDisplayName;
bi.lpszTitle = lpTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = BrowserCallbackProc;
bi.lParam=LPARAM(lpSelectDir);
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl){
bReslut= SHGetPathFromIDList(pidl, lpSelectDir);
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
return bReslut;
}
//---------------------------------------------------------------------------