Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5

Модерирует : ShIvADeSt

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток, вопрос опять по Dll. Передаю параметры с маин формы (скомпилирована под DELPHI 5) в Dll (CodeGear2009).  
    Main:
    Подробнее...
    Dll:
    Подробнее...
    В итоге параметры криво передаются (квадраты одни на showmessage).
    Я так понимаю это из-за разных версий компиляторов, можно ли это как нибудь обойти?

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:10 06-04-2010 | Исправлено: Man_Without_Face, 11:12 06-04-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Обьявления в dll и exe должны различатся. В dll будет pAnsiChar.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:14 06-04-2010 | Исправлено: Frodo_Torbins, 11:14 06-04-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Спасибо большое, все работает

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:27 06-04-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Вы уже читали про юникод в D2009: http://edn.embarcadero.com/article/38446 ? Если еще нет, то очень рекомендую прочитать.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:47 06-04-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EugeneBoss3

    Цитата:
    Помогите убрать мусор из базы Firebird

    Гм, а разве в FB нет SQL-команд backup/restore или аналогичных?

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 13:00 06-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AviDen
     
    Гм, а разве в FB нет SQL-команд backup/restore или аналогичных?
     
    Именно SQL-команд - нет. Есть либо отдельный внешний exe-шник (gbak, или в версиях Firebird 2.0+ - nbackup для инкрементального backup'а), либо т.н. Services API, который доступен из прикладных программ (работа с которым выведена на "верхний уровень", кажется, во всех компонентах доступа к IB/FB).

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 13:24 06-04-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
     

    Код:
    const
      INI_PROFILE_GENERAL: WideString = 'General';
      REG_ROOT_APPPATH: WideString = 'Software\MyApplication\';
      REG_GENERAL_PATH: WideString = REG_ROOT_APPPATH + INI_PROFILE_GENERAL;
     

     
    Мне хочется универсальности. Можно ли как-нибудь указать компилятору чтобы он понял что будет из себя представлять переменная REG_GENERAL_PATH? А то он пишет:"Constant expression expected". Пробовал в var все это дело засунуть, тоже самое. Вроде же можно, я видел как-то наподобие такое.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 19:54 06-04-2010 | Исправлено: Maks150988, 19:55 06-04-2010
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    а какой универсальности и/или логики: статической или динамической?
     
    а в зависимости от этого:
     
    1. использование _только_ констант;
    2. констант + инициализированных переменных;
    3. только ини-переменных;
    4. использование ресурсов;
    5. пользоваться только кодом;
    6. использовать внешную инициализацию, ресурсы;
    ...
    100.
     
    учимся спрашивать...

    Всего записей: 24119 | Зарегистр. 06-12-2002 | Отправлено: 20:36 06-04-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
     
    Да я не знаю как объяснить нормально.
     
    Ну есть у меня константы однообразные типа:
     
    bla1 = 'bla\begin';
    bla2 = 'bla\end';
    bla3 = 'bla\else';
     
    Почему бы это bla отдельно не вынести и просто складывать к нему, да может у меня с километр будет это значение. Ведь с числами такое прокатывает. Это все в глобальной Const в отдельном модуле, чтобы по сто раз одно и тоже не писать, чей потом я может захочу переименовать какую-то переменную на bugaga допустим, нафиг мне надо по всему коду потом рыскать заменять одно и тоже bla.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:45 06-04-2010 | Исправлено: Maks150988, 20:46 06-04-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988

    Код:
     
    const  
      INI_PROFILE_GENERAL = 'General';  
      REG_ROOT_APPPATH = 'Software\MyApplication\';  
      REG_GENERAL_PATH: WideString = REG_ROOT_APPPATH + INI_PROFILE_GENERAL;
     

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 20:52 06-04-2010
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    ну вот, нормально уже спросил...
    хотя бы так:

    Код:
     
    unit MyConst;
    interface
    const
      base_bla = 'bla\';
      bla1 = base_bla + 'begin';
      bla2 = base_bla + 'end';
      bla3 = base_bla + 'else';
    implementation
    end.
     

    Всего записей: 24119 | Зарегистр. 06-12-2002 | Отправлено: 21:29 06-04-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем спосибо!

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 22:45 06-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ноты на грифе гитары обозначаются буквами
    C - до, D - ре и.т.д.
     
    имеем двухмерный массив 5x6
     
     
    E F G A H  
    H C D E F
    G A H C D
    D E F G A
    A H C D E
    E F G A H
     
    задача: найти все возможные сочетания аккорда нот [D A F]
    во всех строках массива, во всех возможных положениях, при том,  
    что ноты аккорда [D A F] не могут находиться на одной строке в найденом
    сочетании.  
    Допустимы варианты с удвоением ноты (например, [D A F A A]
    или [D D F F A A] главное, чтобы в найденом сочетании
    не была пропущена ни одна из требуемых нот и все найденые
    вхождения были бы на разных строках. Необходимо найти также
    варианты с пропущенными строками.
     
    при нахождении заполняется дублирующая матрица.
     
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
     
    в которой вместо 0 помещается символ х. Например, первое
    нахождение сочетания может дать такую матрицу
     
    0 х 0 0 0
    0 0 х 0 0
    0 х 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
     
    или такую
     
    0 0 0 0 0
    0 0 х 0 0
    0 0 0 0 0
    0 0 0 0 х
    0 0 0 х 0
    0 х 0 0 0
     
    после каждого нахождения сочетания, диаграмма найденного аккорда
    выводится на экран, а дублирующая матрица обнуляется.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 17:14 07-04-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет. Мне нужно проверить секцию в ини файле. Сделал код:
     

    Код:
    function IniFileProfileExistsW(pszFileName, pszAppName: WideString): Boolean;
    var
      pszbuf : LPWSTR;
      workbuf: LPWSTR;
      pszText: WideString;
      dwRet  : DWORD;
    begin
     
      Result := FALSE;
     
      GetMem(pszbuf, MAX_PATH);
      try
        dwRet := GetPrivateProfileSectionNamesW(pszbuf, MAX_PATH, LPWSTR(pszFileName));
        if (dwRet <> 0) then
        begin
          workbuf := pszbuf;
          while (workbuf^ <> #0) do
          begin
            {MessageBoxW(0, LPWSTR(workbuf), nil, MB_OK);}
            if (lstrcmpiW(LPWSTR(pszAppName), workbuf) = 0) then
            begin
              Result := TRUE;
              FreeMem(pszbuf, MAX_PATH);
              Break
            end;
            Inc(workbuf, lstrlenW(workbuf) + 1);
          end;
        end;
      finally
        FreeMem(pszbuf, MAX_PATH);
      end;
     
    end;

     
    Но что-то мне мессаджбокс аж чуть ли в 2,5 раз больше выдает результат от всех секций, повторы начинаются короче.
    Делал по примеру http://www.delphisources.ru/pages/faq/base/tinifile_changes.html, но там обычный Ansi. Подозрение на lstrlenW в моем варианте, да и надо увеличить счетчик на 2 байта видать в этом PWideChar, хотя я попробовал умножение добавлять на 2, вообще хрень какая-то. Хотя может я тут велосипед изобретаю и может есть что покомпактнее.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 19:04 07-04-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988, тебе обязательно нужно работать с unicode-строками? Если нет - прекращай изобретать велосипед и используй TIniFile. А по приведённому коду - примеры смотреть не зазорно, но и читать MSDN тоже надо как бы. А то там такая крамола, что и разбирать лень...

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 19:12 07-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
     
    Задачу надо решать именно так, как она поставлена - или, все-таки, с учетом того, что гриф гитары выглядит несколько иначе, нежели
     

    E F G A H  
    H C D E F
    G A H C D
    D E F G A
    A H C D E
    E F G A H

     
    , а именно - вот так:
     
    0   I     II    III   IV     V    VI
     
    E   F     F#   G    G#    A    B
    H   C    C#  D     D#   E     F
    G   G#  A    B     H      C    C#
    D   D#  E     F     F#    G    G#
    A   B    H     C    C#    D    D#
    E   F     F#   G    G#    A    B
     
    То есть - задача абстрактная, или Вы на самом деле хотите все аппликатуры для аккорда ре-минор найти?

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 19:12 07-04-2010
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    Почему бы не использовать класс для работы с ини-файлами?

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 19:13 07-04-2010
    AviDen



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur, нет, ну ты бы ещё попросил всю сессию за тебя сдать, ёлы-палы. С такими задачами полагается сразу же и размер вознаграждения оглашать, что ли.

    Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 19:21 07-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Odysseos
    Я конечно, в курсе какие именно ноты на грифе гитары, но для простоты всякие диезы можно не принимать в расчет. Важно было донести суть задачи. Какая разница какие буквы-ноты? Главное алгоритм. В данном конкретном примере действительно задан поиск аккорда Dm (ре минор).  
     
    AviDen
    Мне нужен просто общий алгоритм - как подобные задачи решаются.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 19:37 07-04-2010 | Исправлено: Bonivur, 19:39 07-04-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AviDen
    Ну конечно обязательно. Ну я почитал так справку, которая в комплекте с 7 делфи.

    Цитата:
    The return value specifies the number of characters copied to the specified buffer, not including the terminating null character. If the buffer is not large enough to contain all the section names associated with the specified initialization file, the return value is equal to the length specified by nSize minus two.

    Ну значит возвращается количество символов, скопированных в буфер без нультерминатора. А если чего-то там буфер маленький, значит размер результата будет как начальный заданный размер буфера минус 2.
     

    Код:
    function IniFileProfileExistsW(pszFileName, pszAppName: WideString): Boolean;
    var
      pszbuf : WideString;
      workbuf: LPWSTR;
      pszText: WideString;
      dwRet  : DWORD;
    begin
     
      Result := FALSE;
     
      SetLength(pszbuf, MAX_PATH);
     
      dwRet := GetPrivateProfileSectionNamesW(LPWSTR(pszbuf), MAX_PATH, LPWSTR(pszFileName));
      if (dwRet <> 0) then
      begin
        SetLength(pszbuf, dwRet);
        workbuf := LPWSTR(pszbuf);
        while (workbuf^ <> #0) do
        begin
          MessageBoxW(0, LPWSTR(workbuf), nil, MB_OK);
          Inc(workbuf, lstrlenW(workbuf) + 1);
        end;
      end;
     
    end;

     
    Так чтоли? Я как-то не люблю возиться с буферами. Да и вообще примеров мало для Delphi, еcnь какие-то сишные, но я там без понятия как цикл разобрать, там проверяют на \n.
     
    volser
    А какой класс работает с юникодовыми файлами, да еще при этом не тянет ворох SysUtils?

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 19:53 07-04-2010
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru