Ник Курков

January 3, 2010

Праздничный экспириенс. Delphi.

Filed under: Delphi — Николай Курков @ 22:50

Приехал с дачи – отметили просто замечательно. Теперь, пока есть свободное время, можно заняться саморазвитием. Начнем с Delphi.

  1. Итак, в Delphi 2010 появился нормальный встроенный форматтер. Читаем о настройках, юзаем хоткеем “CTRL-D”. По мне, так очень удобная штука (хотя, как подсказывают товарищи, не лишена багов). Не помешает еще прочитать стандарт стилевого оформления исходного кода в Delphi.
  2. В Delphi 2007/2009/2010 появился нормальный Юникод. В результате часть старонаписанного кода работать правильно категорически перестала. О причинах и следствиях (как исправить) читаем тут.
  3. Почитал, что пишут разработчики Windows 7 (в русском переводе). Весьма интересно.
  4. Изучаю Doc-o-matic – инструмент для создания документации по исходному коду.
  5. Авторизация на сайте и работа с Капчей, Ribbon Controls 1 и 2, XML-RPC в Delphi, многопоточность 1 и 2, Как защитить свою программу (законом)Регулярные выражения на примере RegExp.
  6. Интересен топик лучших статей по Delphi за год на Хабре.

December 24, 2009

ESC и Enter в модальных формах

Filed under: Delphi — Николай Курков @ 15:59

Для каждой модальной формы должны работать кнопки ESC и Enter. По ESC – выходить без сохранения. По Enter – выходить с сохранением.

Как это проще (и правильнее всего) сделать в Delphi? Нужно для кнопки “Ок” в интерфейсе установить свойство Default в true, а у кнопки “Отмена” установить свойство Cancel в true.

That’s all.

August 28, 2009

Семинар по Delphi 2010 в Москве!

Filed under: Delphi — Tags: , , , — Николай Курков @ 20:10

Сегодня на почту упало приглашение на семинар. Регистрация бесплатная. Пройдет в Москве 10 сентября. Будут рассказывать о том, что там нового добавили и что нам с этим делать.

Естественно, я зарегистрировался. Вот ссылка для интересующихся.

August 18, 2009

Рабочее

Filed under: Delphi,SQL,Работа — Tags: , , , , — Николай Курков @ 19:59

Провел оптимизацию БД и переписал поиск по БД в виде отдельной функции: стало работать раз в 200 быстрее. Потом зашел в Инет, проверить, не обновился ли EhLib (замечательный набор компонентов для БД, прошлый набор криво выгружал в Эксель данные в новом Delphi 2009 - русские буквы закорючками) - и действительно, обновился! Установил, проверил - круто, исправили баг. Переписал функцию экспорта, добавил несколько других поддерживаемых форматов - замечательно. Почитал логи обновлений - мало того, что таблицы визуально круче выглядят, так и добавили очень полезную хотелку - dghShowRecNo. При включении слева в таблице показывается номера строчек по порядку. Просто супер! Доволен :) .

December 20, 2008

Работа с датами

Filed under: Delphi,для себя — Николай Курков @ 15:46

