вторник, 1 марта 2011 г.

Delphi MySQL проблемы с русской кодировкой (Кириллицей)

   Если возникают проблемы с кодировкой при обращении к MYSQL серверу необходимо выполнить следующие действия:

  1. Проверить стоит или нет правильная кодировка в таблицах MySQL Server (она должна быть установлена cp1251(укр.) или cp1252(рус.))  
  2. После подключения к MySQL Server необходимо выполнить запрос:

если установлена кодировка cp1251, тогда:
SET NAMES ''cp1251''
иначе, если нужна кодировка cp1252
SET NAMES ''cp1252''


Конфликт uTorrent 2 и Kaspersky Internet Security 2011

   После выхода статьи Конфликт uTorrent 2.0 и Kaspersky Internet Security (KIS) в которой я описал настройку KIS 8 (2009) пришло не мало запросов о настройке KIS 2011. Проблемы решаются те же:
  • При добавлении новой закачки - компьютер начинал жутко тормозить.
   Перейдем сразу к настройке. В процессе настройки использовал следующие средства: uTorrent 2 и KIS 11 (KIS 2011)):
  • Открываем торрент клиент. В главном меню открываем "Настройки ->Конфигурация" или(Ctrl+P).
  • В левой части выбираем пункт "Connection"(Соединения) и запоминаем порт, под которым работает торрент. В меня порт: 36406. (Рис.1.)
  • Рис.1.
  • Запускаем KIS. В правой верхней части экрана нажимаем кнопку "Настройка". (Рис.2.). 
  • Рис.2.
  • Откроется окно настройки (Рис.3.). В котором будет выбран пункт "Сетевой экран". Далее нажимаем кнопку "Настройка" в области Сетевой экран. (Рис.3.)
    • Рис.3.
  • Открываем закладку "Пакетные правила". И нажимаем кнопку "Добавить". (Рис.4.)
    • Рис.4.
  • Выбираем действие - Разрешить. Вводим название сервиса. Ставим галочку возле Протокола и выбираем TCP. Выбираем направление: Входящее/Исходящее.  Вводим локальный порт - порт по которому работает торрент клиент (у меня 36406). И указываем Адрес - любой адрес. (Рис.5.)
  • Рис.5.
  • Делаем тоже и для UDP протокола. Рис. 6.
  • Рис. 6.
  • Теперь нужно переместить два новых пункта в начало. Для этого выбираем один из них и перемещаем с помощью кнопки "Вверх". Рис. 7
    • Рис. 7
  • В результате наши два ресурса будут в начале списка. Нажимаем "ОК" для сохранения изменений. И еще раз "ОК" в окне настроек.

понедельник, 21 февраля 2011 г.

