На главную Наши проекты:
Журнал   ·   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_
  
> Перевод чисел из Dec , в Bin, Oct, Hex.
    Хайль камрады!
    А вот никто не подскажет как правильно пользоваться сими вещами:
    function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer;
    procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);
    ?
    Это мне нужно для самообразования.
    Вообще вот мой глобальный вопрос:
    Есть форма в шестых дельфях.
    На нее кладем одно поле ввода (TEdit) и три кнопки (TButton).
    Суть работы поля:
    В поле ввода нужно ввести десятичное число.
    Суть работы кнопок:
    1 кнопка: Перевод содержимого поля ввода в двоичную систему счисления
    2 кнопка: Перевод содержимого поля ввода в восмеричную систему счисления
    3 кнопка: Перевод содержимого поля ввода в шестнадцатеричную систему счисления

    Еще должно проверятся введено ли в поле числовое значение или текстовое, но это я уже и сам смогу. Благо есть такие вещи как Str () и Val () =))
    ----

    Хотя вот заглянул в фак и нашел там перевод dec в hex
    Но почему стоит ограничение в восемь символов я не понял.
    Это, наверное, скомуниженно с SWAG'a =)) Там вопрос был навроде моего.
    ExpandedWrap disabled
      function dec2hex(value: dword): string[8];
      const
        hexdigit = '0123456789ABCDEF';
      begin
        while value <> 0 do
        begin
          dec2hex := hexdigit[succ(value and $F)];
          value := value shr 4;
        end;
        if dec2hex = '' then dec2hex := '0';
      end;
      Блин, она ж вообще не рабочая :blink:
      вот, поправил
      ExpandedWrap disabled
        function dec2hex(value: dword): string;
        const
          hexdigit = '0123456789ABCDEF';
        begin
          while value <> 0 do
          begin
            result := hexdigit[succ(value and $F)]+result;
            value := value shr 4;
          end;
          if result='' then result := '0';
        end;


      Добавлено
      вот ее же на восьмеричную переколбасил:
      ExpandedWrap disabled
        function dec2oct(value: dword): string;
        const
          octdigit = '012345678';
        begin
          while value <> 0 do
          begin
            result := hexdigit[succ(value and 7)]+result;
            value := value shr 3;
          end;
          if result='' then result := '0';
        end;


      Добавлено
      ну и тем же макаром под bin
      ExpandedWrap disabled
        function dec2bin(value: dword): string;
        const
          bindigit = '01';
        begin
          while value <> 0 do
          begin
            result := bindigit[succ(value and 1)]+result;
            value := value shr 1;
          end;
          if result='' then result := '0';
        end;
      Сообщение отредактировано: мыш -
        Ага. Та штука такая.. Паскальная. Причем тотальнопаскальная.

        Вот, может кому че как понадобится
        ExpandedWrap disabled
          function dec2bin(value: dword): string;
          const
            bindigit = '01';
          begin
            while value <> 0 do
            begin
              result := bindigit[succ(value and 1)]+result;
              value := value shr 1;
            end;
            if result='' then result := '0';
          end;


        А я тормоз! ТОРМОЗ! Дададада!
          Короче, вот вам универсальная процедура:
          ExpandedWrap disabled
            function Dec2X(const Value, Base: Cardinal): string;
             
              function GetChar(const N: Cardinal): Char;
              begin
                if N <= 10 then
                  Result := Char(N + Ord('0'))
                else
                  Result := Char(N - 10 + Ord('A'));
              end;
             
            var
              V, R: Cardinal;
            begin
              Result := '';
              V := Value;
              repeat
                R := V mod Base;
                V := V div Base;
                Result := GetChar(R) + Result;
              until V < 2;
              if V <> 0 then Result := IntToStr(V) + Result;
            end;

          :tong:
            Немного подправил и добавил комменты.
            ExpandedWrap disabled
              { Фунция представляет число Value в Base-ричной системе счисления,
                Base должно находиться в пределах [1..36] и представляется
                10-ю цифрами [0..9] и 26-ю буквами английского алфавита ['A'..'Z'] }
              function Dec2X(const Value, Base: Cardinal): string;
                
                // Функция возвращает символ, соответствующий числу в N-ричной системе
                function GetChar(const N: Cardinal): Char;
                begin
                  if N < 10 then
                    // для систем счисления от 1 до 10
                    Result := Char(N + Ord('0'))
                  else
                    // для систем счисления выше 10, но не больше 36 ([0..9] + ['A'..'Z'])
                    Result := Char(N - 10 + Ord('A'));
                end;
               
              var
                V, R: Cardinal;
              begin
                Result := '';
                
                if Base <= 1 then
                begin
                  // числа можно и в системе, состоящей из одного символа, представлять ;)
                  if Base = 1 then
                  begin
                    // реализуем это
                    SetLength(Result, Value);
                    FillChar(Result[1], Value, Ord('0'));
                    Exit;
                  end else
                    // а вот других систем счисления быть не может
                    Abort;
                end else
                  // ограничиваем представление систем счисления 10-ю цифрами и 26-ю буквами
                  // английского алфавита
                  if Base > 10 + (Ord('Z') + 1) - Ord('A') then
                    Abort;
               
                // Выполняем преобразование в нужную систему виртуальным делением в столбик
                V := Value;
                repeat
                  R := V mod Base;
                  V := V div Base;
                  Result := GetChar(R) + Result;
                until V < 2; // 2 - минимальная база,
                             // то есть в любом случае когда-то "V div Base" будет равно 1
                if V <> 0 then Result := IntToStr(V) + Result;
              end;
              монстр :)
                Цитата мыш @
                монстр :)

                Да нет, просто люблю фундаментальный подход ;)
                  s-mike, теперь можно и в ФАК это дело забацать ;)
                    Цитата Тень @
                    теперь можно и в ФАК это дело забацать ;)

                    Как говорится, Done!
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0313 ]   [ 16 queries used ]   [ Generated: 27.04.24, 11:30 GMT ]