Все записи автора Alex

Как вводить только цифры в UITextField и ограничить длину строки ввода

Чтобы в UITextField вводить только цифры и не позволить вводить длинные строки, делаем следующее:

Объявим константы

#define NUMBERS_ONLY @"1234567890"
#define CHARACTER_LIMIT 4

И пишем в делегате UITexField

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return (([string isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT));
}

Как из 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 файлами. Обрабатываются так же и вложенные папки. Папка с пробелами указывается в кавычках - &quot;папка&quot;

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 &quot;tokens=*&quot; %%a in (' dir /s /b %workdir%\*.flac ') do (
echo %%~da %%~pa %%~na
echo &quot;%%~da%%~pa&quot;%%~na.wav
flac -d -f &quot;%%~a&quot;
call :pack &quot;%%~a&quot;
rem lame -b 320 &quot;%%~da%%~pa%%~na.wav&quot; &quot;%%~da%%~pa%%~na.mp3&quot;
del /q &quot;%%~da%%~pa%%~na.wav&quot;
if %r%==1 del /q &quot;%%~a&quot;
)
exit

:pack
for /f &quot;tokens=* delims== &quot; %%i in ('metaflac.exe --show-tag=ARTIST %1 ') do set %%i
for /f &quot;tokens=* &quot; %%i in ('metaflac.exe --show-tag=TITLE %1 ') do set %%i
for /f &quot;tokens=* &quot; %%i in ('metaflac.exe --show-tag=ALBUM %1 ') do set %%i
for /f &quot;tokens=* &quot; %%i in ('metaflac.exe --show-tag=GENRE %1 ') do set %%i
for /f &quot;tokens=* &quot; %%i in ('metaflac.exe --show-tag=TRACKNUMBER %1 ') do set %%i
for /f &quot;tokens=* &quot; %%i in ('metaflac.exe --show-tag=DATE %1 ') do set %%i
echo lame -m j -q 0 -V 0 -s 44.1 --tt &quot;%TITLE%&quot; --tn &quot;%TRACKNUMBER%&quot; --ta &quot;%ARTIST%&quot; --tl &quot;%ALBUM%&quot; --ty &quot;%DATE%&quot; --tg &quot;%GENRE%&quot; &quot;%~d1%~p1%~n1.wav&quot; &quot;%~d1%~p1%~n1.mp3&quot;
lame -m j -q 0 -V 0 -s 44.1 --tt &quot;%TITLE%&quot; --tn &quot;%TRACKNUMBER%&quot; --ta &quot;%ARTIST%&quot; --tl &quot;%ALBUM%&quot; --ty &quot;%DATE%&quot; --tg &quot;%GENRE%&quot; &quot;%~d1%~p1%~n1.wav&quot; &quot;%~d1%~p1%~n1.mp3&quot;
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.