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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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


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


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    ant0ni02004

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    k94kwk1
    блокировки наше всё
    смотрите в сторону select for update

    Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 17:34 10-02-2013
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    k94kwk1
    Вроде Адо должен уметь ставить автоматические блокировки. Вот в этой серии что то было об этом: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=408

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 16:29 11-02-2013
    FuryArrow

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Delphi 7
    Имеется файл ресурсов:
    Код:
    101 BITMAP 101.BMP
    При этом код
    Код:
    Bitmap.LoadFromResourceName(HInstance, '101');
    не работает. Но если вместо 101 BITMAP 101.BMP написать B101 BITMAP 101.BMP и вместо '101' написать 'B101' то работает.
    А как сделать, чтобы имя с цифры начиналось, всё равно ведь 101 это строка, а не число

    Bitmap.LoadFromResourceID(HInstance, 101);

    Всего записей: 590 | Зарегистр. 27-01-2010 | Отправлено: 14:06 12-02-2013 | Исправлено: FuryArrow, 14:16 12-02-2013
    landy



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

    Цитата:
    Я наткнулся на коллекцию готовых алгоритмов FGInt (Fast Gigantic Integers), попробовал оттуда RSA, но нормально не заработало - временами неправильно раскодирует.

    В какой версии Delphi ты это пробовал? FGint написано для семёрки, в более новых нужно использовать явное приведение к AnsiChar (из-за введения Unicode.)
     
    Для твоей задачи идея и библиотека вполне подходят, но есть маленькое условие - тебе нужно шифровать ключ закрытым ключом (D+N), а расшифровывать - открытым (E+N).

    Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 14:56 12-02-2013
    Ognev

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

    Цитата:
    В какой версии Delphi ты это пробовал?

    Delphi XE2
     

    Цитата:
    FGint написано для семёрки, в более новых нужно использовать явное приведение к AnsiChar (из-за введения Unicode.)

    Читал про это в виде предположения. Но, честно сказать, желания лазить по коду без комментариев, который реализует то, что я плохо понимаю, не возникло. И хоть бы какие примеры использования были.  
     

    Цитата:
     есть маленькое условие - тебе нужно шифровать ключ закрытым ключом (D+N), а расшифровывать - открытым (E+N).

    Да, я в курсе. Наверное, поэтому первое знакомство с использованием PGP в Delphi произвело на меня столь гнетущее впечатление - там было описано все, что мне не надо ))) Кстати говоря, в инете этот момент плохо освещен. Я много где встречал утверждение, что асимметричные алгоритмы используются для шифрования открытым ключом и расшифровки закрытым. Но почти нигде не написано, что с таким же успехом можно делать наоборот.
     
    Я нашел тут на просторах инета простейшую реализацию, сводящуюся к шифрованию целых чисел целочисленными ключами. Чуть поднатужившись переписал это на Int64. Смутно полагаю, что криптостойкость тут никакая.  Но склоняюсь пока к этому варианту, так как с головой влезать в реализацию шифрования не очень хочется. Именно поэтому и поднял вопрос о готовом решении. Как шифровать этим алгоритмом файлы я ума не приложу ))) Но есть вариант шифровать не файл лицензии, а, грубо говоря, некий серийный номер, который будет преобразован в Int64 перед шифрованием.

    Всего записей: 397 | Зарегистр. 07-09-2004 | Отправлено: 21:41 12-02-2013 | Исправлено: Ognev, 21:53 12-02-2013
    k94kwk1

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ПО поводу блокировок
    ADO ставит блокировки, в т.ч. и те, которые мне нужны. В частности ltPessimistic . Но при  установки в ADOQuery блокируется не запись, а вся таблица. Почему не понимаю!

    Всего записей: 28 | Зарегистр. 11-03-2012 | Отправлено: 23:18 12-02-2013
    ant0ni02004

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    k94kwk1
    так читайте таблицу(select) в read-only, а редактируйте 1 запись в pessimistic (т.е. в другом adoquery)
    и еще - обратите внимание на TBetterAdoDataSet, он получше TAdoQuery будет
    и всё-таки - используйте select for update where id=:id

    Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 23:36 12-02-2013 | Исправлено: ant0ni02004, 23:43 12-02-2013
    landy



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

    Цитата:
    Кстати говоря, в инете этот момент плохо освещен. Я много где встречал утверждение, что асимметричные алгоритмы используются для шифрования открытым ключом и расшифровки закрытым. Но почти нигде не написано, что с таким же успехом можно делать наоборот.

    Теоретически - да, но на практике, например Windows CryptoAPI (которая позволяет использовать системные встроенные модули шифрования, в том числе RSA) такой режим работы не поддерживает.
     
    Исправить же FGInt несложно - полагаю (но не проверял), что достаточно будет заменить всюду PChar на PAnsiChar.

    Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 10:51 13-02-2013
    Ognev

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

    Цитата:
    Исправить же FGInt несложно - полагаю (но не проверял), что достаточно будет заменить всюду PChar на PAnsiChar.

    Попробую, может заработает.

    Всего записей: 397 | Зарегистр. 07-09-2004 | Отправлено: 11:29 13-02-2013
    landy



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

    Цитата:
    Исправить же FGInt несложно - полагаю (но не проверял), что достаточно будет заменить всюду PChar на PAnsiChar.
     
    Попробую, может заработает.

    Ну и, естественно, не забыть string -> AnsiString

    Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 21:39 13-02-2013
    Ognev

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

    Цитата:
    Ну и, естественно, не забыть string -> AnsiString

    Да, только сейчас проникся реальной глубиной проблемы перехода на Unicode )))
     
    FGInt пока не трогал, смотрел другие варианты. Убедился, что тот вариант, что

    Цитата:
    Я нашел тут на просторах инета простейшую реализацию, сводящуюся к шифрованию целых чисел целочисленными ключами.

    не то, что я думал. Расшифровка идет неправильно, если числа большие. Ткните, если можно на реальную реализацию шифрования RSA достаточно большого целого числа целочисленными ключами.
     
    Ну и на повестке попробовать дожать FGInt. Отпишусь по окончанию.

    Всего записей: 397 | Зарегистр. 07-09-2004 | Отправлено: 21:57 13-02-2013
    Ognev

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Отчет о проделанной с FGInt работе.
     
    1) Все в FGInt явно привел к Ansi.
    2) Нашел у себя косяк с вычислением приватной экспоненты (засовывал при ее вычислении n вместо функции Эйлера).
    3) Использовал для хранения шифрованного-дешифрованного текста не RichEdit.Lines.Text, а глобальные переменные AnsiString.
     
    После этого все заработало! Можно ли FGInt явно не приводить к Ansi не проверял.
     
    Всем большое спасибо за помощь!

    Всего записей: 397 | Зарегистр. 07-09-2004 | Отправлено: 13:08 14-02-2013 | Исправлено: Ognev, 13:09 14-02-2013
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем кто юзает Absolute Database
    После перехода с 6.20 на 7.10 (возможно проблемма была и ранее) при попытке, в  Object Incpector, установить свойства таблицы Active в True вылетает такая ошибка
    Table file decompression error. Possible table corruption 0 - Native error: 20189.
    Иногда бывает не вылетает. Делфи 2007. Ситуация повторяется везде даже на ихних демках. Откомпилированные и запущенные программы эту ошибку не выдают.
    Кто знает где собака порылась?

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 13:20 14-02-2013
    XPerformer



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    Судя по changelog, они эту ошибку уже несколько билдов пытаются исправить
    Под XE проблем не испытываю
     
    Добавлено:
    правда, шифрование таблиц не включаю

    Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 13:36 14-02-2013
    StalkerSoftware



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hi All,
     
    Вопрос по типам.
    Есть C++ функция

    Код:
     
    BOOL WINAPI CryptSignMessage(
      _In_     PCRYPT_SIGN_MESSAGE_PARA pSignPara,
      _In_     BOOL fDetachedSignature,
      _In_     DWORD cToBeSigned,
      _In_     const BYTE *rgpbToBeSigned[],
      _In_     DWORD rgcbToBeSigned[],
      _Out_    BYTE *pbSignedBlob,
      _Inout_  DWORD *pcbSignedBlob
    );
     

     
    Есть ее аналог на Delphi (взято из JwaWinCrypt.pas v 1.17 2007/09/05 11:58:53 из библиотеки JEDI API 2.3)

    Код:
     
    function CryptSignMessage(
      pSignPara: PCRYPT_SIGN_MESSAGE_PARA;
      fDetachedSignature: BOOL;  
      cToBeSigned: DWORD;  
      rgpbToBeSigned: LPBYTE;
      rgcbToBeSigned: LPDWORD;  
      pbSignedBlob: LPBYTE;  
      var pcbSignedBlob: DWORD): BOOL; stdcall;
     

     
    Меня интересует параметры

    Код:
     
      _In_     const BYTE *rgpbToBeSigned[],
      _In_     DWORD rgcbToBeSigned[],
     

    Это как я понимаю массивы.
     
    Есть данные которые находятся в TMemoryStream.
    Соответственно мне надо как то в эти параметрах указать сами данные (rgpbToBeSigned) и их размер (rgcbToBeSigned) взятые из TMemoryStream.
    Но как их правильно задать я не знаю. Нужна помощь ...
     

    Всего записей: 682 | Зарегистр. 23-06-2008 | Отправлено: 18:58 01-03-2013
    MoLnuS



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Графический браузер вида: главная форма (вверху менюшка), открываем рисуночки, каждый появляется в новой форме (дочерней для главной). Думаю, поняли, в чем суть.
    В меню имеется пункты "Растянуть", "Сохранить" и тд, которые должны применяться к активной(!!!) дочерней форме. Но у меня они применяются к последней открытой форме (т.к. экземпляр формы создается именно при открытии). Как бы так сделать, чтобы операции над рисунком применялись к рисунка, форма которого в фокусе?
     
    Решал с полгода назад такую же задачу на Си, там решил вот так:  
    TForm2 *Form2 = (TForm2*) Form1->ActiveMDIChild;
    И потом с Form2 успешно работало все. Но в Делфи не могу адаптировать сей код чего-то..=\\\ За более чем месяц каникул забыл все нафик..)

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 12:11 02-03-2013
    dsk



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

    Цитата:
    Есть данные которые находятся в TMemoryStream.  
    Соответственно мне надо как то в эти параметрах указать сами данные (rgpbToBeSigned) и их размер (rgcbToBeSigned) взятые из TMemoryStream.  
    Но как их правильно задать я не знаю. Нужна помощь ...  

    Так пойдет?

    Код:
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
     ms:TMemoryStream;
     str:String;
     i:Integer;
     arr:PByte;
    begin
     ms:=TMemoryStream.Create;
     ms.LoadFromFile('c:\1\x.bpl');
     arr:=ms.Memory;
     for i := 0 to 2 do
      str:=str+char(arr[i]);
     ShowMessage(str); // выдаст MZP - 3 первых байта в файле
     ShowMessage(IntToStr(ms.Size)); // выдаст 32768-размер файла
     ms.Free;
    end;
     

    Всего записей: 68 | Зарегистр. 02-05-2002 | Отправлено: 12:38 02-03-2013
    MoLnuS



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    А с моим небольшим вопросиком(см.выше) кто-нибудь подсобит?))
    Как же получить активную дочернюю форму...

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 18:41 02-03-2013
    dsk



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

    Цитата:
    А с моим небольшим вопросиком(см.выше) кто-нибудь подсобит?))  
    Как же получить активную дочернюю форму...

    Вот так:

    Код:
     
    procedure TMainForm.MinMnuClick(Sender: TObject);
    begin
     if not (ActiveMDIChild = Nil) then
       if ActiveMDIChild is TMDIChild then
        ActiveMDIChild.WindowState:=wsMinimized; // тут действие с активным окном
    end;
     

    Всего записей: 68 | Зарегистр. 02-05-2002 | Отправлено: 22:48 02-03-2013
    MoLnuS



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    dsk
    Находил сее в инетах, но не понял, что оно делает и вообще.
     
    procedure TMainForm.MinMnuClick(Sender: TObject);  
    TMainForm - родительская форма?
    MinMnuClick-?)
     
    if not (ActiveMDIChild = Nil) then  
    если есть дочерние формы?
     
    if ActiveMDIChild is TMDIChild then  
    Вообще не понимэ эту строчку.
     
    Следующую вы вроде объяснили..)
     
    А можно ли как-то передать эту дочернюю форму, а не выполнять что-то в процедуре? Функцией там как-нибудь..)
     
    Странно, что в Делфи не одной строчкой, как в Си...)
     
    Добавлено:
    Нашел описание всех строк вот здесь.
     
    Спасибо=)

    Всего записей: 191 | Зарегистр. 21-05-2009 | Отправлено: 08:35 03-03-2013
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru