Category: Soft/Programming

  • where to store the program settings (.ini)

    Most comfortable (for me personallY) place where program must store the ini-file with options/settings is the application directory. For example, dbview.exe must save the dbview.ini in same folder where .exe is

    But interface guide from Microsoft noted that these end-user settings must be saved in CSIDL_APPDATA (C:\Documents and Settings\<user>\Application Data\<Company>\<Application>)

    If application ran in MS Vista with enabled UAC and tried to write (create file) something into application directory, error raised.

    So we changed the code (to get the file name for settings):
    function GetINIFileName: string;
    var
      strFileName: string;
    begin
      strFileName := ExtractFileName(ParamStr(0));
      Result := GetUserDirectory(‘Scalabium\’ + ChangeFileExt(strFileName, ”) + ‘\’) + ChangeFileExt(strFileName, ‘.ini’)
    end;

    where
    function GetUserDirectory(const SubDir: string): string;
    var
      List: PItemIDList;
      Path: array[0..MAX_PATH] of Char;
    begin
      SHGetSpecialFolderLocation(0, CSIDL_APPDATA, List);
      SHGetPathFromIDList(List, Path);
      Result := String(Path);
      if (Result = ”) then
        Result:= ExtractFilePath(ParamStr(0))
      else
      if (SubDir <> ”) then
      begin
        Result := Result + ‘\’ + SubDir;

        ForceDirectories(Result);
      end
    end;

  • free hosting

    http://www.freehostia.com/free_hosting.html
     Data storage: 250 MB
     Monthly bandwidth: 5 GB
     Hosting for 2 domains
     NO ADS

     PHP & Perl enabled
     1 MySQL database
     10 MB MySQL DB space
     Elefante free scripts

  • IMGConvert + gif/png pictures

    Для чтения gif/png-картинок используется GraphicEx from Mike Lischke
    Но эта библиотека не позволяет создавать ни gif, ни png. Они только читаются правильно, а сохранения там нет вовсе.

    Начал искать альтернативы.
    Для PNG довольно быстро у себя в архивах нашел TPNGImage from [email protected]
    Единственно докрутил сам вызов события OnProgress при сохранении.
    Работает медленно, но пока терпимо.

    Из первостепенного – нужно избавиться от дублирования файлов для сжатия. Они есть и в GraphicEx, и в TPNGImage (adler.obj, deflate.obj etc). С наскоку убрать не удалось – эти файлы из разных версий с разными опубликованными методами. Лишнего там на 40-45Kb

    А вот с GIF замучился. От RXLib (TRxGifAnimator) отказался сразу – слишком много лишнего тянет в себе и анимация мне не нужна вовсе.
    Потом взял TGIFImage from Anders Melander. У меня он был версии 06-Oct-2002. Прикрутился быстро, но качество создаваемых картинок абсолютно не впечатлило – цвета калечились очень сильно.

    Сегодня сходил к нему на сайт http://melander.dk/delphi/gifimage
    Оказалось он передал этот компонент в CodeGear и он включен в BDS 2007. Взял его новую версию и воткнул к себе в Delphi 5. После получаса исправления ошибок компиляции все заработало и результатом создаваемых картинок я доволен.

  • Delphi: TFindDialog и локализация

    При использовании из Delphi диалогов самой MS Windows (TFindDialog, TOpenDialog etc) есть проблема с локализацией приложения – эти диалоги всегда будут отображаться с надписями в рамках локализации самой Windows.

    Например, ваше приложение может иметь немецкий интрефейс, а вызываемый диалог будет отображать все еще русские или английские строки. Как-то это неправильно и решил я такое дело поправить.

    С наскоку проблему не удалось решить. Т.е. заголовок самого окна изменить не проблема – просто послать сообщение WM_SETTEXT хэндлу диалога с новой строкой в параметре.
    А вот найти описания всех контролов-детей не удалось ни в исходниках Delphi, ни в хедерах Visual Studio.
    День поисков в Google тоже результатов не принес. Такое впечатление, что кроме меня эта тема никого не волнует.

    Пришлось запускать Spy+ из VS и смотреть идентификаторы (ControlID) всех детей-контролов. Далее дело техники – в событии OnShow перебор всех детей, проверка ControlID и посылка сообщения на изменение текста:

    procedure TMain.dlgFindShow(Sender: TObject); 
    var 
      s: String; 
      ControlID: Integer; 
      hChildWin: hWND; 
    begin 
      s := 'Поиск'; 
      SendMessage(dlgFind.Handle, WM_SETTEXT, 0, LParam(PChar(s)));  
    
      hChildWin := GetWindow(dlgFind.Handle, GW_CHILD or GW_HWNDFIRST); 
      while (hChildWin <> 0) do 
      begin 
        ControlID := GetDlgCtrlID(hChildWin);  
    
        if (ControlID = $FFFF) then 
        begin 
          s := '&Что:'; 
          SendMessage(hChildWin, WM_SETTEXT, 0, LParam(PChar(s))); 
        end 
        else 
        if (ControlID = $0001) then 
        begin 
          s := '&Найти далее'; 
          SendMessage(hChildWin, WM_SETTEXT, 0, LParam(PChar(s))); 
        end 
        else 
        if (ControlID = $0002) then 
        begin 
          s := '&Отмена'; 
          SendMessage(hChildWin, WM_SETTEXT, 0, LParam(PChar(s))); 
        end;  
    
        hChildWin := GetWindow(hChildWin, GW_HWNDNEXT); 
      end; 
    end;
  • picture convert

    Вроде бы линейка продуктов массовой конвертации файлов пополнилась новой тулзой для обработки изображений:-)

  • kiev.ua

    С сегодняшнего дня все домены в зоне kiev.ua стали в обязательном порядке платными.
    В принципе их регистрация стала платной еще год назад, но ХостМастер дал бесплатный год всем старым владельцам, которые не поленились обновить-актиализировать информацию о домене.

    В течении пары дней пытались заплатить за один такой домен. Квест получился еще тот.
    1. порыскали и нашли две более-менее нормальные конторы 1gb.ua и nic.ua
    2. цены отличаются мало (39 грн у 1gb.ua и $5.95 у nic.ua) и оба принимают WebMoney
    3. процесс регистрации у них (а у всех остальных еще более запутаный) абсолютно не очевиден. По крайней мере ничего общего нет со всякими godaddy
    4. с учетом того, что у 1gb хостится сайт одной знакомой компании и организовывали этот хостинг мы, решили попробовать с 1Gb
    5. написали им с описанием “проблемы” и спросили что мы должны делать пошагово. Ответ пришел быстро и мы начали перевод.
    6. создали Account у них, привязали домен, получили письмо с запросом на перевод сайта и ответили на него. После этого “вдруг” оказалось, что принимают они только WMU, а WMZ/WMR не принимают и регистрации доменов (которые не хостятся у них) у них проводятся только вручную после получения оплаты
    7. решили плюнуть и запустить регистрацию с nic.ua Тут нас поджидал облом. Т.к. сайт был уже переведен к 1Gb, они не дают разрешение на перенос сайта к другим регистраторам без личного появления у них в компании с заполненным заявлением (бланк прислали по email) и ксероксом паспорта
    8. бороться с таким совком, конечно, нужно, но времени на это не было. Решили оплатить у самого 1Gb.
    9. распечатали квитанцию для оплаты через банк. Квитанция какая-то не очень стандартная, поэтому вечером решил попробовать обменять WMZ/WMR на эти гребанные WMU
    10. у большинства обменников из первой страницы поиска Google этих WMU не оказалось в наличии.
    11. в итоге обменял у roboxchange.com Все работает на полном автомате
    12. перечислил деньги со своего кошелька в 1Gb Они автоматически отобразились в контрольной панели
    13. написал письмо о том, чтобы оплатили регистрацию домена. На след.день они зарегистрировали его и написали ответ

    В итоге вроде и домен продлен, и по деньгам все нормально. Но какой-то осадочек неприятный остался. Буду думать как свалить от них к другому регистратору.

  • domains from Yahoo

    В течении последних двух лет Yahoo активно “продавали” регистрации на домены за $1-3
    Думаю очень многие купились на это, т.к. с одной стороны цена очень привлекательная, с другой контора солидная. Несколько раз видел топики в форумах о том, что тяжело потом увести домены, т.к. Yahoo требует кучу документов и тратится уйма времени на переписку.

    А сегодня прочитал, что они для покрытия убытков ввели новую плату – за первый год $10, а все последующие по $35

    С учетом того, что многие “обыватели” купили домены по акции и только не знают как увести домены, убытки они явно покроют. Но думаю, что клиенты отвернутся от них. Только вопрос времени.