День недели по дате
(

  • *
    this code is generated by the algopascal translator

    this code is distributed under the alglib license
    (see http://www.alglib.net/copyrules.php for details)

  • *)
    uses math, ap;

    function dayofweek(d : integer; m : integer; y : integer):integer;forward;

    (

  • *
    День недели по дате.

    function dayofweek(d,m,y:integer):integer;

    На входе:
    дата - d (день), m (месяц), y (год).

    На выходе:
    номер дня недели.

    Понедельник имеет номер 1,
    Вторник номер 2, ...,
    Воскресенье номер 7.

  • *)

    (more...)

  • Как узнать пути к стандартным папкам (Delphi)

    Filed under: Delphi,для себя — Николай Курков @ 15:43

    В Windows есть специальная функция, позволяющая получить пути к стандартным папкам. В Delphi это будет выглядеть так:
    uses ShlObj;

    function GetSpecialPath(CSIDL: word): string;
    var s: string;
    begin
    SetLength(s, MAX_PATH);
    if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
    then s := '';
    result := PChar(s);
    end;

    Функции нужно передать id папки, путь которой хотим получить. Список id идёт далее.
    Следует помнить, что не все id будуть работать в разных версиях Windows. Например папки 'Documents & Settungs' нет в 98-х и бессмысленно пытаться получить путь к ней.

    Смысл данного поста скорее не в том, чтобы показать, как пользоваться функцией SHGetSpecialFolderPath, а, скорее, дать перечень CSIDL и описание к ним на русском.
    (more...)

    December 10, 2008

    Что нового в Delphi 2007

    Filed under: Delphi,для себя — Николай Курков @ 18:56

    Недавно отыскал видео, нашел много полезного:

    November 25, 2008

    Получение версии программы/библиотеки вида XX.XX

    Filed under: Delphi,для себя — Николай Курков @ 06:45

    Function GetFileVersion(Const FileName: String): String;
    Type
    TFileVersion = Packed Record
    Case Integer Of
    0: (Ver64: Int64);
    1: (VerLS, VerMS: DWORD);
    2: (Ver3, Ver2, Ver1, Ver0: Word);
    3: (Build, Release, Minor, Major: Word);
    End;
    Var
    VersInfo : Pointer;
    VersInfoSize : DWORD;
    FileVersion : TFileVersion;
    w : DWORD;
    FileInfo : PVSFixedFileInfo;
    Begin
    Result := '';
    VersInfoSize := GetFileVersionInfoSize(PChar(FileName), W);
    GetMem(VersInfo, VersInfoSize);
    Try
    If GetFileVersionInfo(PChar(FileName), 0, VersInfoSize, VersInfo) And
    VerQueryValue(VersInfo, '\', Pointer(FileInfo), W) Then
    Begin
    FileVersion.VerMS := FileInfo.dwFileVersionMS;
    FileVersion.VerLS := FileInfo.dwFileVersionLS;
    Result := Int2Str(FileVersion.Major) + '.' + Int2Str(FileVersion.Minor);
    End;
    Finally
    FreeMem(VersInfo);
    End;
    End;

    November 10, 2008

    Транслит русских букв в английские

    Filed under: Delphi — Николай Курков @ 14:20

    function Translit(const Str: string): string;
    const
    RArrayL = 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя';
    RArrayU = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ';
    colChar = 33;
    arr: array[1..2, 1..ColChar] of string =
    (('a', 'b', 'v', 'g', 'd', 'e', 'yo', 'zh', 'z', 'i', 'y',
    'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f',
    'kh', 'ts', 'ch', 'sh', 'shch', '''', 'y', '''', 'e', 'yu', 'ya'),
    ('A', 'B', 'V', 'G', 'D', 'E', 'Yo', 'Zh', 'Z', 'I', 'Y',
    'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F',
    'Kh', 'Ts', 'Ch', 'Sh', 'Shch', '''', 'Y', '''', 'E', 'Yu', 'Ya'));
    var
    i: Integer;
    LenS: Integer;
    p: integer;
    d: byte;
    begin
    result := '';
    LenS := length(str);
    for i := 1 to lenS do
    begin
    d := 1;
    p := pos(str, RArrayL);
    if p = 0 then
    begin
    p := pos(str, RArrayU);
    d := 2
    end;
    if p <> 0 then
    result := result + arr[d, p]
    else
    result := result + str; //если не русская буква, то берем исходную
    end;
    end;

    November 5, 2008

    Импорт данных из таблиц Excel в TStringList Delphi

    Filed under: Delphi,для себя — Tags: , , — Николай Курков @ 14:49

    function Xls_To_StringGrid(List: TStringList; AXLSFile: string): Boolean;
    const
    xlCellTypeLastCell = $0000000B;
    var
    XLApp, Sheet: OLEVariant;
    RangeMatrix: Variant;
    x, y, k, r: Integer;
    begin
    Result := False;
    // Create Excel-OLE Object
    XLApp := CreateOleObject('Excel.Application');
    try
    // Hide Excel
    XLApp.Visible := False;

    // Open the Workbook
    XLApp.Workbooks.Open(AXLSFile);

    // Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];

    // In order to know the dimension of the WorkSheet, i.e the number of rows
    // and the number of columns, we activate the last non-empty cell of it

    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    // Get the value of the last row
    x := XLApp.ActiveCell.Row;
    // Get the value of the last column
    y := XLApp.ActiveCell.Column;

    // Assign the Variant associated with the WorkSheet to the Delphi Variant

    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
    // Define the loop for filling in the TStringGrid
    k := 1;
    repeat
    List.Add(RangeMatrix[K, 1]);
    Inc(k, 1);
    until k > x;
    // Unassign the Delphi Variant Matrix
    RangeMatrix := Unassigned;

    finally
    // Quit Excel
    if not VarIsEmpty(XLApp) then
    begin
    // XLApp.DisplayAlerts := False;
    XLApp.Quit;
    XLAPP := Unassigned;
    Sheet := Unassigned;
    Result := True;
    end;
    end;
    end;

    Powered by WordPress