Советы по Delphi. Версия 1.0.6 - [3]

Шрифт
Интервал

>begin

> if len > 255 then S[0]:= Chr(255)

> else S[0]:= Chr(Len)

>end;


>procedure SetString(var Dst: string; Src: PChar; Len: Integer);

>begin

> if Len > 255 then Move(Src^, Dst[1], 255)

> else Move(Src^, Dst[1], Len);

> SetLength(Dst, Len);

>end;

>{$ENDIF}

>end.

Преобразование двоичного числа в десятичное

Может ли кто-нибудь дать мне идею простого преобразования двоичного кода (base2) в десятичный (base10)?

Решение 1

>/////////////////////////////////////////////////////////////////////////

>// преобразование 32-битного base2 в 32-битный base10                  //

>// максимальное число = 99 999 999, возвращает –1 при большем значении //

>/////////////////////////////////////////////////////////////////////////

>function base10(base2:integer) : integer; assembler;

>asm

> cmp        eax,100000000        // проверка максимального значения

> jb         @1                   // значение в пределах допустимого

> mov        eax,-1               // флаг ошибки

> jmp        @exit                // выход если –1

>@1:

> push       ebx                  // сохранение регистров

> push       esi

> xor        esi,esi              // результат = 0

> mov        ebx,10               // вычисление десятичного логарифма

> mov        ecx,8                // преобразование по формуле 10^8-1

>@2:

> mov        edx,0                // удаление разницы

> div        ebx                  // eax – целочисленное деление на 10, edx – остаток от деления на 10

> add        esi,edx              // результат = результат + разность[I]

> ror        esi,4                // перемещение разряда

> loop       @2                   // цикл для всех 8 разрядов

> mov        eax,esi              // результат функции

> pop        esi                  // восстанавление регистров

> pop        ebx

>@exit:

>end;

Решение 2

>function IntToBin(Value: Longint; Size: Integer): String;

>var

> i: Integer;

>begin

> Result :='';

> for i:= Size downto 0 do begin

>  if value and (1 shl i)<>0 then begin

>   Result:= Result+'1';

>  end else begin

>   Result:= Result+'0';

>  end;

> end;

>end;


>Function BinToInt(Value: String): Longint;

>var

> i,Size: Integer;

>begin

> Result:= 0;

> Size:= Length(Value);

> for i:=Size downto 0 do begin

>  if copy(value,i,1) = '1' then begin

>   Result:= Result + (1 shl i);

>  end;

> end;

>end;

Решение 3

Следующая функция получает в качестве параметра Base (1..16) любую десятичную величину и возвращает результат в виде строки, содержащей точное значение BaseX. Вы можете использовать данный алгоритм для преобразования арабских чисел в римские (смотри ниже).

>function DecToBase(Decimal: Longint; const Base: Byte): String;

>const Symbols: String[16] = '0123456789ABCDEF';

>var

> scratch: String;

> remainder: Byte;

>begin

> scratch:= '';

> repeat

>  remainder:= Decimal mod base;

>  scratch:= Symbols[remainder + 1] + scratch;

>  Decimal:= Decimal div base;

> until (decimal = 0);

> Result:= scratch;

>end;

Передайте данной функции любую десятичную величину (1…3999), и она возвратит строку, содержащую точное значение в римской транскрипции.

>function DecToRoman(Decimal: Longint ): String;

>const Romans: Array[1..13] of String = ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');

> Arabics: Array[1..13] of integer = (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);

>var

> i: Integer;

> scratch: String;

>begin

> scratch:= '';

> for i := 13 downto 1 do

>  while (decimal >= arabics[i]) do begin

>   Decimal:= Decimal – Arabics[i];

>   scratch:= scratch + Romans[i];

>  end;

> Result:= scratch;

>end;

Преобразование ICO в BMP

Решение 1

Попробуйте:

>var

> Icon: TIcon;

> Bitmap: TBitmap;

>begin

> Icon:= TIcon.Create;

> Bitmap:= TBitmap.Create;

> Icon.LoadFromFile('c:\picture.ico');

> Bitmap.Width:= Icon.Width;

> Bitmap.Height:= Icon.Height;

> Bitmap.Canvas.Draw(0, 0, Icon);

> Bitmap.SaveToFile('c:\picture.bmp');

> Icon.Free;

> Bitmap.Free;

>end;

Решение 2

Способ преобразования изображения размером 32×32 в иконку.

>unit main;


>interface


>uses

> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,ExtCtrls, StdCtrls;

>type TForm1 = class(TForm)

> Button1: TButton;

> Image1: TImage;

> Image2: TImage;

> procedure Button1Click(Sender: Tobject);

> procedure FormCreate(Sender: Tobject);

>private

> { Private declarations }

>public

> { Public declarations }

>end;


>var

> Form1: TForm1;


>implementation

>{$R *.DFM}


>Procedure Tform1.Button1Click(Sender: Tobject);

> var winDC, srcdc, destdc : HDC;

> oldBitmap : HBitmap;

> iinfo : TICONINFO;

>begin

> GetIconInfo(Image1.Picture.Icon.Handle, iinfo);

> WinDC:= getDC(handle);

> srcDC:= CreateCompatibleDC(WinDC);

> destDC:= CreateCompatibleDC(WinDC);

> oldBitmap:= SelectObject(destDC, iinfo.hbmColor);

> oldBitmap:= SelectObject(srcDC, iinfo.hbmMask);

> BitBlt(destdc, 0, 0, Image1.picture.icon.width, Image1.picture.icon.height, srcdc, 0, 0, SRCPAINT);

> Image2.picture.bitmap.handle := SelectObject(destDC, oldBitmap);

> DeleteDC(destDC);

> DeleteDC(srcDC);

> DeleteDC(WinDC);

> image2.Picture.Bitmap.savetofile(ExtractFilePath(Application.ExeName) + 'myfile.bmp');

>end;


>Procedure Tform1.FormCreate(Sender: Tobject);

>begin

> image1.picture.icon.loadfromfile('c:\myicon.ico');

>end;


>end.

Unix-строки (чтение и запись Unix-файлов)

Данный модуль позволяет читать и записывать файлы формата Unix.


Еще от автора Валентин Озеров
Советы по Delphi. Версия 1.4.3 от 1.1.2001

…начиная с 1001. Смотрите другие файлы…


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Как функции, не являющиеся методами, улучшают инкапсуляцию

Когда приходится инкапсулировать, то иногда лучше меньше, чем большеЯ начну со следующего утверждения: Если вы пишете функцию, которая может быть выполнена или как метод класса, или быть внешней по отношению к классу, Вы должны предпочесть ее реализацию без использования метода. Такое решение увеличивает инкапсуляцию класса. Когда Вы думаете об использовании инкапсуляции, Вы должны думать том, чтобы не использовать методы.Удивлены? Читайте дальше.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.