Как из Delphi определить установлен ли Excel

Небольшая заметка-памятка. Перед работой с MS Excel желательно проверить установлен ли в системе MS Office.

Uses ActiveX;

if not IsOLEObjectInstalled('Excel.Application') then
  ShowMessage('MS Excel не установлен!')
else
  ShowMessage('MS Excel установлен!');

function IsOLEObjectInstalled(Name: String): boolean;
var
  ClassID: TCLSID;
begin
  Result := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID) = S_OK;
end;

Конвертируем flac в mp3 из командной строки

Решил раз и навсегда закрыть для себя вопрос конвертации *.flac музыки в mp3 формат. Используя знания из статей под тэгом cmd, а именно из статей Как организовать цикл в bat или cmd файле и Как узнать размер и дату файла из командной строки подробно распишу как организовать конвертирование файлов из формата FLAC и формат MP3, находящихся в указанной в параметре cmd-скрипта папке и подпапках.
На написание этой статьи меня подтолкнула статья на хабре, только я буду делать скрипт под Windows.
Для конвертирования нам понадобятся установленные flac и lame, lame качал с сайта rarewares.org
В конце статьи я выложу архив со скриптом и нужными программами.

@echo off
echo flac2mp3.cmd [-r] папка
echo [-r] - удалять исходные flac файлы (не обязательно)
echo папка - папка с flac файлами. Обрабатываются так же и вложенные папки. Папка с пробелами указывается в кавычках - "папка"

set r=%1
set workdir=%2
if not exist %workdir% set workdir=%r%
if exist %r% set workdir=%r%
if not exist %workdir% (
echo Каталог не существует
exit
)

if /i %r%==-r (
  set r=1 
) else (
set r=0
)

for /f "tokens=*" %%a in (' dir /s /b %workdir%\*.flac ') do (
echo %%~da %%~pa %%~na
echo "%%~da%%~pa"%%~na.wav
flac -d -f "%%~a"
call :pack "%%~a"
rem lame -b 320 "%%~da%%~pa%%~na.wav" "%%~da%%~pa%%~na.mp3"
del /q "%%~da%%~pa%%~na.wav"
if %r%==1 del /q "%%~a"
)
exit

:pack
for /f "tokens=* delims== " %%i in ('metaflac.exe --show-tag=ARTIST %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=TITLE %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=ALBUM %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=GENRE %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=TRACKNUMBER %1 ') do set %%i
for /f "tokens=* " %%i in ('metaflac.exe --show-tag=DATE %1 ') do set %%i
echo lame -m j -q 0 -V 0 -s 44.1 --tt "%TITLE%" --tn "%TRACKNUMBER%" --ta "%ARTIST%" --tl "%ALBUM%" --ty "%DATE%" --tg "%GENRE%" "%~d1%~p1%~n1.wav" "%~d1%~p1%~n1.mp3"
lame -m j -q 0 -V 0 -s 44.1 --tt "%TITLE%" --tn "%TRACKNUMBER%" --ta "%ARTIST%" --tl "%ALBUM%" --ty "%DATE%" --tg "%GENRE%" "%~d1%~p1%~n1.wav" "%~d1%~p1%~n1.mp3"
exit /b 0


Delphi. Вызов процедуры по строке с её названием

Иногда бывает нужно вызвать процедуру, название которой не известно в момент выполнения программа. Ну, бывает такое 🙂 В скриптовых языках программирования с этим нет проблем, а вот в компилируемых языках, таких как Pascal/Delphi с этим не так просто.
Небольшая заметка как это реализовать на Delphi

Для начала в типах объявляем тип:

type
  myproc = procedure;stdcall;

Далее в implementation пишем пример процедуры, название которой будет неизвестно в момент выполнения.

procedure Proc1;
begin
  ShowMessage('Hello From Proc1');
end;

А вот код вызова для кнопки Button1 на форме Form1:

procedure TForm1.Button1Click(Sender: TObject);
var
  p:myproc;
  h:HWND;
begin
  h:=GetModuleHandle(nil);
  p:=GetProcAddress(h,'Proc1');
  ShowMessage(IntToStr(h));
  p; // вот он сам вызов процедуры
  p:=nil;
end;

Понятно, что вместо ‘Proc1’ может быть строковая переменная.
В конце модуля экспортируем процедуру:

exports Proc1;

Пожалуй вот и всё.

Как переименовать название поля в таблице MS SQL

Как переименовать поле (колонку, столбец) в таблице базы MS SQL уже после создания таблицы?
Это можно сделать независимо от того содержит ли столбец данные или нет. Для этого используем системную хранимую процедуру sp_rename.

EXEC sp_rename 'tableName.[oldColumnName]', 'newColumnName', 'COLUMN'

Пример:

EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'

Эта команда переименует существующий столбец ‘contact title’ таблицы customers в ‘title’

Подробности надо смотреть в Books Online (BOL)

Пропала языковая панель в Windows

Давно не было новых записей. Так уж получилось 🙂
Иногда бывает в Windows ситуация, когда исчезает русский язык из системы. Я заметил, что это как-то связано с IM-клиентами, у меня это было в QIP. Не понятно в какой момент не получается сменить язык на русский. Например, в XP у меня просто исчезал из системы русский язык, в Windows 7 исчезала сама языковая панель (не смотря на то, что в настройках она была закреплена!). Нашел в интернете инструкцию по устранению этой проблемы. Применил и пока наблюдаю как оно поможет. Перепечатаю себе на сайт чтобы не забыть.
Читать далее Пропала языковая панель в Windows

Вирус заблокировал компьютер

Если вирус заблокировал компьютер с операционной системой MS Windows, первым делом надо со второго компьютера 🙂 или с компьютера друга поискать метод лечения на сайтах Касперского тут, тут, а так же тут, полезно на такие случаи иметь диск Kaspersky Rescue Disk и Kaspersky Virus Removal Tool 2011; еще обязательно надо поискать визуально картинку блокировщика на сайте Dr.Web тут.

Вирус действует путем подмены стандартной Shell или Userinit на свою в реестре по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon. Для этого нужно любым способом добраться до реестра своей операционной системы и установить параметрам Shell и Userinit значения explorer.exe и C:\WINDOWS\system32\userinit.exe соответственно. Вручную исправить реестр недоступной системы можно с помощью всевозможных дисков-реаниматоров, коих полно в сети.

Так же Kaspersky Rescue Disk — очень хорошее средство. Если после удаления им вируса, Windows продолжает встречать окном с сообщением об отправке СМС, значит скорее всего вирус подменил служебный файл userinit.exe. Именно такая ситуация была у меня. Помогло выкачивание этого файла из интернета и замена в нерабочей системе. Искать нужно файл из нужной вам версии Windows, а так же с нужным сервис-паком. В моем случае меня спасла статья И снова вирус просит пополнить счет, где в конце выложен файл для Windows XP SP3.

Меняем шлюз по умолчанию из командной строки

Бывают ситуации, когда для автоматизации сетевых соединений необходимо автоматически менять параметры соединений. В этой короткой заметке хочу отобразить как быстро и просто можно из командной строки Windows поменять шлюз по умолчанию в сетевом соединении.

Для этого есть команда netsh. Читать далее Меняем шлюз по умолчанию из командной строки