Orion9

|
Posted: Wed Jul 29, 2026 12:35 Post subject: |
|
|
Планирую добавить к меню открытия панелей пункт для открытия и загрузки иконок из .dll и .icl файлов. Пока сделал только диалог, но он довольно универсальный, может кому-нибудь пригодится.
 Hidden text | Code: | Func OpenFileDialog(FileName, Filter)
Local sFile
# буфер для имени файла
Local file = Buffer(1024)
file.Zero()
file.SetStr(FileName)
# буфер для фильтра расширений
Local mask = Buffer(StrLen(Filter) * 2)
mask.Zero()
mask.SetStr(Filter)
# буфер для структуры OPENFILENAMEW
Local ofn = Buffer(auX64 ? 152 : 76)
ofn.Zero()
ofn.SetNum(0, "UInt", ofn.size) # lStructSize
ofn.SetNum(auX64 ? 8 : 4, "Ptr", AUTORUN_TCHANDLE) # hwndOwner
ofn.SetNum(auX64 ? 24 : 12, "Ptr", mask.ptr) # lpstrFilter
ofn.SetNum(auX64 ? 48 : 28, "Ptr", file.ptr) # lpstrFile
ofn.SetNum(auX64 ? 56 : 32, "Dword", file.size) # nMaxFile
ofn.SetNum(auX64 ? 96 : 52, "Dword", 0x00000802) # 0x00000002 | 0x00000800
If DllCall("comdlg32\GetOpenFileNameW", "Ptr", ofn.ptr) Then
sFile = file.GetStr()
EndIf
Free(file, mask, ofn)
Return sFile
EndFunc |
Пример использования
 Hidden text | Code: | Func HBarOpenIcons()
Local flt = "Icons (*.dll *.icl *.exe)" & Chr(0) & "*.dll;*.icl;*.exe" & Chr(0) & Chr(0)
Local file = OpenFileDialog(COMMANDER_PATH & "\WCMICONS.DLL", flt)
If file <> "" Then
nIcons = DllCall("shell32\ExtractIconExW", "wstr", file, "int", -1, "ptr", 0, "ptr", 0, "uint", 0, "uint")
MsgBox(file & auCRLF & auCRLF & "Иконок: " & nIcons & " шт.")
EndIf
EndFunc
Func HBarOpenBarMenu()
Local sText, sMain
Local sBars = FileFind(COMMANDER_PATH, "*.bar", -1, 1)
# ключ wincmd.ini
IniRead /R sMain %COMMANDER_INI% "Buttonbar" "Buttonbar" "%COMMANDER_PATH%\DEFAULT.BAR"
# раскрытие окружения
sMain = Set(sMain)
# путь в ключе не указан
If FileGetDir(sMain) = "" Then sMain = COMMANDER_PATH & "\" & sMain
# пункты меню
gHBarBars.Count = 0
gHBarBars.Text = sMain & auCRLF & sBars
For i = 0 To gHBarBars.Count - 1
If i = 1 Then sText &= 'MENUITEM SEPARATOR' & auCRLF
sText &= 'MENUITEM "' & gHBarBars[i] & '", em_aucmd -1 HBarOpenBar ' & i & auCRLF
Next
sText = 'MENUITEM "Открыть...", em_aucmd -1 HBarOpenIcons' & auCRLF & sText
Return sText
EndFunc |
|
|