На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (9) « Первая ... 2 3 [4] 5 6 ...  8 9 все  ( Перейти к последнему сообщению )  
> Delphi Russian Knowledge Base 2.3 , Новая версия от 30 января 2005 года
    Арифметика указателей.

    Цитата
    Нижеследующий код демонстрирует работу функций Inc() и Dec(), увеличивающих или уменьшающих указатель на размер соответствующего типа ничего не демонстрирует, т.к. не работает, потому, что функции Ofs() в Делфи нет и быть не может (пока сам не создашь ;)):

    var
    P1, P2: ^LongInt;
    L: LongInt;
    begin
    P1 := @L; { назначаем оба указателя на одно и то же место }
    P2 := @L;
    Inc(P2); { Увеличиваем один }

    { Здесь мы получаем разницу между смещениями двух
    указателей. Поскольку первоначально они указывали на одно
    и то же место памяти, то результатом данного вызова
    будет разница между двумя указателями после вызова Inc(). }

    L := Ofs(P2^) - Ofs(P1^); { L = 4; т.е. sizeof(longInt) }
    end;


    Я бы вместо этого сделал так:
    ExpandedWrap disabled
      function PtrToInt(P: Pointer): LongWord;
      asm
        mov eax, P;
        mov result, eax;
      end;
       
      var
        P1, P2: ^LongInt;
        L: LongInt;
      begin
        P1 := @L; { назначаем оба указателя на одно и то же место }
        P2 := @L;
        Inc(P2); { Увеличиваем один }
       
        { Здесь мы получаем разницу между смещениями двух
        указателей. Поскольку первоначально они указывали на одно
        и то же место памяти, то результатом данного вызова
        будет разница между двумя указателями после вызова Inc(). }
       
        L := PtrToInt(P2) - PtrToInt(P1); { L = 4; т.е. sizeof(longInt) }
      end.
      Цитата --= Eagle =-- @
      function PtrToInt(P: Pointer): LongWord;
      asm
      mov eax, P;
      mov result, eax;
      end


      А простое приведение типов уже не в моде?
        M
        Deleted by Vit. Все нарекания к форуму сайту и т.п. - в соответствующий раздел! Пока устное предупреждение
        Сообщение отредактировано: Vit -
          Топик:
          Системные функции и WinAPI->Реестр и INI файлы->Как получить событие о смене реестра

          А в топике про то, как отловить изменения содержимого буфера обмена.
            ANSI ---> ASCII

            В строке
            ExpandedWrap disabled
              if  kod  13 then Result[i]:=' ';

            пропущен знак равенства (как я понял), правильно так:
            ExpandedWrap disabled
              if  kod=13 then Result[i]:=' ';
              "Как создавать потоки без класса TThread?" - топик дублируется
                Скачала сегодня... Почти ничего нет из того что мне нужно :( Наверно это не для таких ламеров как я :D

                У меня такое маленькое пожелание для след версии: было б неплохо если б код выделялся чемнить по типу как на форуме. И Побольше про майнменю!! 8-)
                  Цитата Maysa @
                  Почти ничего нет из того что мне нужно :( Наверно это не для таких ламеров как я :D

                  Maysa, не факт, что никогда не понадобится (все мы когда-то ламерами были :D ).
                    Цитата Maysa, 05.06.2005, 17:10:46, 739313
                    Почти ничего нет из того что мне нужно Наверно это не для таких ламеров как я

                    Может ты просто не можешь найти то, что тебе нужно? ;) Я, к примеру, когда пишу какой-то проект (программирование пока ещё не моя специальность, поэтому пишу для себя) - почти всегда заглядываю посмотреть, как кто-то другой справился с какой-то конкретной задачей (аглоритмом). :)
                      Ну может просто и не могу :rolleyes: Просто ищу только тогда, когда не могу сама уже сделать и времени в обрез :whistle: Хотя это дело я просмотрела все очень внимательно. Для меня там пока сильно уж все заумно. Ну для ламеров это :D
                        Спасибо за базу знаний, в частности был доработан под конкретные нужды и использован модифицированный алгоритм шифрования TEA.
                        (Математика, алгоритмы --> Контрольные суммы и шифрование ... --> Алгоритм шифрования TEA)
                        При этом обнаружилась в алгоритме досадная ошибочка, в редких случаях приводящая к неправильной расшифровке сообщения.
                        В процедуре EnCript:

                        ExpandedWrap disabled
                            // Определяем позицию размещения ключа в блоке данных
                            Randomize;
                            if Len < 255 then
                              I := Len
                            else
                              I := 255;
                            repeat
                              I := Random(I);
                              if I < 4 then I := 4;
                            //until I <= Len - 16;
                            // При I := Len - 16 теряется последний байт ключа, при длинне сообщения < (255 - 21)
                            // Поэтому, наверное лучше написать так (проверено, работает):
                            until I < Len - 16;


                        А байтик теряется при выполнении вот этого кусочка кода (чуть ниже в той же функции):

                        ExpandedWrap disabled
                            // Сдвигаем данные с 14 позиции на одну вправо для метки
                            // (буфер начинается с нуля)
                            for A := Len - 1 downto 14 do
                              ResultBuf[A] := ResultBuf[A - 1];


                        С уважением. Михаил.
                          Против ничего не имею - классный FAQ (сочности нехватает)
                          но очень часто встречаются ошибки
                          (недавно наткнулся на интересный FAQ ?....? ) - и непойму кто у кого копировал 8-) (ошибки идеентичные)
                            Lord, Какой такой сочности?
                            Ошибки? укажи пальцом - исправим 8-)
                              Цитата Dufa, 13.08.2005, 19:12:09, 826647
                              Ошибки? укажи пальцом - исправим 8-)

                              Пожалуйста - код проверки простого числа (asm) нерабочий. 8-)
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:
                              Страницы: (9) « Первая ... 2 3 [4] 5 6 ...  8 9 все


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0433 ]   [ 15 queries used ]   [ Generated: 18.07.25, 05:33 GMT ]