Изменение расположения файлов базы данных MySQL

   Для того чтобы изменить расположение файлов базы данных (БД) MySQL необходимо выполнить следующие шаги (В описании используется Windows Vista и MySQL Server v5.1.47 community):
  1. Остановим службу MySQL (данная служба может иметь еще № версии сервера, например MySQL 5). Для этого можно просмотреть ранее описанную статью, как остановить службу в Windows.
  2. Создадим папку где будут сохраняться базы данных. К примеру d:\ProgramData\MySQL\MySQL Server 5.1\data\
  3. Ищем файл my.ini он обычно может размещаться в папке куда установлен MySQL Server (у меня c:\Program Files\MySQL\MySQL Server 5.1\) или в папке Windows. Открываем его для редактирования любым редактором. (Заранее делая резервную копию данного файла) 
  4. Ищем сукцию [mysqld], а в ней параметр datadir. Данный параметр указывает на размещение папки из базами данных. У меня этот параметр содержит следующее значение: datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/". Изменяем его на: D:/ProgramData/MySQL/MySQL Server 5.1/data/ (следим за правильным указанием разделителей между папками, они в обратную сторону) и сохраняем изменения.
  5.  Копируем старые настройки и базы данных, которые были указаны в файле my.ini (C:\ProgramData\MySQL/MySQL Server 5.1\Data\ в новый каталог, который мы создали в пункте №2 (d:\ProgramData\MySQL\MySQL Server 5.1\data\)
  6. Запускаем службу MySQL. (Для этого можно просмотреть ранее описанную статью, как запустить службу в Windows
  7. Проверяем подключение к MySQL Server с помощью консоли или сторонних утилит. 

воскресенье, 20 февраля 2011 г.

Перезапуск, остановка, возобновление работы служб Windows

    Зачастую бывает необходимо перезапустить или остановить службу Windows для выполнения неких операций, которые блокирует служба. И так приступим. Для описания использовались: Windows XP, Vista, Seven
  1. Открыть Администрирование в  Панели управления. Для этого нажимаем Пуск-> Панель управления. Панель управления может быть в двух режимах просмотра, классическом и кратком. На Рис. 1. представлен краткий вид панели управления.

 
 Рис. 1 -Windows XP
 
Рис. 1 - WindowsVista, 7 
 а. Для Windows XP нужно выбрать пункт "Производительность и обслуживание" Рис.2а (Для Windows Vista, 7 нужно выбрать пункт "Система и безопасность" Рис. 2б).
 
 Рис. 2а
 
Рис. 2б 
б. Выбираем пункт "Администрирование". Рис. 3.

Рис. 3 Windows XP
 
Рис. 3 Windows Vista,7 
Также панель управления может быть представлена в классическом виде, тогда она будет выглядеть примерно так как показано на Рис.4. Выбираем "Администрирование"
Рис.4.Windows XP
 
 Рис.4.Windows Vista, 7 
  1. В Администрировании нужно выбрать пункт "Службы". Рис.5.
Рис.5. Windows XP
 
Рис.5.Windows Vista, 7  
 В результате откроется окно с перечнем служб. (Рис.6.)
Рис.6 Windows XP
 
Рис.6.Windows Vista, 7   
  1. Находим нужную службу в списке представленных служб. И тут у нас есть два пути. Первый - можно кликнуть правой кнопкой мыши на нужную службу, в результате чего появится контекстное меню с помощью которого можно выполнить некие действия с данной службой Например: запустить, остановить, приостановить, перезапустить... Если служба запущена - тогда пункты которые отвечают за запуск будут недоступны. Если службы остановлена - пункты которые отвечают за остановку будет недоступны. Второй путь - нажать правой кнопкой мыши на службе и выбрать пункт меню "Свойства" (или два раза кликнуть левой кнопкой мыши на нужную службу). В результате чего откроется окно "Свойства" службы. (Рис.7) 
 Рис. 7 Windows XP
 
Рис.7.Windows Vista, 7    
   В данном окне можно конкретнее настроить службу, к примеру выбрать тип запуска. Если выбрать тип "Авто"  - службы будет автоматически загружена при старте Windows. При выборе типа запуска "Вручную" - службу нужно будет запускать вручную. И режим "Отключено" - служба будет отключена.
Рис.8 Windows XP
 
Рис.8.Windows Vista, 7   
   Для управления текущей службой также есть клавиши быстрой установки состояния службы. А именно: Пуск (Запустить), Стоп(Остановить), Пауза, Продолжить.
   С помощью данного окна можно настроить и управлять службами которые запущены или будут запускаться  на компьютере при старте системы.

пятница, 18 февраля 2011 г.

Delphi Диалоговое окно "выбор директории"

   Возникла задача, в которой нужно вызвать диалоговое окно выбора папки. Если нужно сделать выбор файла можно просто разместить на форме не визуальный компонент OpenDialog написать код взаимодействия и все готово. Для диалогового окна выбора папки структура немного другая.
Сперва нужно добавить модуль FileCtrl, если конечно его еще нет в списке подключенных модулей. В данном модуле есть две функции SelectDirectory: 
function SelectDirectory ( const Caption : string; const StartDir : WideString; out ChosenDir : string ) : Boolean;
где:  Caption     - Текст заголовка окна;
        StartDir    - Рабочая директория, в которую мы переместимся при открытии диалогового окна выбора папки.
       ChosenDir - Выбранный каталог
Если пользователь, в диалоговом окне выбора  папки, нажал "ОК" - результат вернется True и выбранный каталог будет записан в переменную ChosenDir.
function SelectDirectory ( var CurrDir : string; DialogOptions : TSelectDirOpts ; HelpContext : Longint ) : Boolean;
где: CurrDir - Базовая рабочая директория, в которую мы переместимся при открытии диалогового окна выбора папки.
       DialogOptions - настройка диалогового окна выбора папки. Может принимать следующие параметры: sdAllowCreate, sdPerformCreate, sdPrompt. 

              sdAllowCreate - Диалоговое окно выбора папки будет содержать поле редактирования имени каталога, в которое можно вводить имя несуществующего каталога.Указанное имя будет записано в переменную Directory, но при этом сам каталог создан не будет.
              sdPerformCreate  - Параметр используется только совместно с величиной sdAllowCreate. Когда пользователь вводит несуществующий каталог, функция создает его.
              sdPrompt - Параметр используется только совместно с величиной sdAllowCreate. Если пользователь введет имя не существующего каталога, то будет выведено окно на подтверждение создания каталога. Если параметр Options содержит значение sdPerformCreate и пользователь нажимает кнопку OK в диалоговом окне выбора каталога, то указанный каталог создается. В противном случае, каталог создан не будет.
       HelpContext - указывает контекст системы помощи, который будет активирован при нажатии кнопки F1

Примеры использователя:
var SelectedDirName:string;
begin
...
   SelectDirectory('Выберите каталог','V:\',SelectedDirName);
....
end;
   Результат представлен на Рис.1. (В системе Windows Vista диалоговое окно выбора каталога будет выглядит следующим образом)
 Рис.1. 

понедельник, 14 февраля 2011 г.

Полное удаление MySQL (Проблемы при повторной установке MySQL)

   При установке MySQL - оказалось что когда то он уже устанавливался и при повторной установке спрашивает старый пароль, служба не хочет запускаться...
   Оказывается после удаления MySQL остаются файлы баз данных и еще некоторые файлы настройки. Поскольку я использую Windows XP - файлы баз данных и настроек размещены по умолчанию:
[Диск:]\Documet and Settings\All Users\Application Data\MySQL\MySQl Server [version]\Data
  После перемещения (удаления) папки [Диск:]\Documet and Settings\All Users\Application Data\MySQL\ - все установилось без проблем. Таким образом я устранил проблему при установке MySQL.

воскресенье, 13 февраля 2011 г.

Введение в Delphi XE Starter Edition

   Небольшой видеоролик, в котором Michael Rozlog рассказывает о некоторых особенностях Delphi XE Starter Edition

понедельник, 31 января 2011 г.

Delphi компонет StringGrid, событие onSelectCell

   Сегодня возник вопрос: Как узнать текущую выбранную строку в списке StringGrid. Это делается с помощью следующего кода:
StringGrid1.ARow 
   Теперь усложним задачу, у нас есть список StringGrid, в зависимости от выбранного элемента в StringGrid и соответственно значения в ячейке устанавливается соответствующий переключатель в RadioGroup. (Рис.1)
Рис.1 

 Решение: В компоненте StringGrid для события onSelectCell есть процедура обработки и установки переключателя в RadioGroup. Проблема в том что если кликать мышкой в списке StringGrid - все отлично работает и обрабатывается корректно. Если же перемещаться по списку с помощью курсора - событие onSelectCell наступает раньше, чем устанавливается значение в StringGrid1.ARow.
   Решение проблемы нашел на одном из зарубежных форумов. Для заметки привожу в своем блоге:
Устанавливаем свойство onRowSelect в false. Если вам нужно чтобы строка была выделенной - пишем на событие onDrawCell следующий код :
if gdFixed in State then Exit;
  if ARow=TStringGrid(Sender).Row then
  begin
    TStringGrid(Sender).canvas.Brush.color:=clBlue;
    TStringGrid(Sender).canvas.Font.Color:=clWhite;
    TStringGrid(Sender).canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2,TStringGrid(Sender).Cells[ACol,ARow])
  end
  else
  begin
    TStringGrid(Sender).canvas.Brush.color:=TStringGrid(Sender).Color;
    TStringGrid(Sender).canvas.TextRect(Rect,Rect.Left +2,Rect.Top+2,TStringGrid(Sender).Cells[ACol,ARow])
end;
   Если нужно - можно изменить цвет отображения выделенной строки.
Теперь нам нужно дописать для компонента StringGrid на событие onSelectCell следующий код:
var
   SaveEvent:TSelectCellEvent;
begin
if ARow<>TStringGrid(Sender).Row then
begin
   SaveEvent:=TStringGrid(Sender).OnSelectCell;
   TStringGrid(Sender).OnSelectCell:=Nil;
   TStringGrid(Sender).Row:=ARow;
   CanSelect:=False;
   TStringGrid(Sender).Refresh;
   TStringGrid(Sender).OnSelectCell:=SaveEvent;
end;  

воскресенье, 30 января 2011 г.

Вирус Вконтакте Trojan-Downloader.HTML.Agent.si

   Проблема: Сегодня зашел Вконтакт и антивирус Касперского объявил мне что на сайте вирус, а именно:
http://vkontakte.ru/js/player.js?54 Opera Internet Browser Обнаружено: Trojan-Downloader.HTML.Agent.si.
Обнаружено: Trojan-Downloader.HTML.Agent.si Internet Explorer http://vkontakte.ru/js/player.js?53 
Анализируя описание - вирус скачивает всякую ерунду или другие вирусы с интернета.
Решение:
   На форумах пишут разное, от очистки кэша браузера до очистки папки Temp.
Но я скажу одно если при входе на сайт выскакивает сообщение что найден вирус - это значит что вирус на сервере, и если антивирус опознал его - значит он его блокировал. В данном случае решать трудно, поскольку антивирус начал выдавать сообщение только после обновления (ясно что добавлен какой то метод обработки вирусных скриптов или новые сигнатуры), старые версии ничего не показывали. Данное оповещение было при прослушивании музыки, с одной стороны все верно, я нажимаю кнопку чтобы прослушать музыка - песня загружается в кэш браузера, лишь только потом проигрывается в плеере. С другой стороны неясно что же они такого изменили в плеере или в обновлениях антивируса что антивирус начал распознавать код плеера как вирусный. Может все таки на сервер проник каким то боком вирус, в следствии чего мы и получили оповещение о вирусе, а может это просто ложная тревога. Так что остается только ждать, все решиться само собой, либо обновится антивирус и в обновление добавят исправления, либо обновят плеер в контакте.

вторник, 25 января 2011 г.

Delphi: Изменение цвета шрифта в StatusBar

   Сегодня возник вопрос по изменению цвета шрифта в StatusBar. Для решения данной проблемы нужно выполнить следующею последовательность действий:
  1. Переместить на форму StatusBar с закладки Win32
  2. Создать необходимое количество панелей (Кликаем правой кнопкой мыши на StatusBar-е и выбираем пункт меню Panels Editor...(Рис.1), после чего появится окно с помощью которого есть возможность управлять панелями, которые размещены на StatusBar (Рис.2)) 
Рис.1 

Рис. 2  
  1. Изменяем текст на панелях (Для этого выбираем в Panel Editor...(Рис. 2) из списка нужную панельку и изменяем свойство Text на нужный. Если нужно изменить цвет текста для панели - нужно установить свойство Style - psOwnerDraw (Рис. 3). Для примера я взял вторую панель с текстом  - "текст2") 
Рис. 3 
  1.  Переходим на StatusBar и в Object Inspector  создадим для него событие onDrawPanel.(Для создания события нужно кликнуть 2 раза напротив поля onDrawPanel)

Рис. 4
  1. Пишем код для события onDrawPanel:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;const Rect: TRect);
begin
  if Panel = StatusBar.Panels[1] then
  begin
    StatusBar.Canvas.Font.Color := clRed;
    StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, 'тест 2')
  end
end;

Разберем код: Нумерация панелей начинается с "0", поскольку мы работаем с второй панелью - мы указываем StatusBar.Panels[1]. Если у нас нужная панель - изменяем цвет на красный (StatusBar.Canvas.Font.Color := clRed;) и выводим текст (StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, 'тест 2'))
 В результате мы получим StatusBar, в котором текст написан на второй панели окрашен в красный цвет. Результат можно просмотреть на Рис.5
  Рис.5