Статьи Королевства Дельфи


S003 - часть 3


...

Полностью аналогичный алгоритм можно использовать не только для вычисления выражений, но и, например, для их символьного дифференцирования. Только при дифференцировании встаёт ещё задача об упрощении получившегося выражения, потому что производная, например, функции 'x*x*x' будет иметь вид '1*x*x+x*(1*x+x*1)'. Это, безусловно, правильно, но уж больно коряво.

Другой путь модификации этого алгоритма - превращение его из интерпретатора в компилятор. Это может оказаться полезным, например, при построении графиков, когда приходится часто вычислять значение одного выражения при разных значениях одной или нескольких переменных. Переход от интерпретации к компиляции - вещь вполне реальная, хоть и муторная: в своё время мне удалось написать такой модуль для Delphi 3.0. Однако такой компилятор может перестать работать в будущих версиях Delphi, если изменится, например, модель вызова. А этот транслятор использует только те возможности Delphi, которые полностью документированы и поддержка которых в следующих версиях гарантируется производителями продукта. Вам выбирать - скорость или переносимость.

Автор: Антон Григорьев

Калькулятор(синтаксический анализатор арифметических выражений)

Вычислитель выражений типа (13,5*6+78)/45+98 представленных в виде строки. Результат - переменная типа Currency.
Поддерживаются все знаки арифметики и вложенные скобки. Пример: begin var c:currency; c:=Express('2+3') end;

Автор: Дмитрий Надыгин

Массив визуальных компонентов
Иногда бывает нужно создать массив визуальных компонентов, например, кнопок. Хотя этого нельзя сделать средствами IDE, как, например, в Visual Basic'е, это все же возможно:
Предположим, что нужно создать массив из 5 кнопок.
type TForm1 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public Buttons: Array[1..5] of TButton; procedure ButtonsDown(Sender: TObject); end; //...................... procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i:=1 to 5 do begin Buttons[i]:=TButton.Create(Self); with Buttons[i] do begin parent:=self; caption:='Кнопка №'+IntToStr(i); tag:=i; top:=i*30; onClick:=ButtonsDown; // Это добавление кнопки в массив контролов формы ! self.InsertControl(Buttons[i]); end; end; end; //Через свойство Tag программа узнает, какая кнопка нажата procedure TForm1.ButtonsDown(Sender: TObject); begin Label1.Caption:='Нажата кнопка №'+IntToStr((Sender as TButton).Tag); end; Удалять кнопки специально не надо , при завершении приложения форма сама освободит из-под них память.

Victor Mitrofanov

Компонент TVersionInfo для получения информации из VersionInfo проекта


TVersionInfo = class(TComponent) public constructor Create(AOwner : TComponent); override; destructor Destroy; override; function GetValue(const ValueName : String; var Buffer : Pointer) : Boolean; function GetLocalValue(const ValueName : String) : String; property CompanyName : String read GetCompanyName; property FileDescription : String read GetFileDescription; property FileVersion : String read GetFileVersion; property InternalName : String read GetInternalName; property LegalCopyright : String read GetLegalCopyright; property OriginalFilename : String read GetOriginalFilename; property ProductName : String read GetProductName; property ProductVersion : String read GetProductVersion; property LangCharSet : String read FLangCharSet; published property FileName : String read FFileName write SetFileName; end;

Автор: Михаил Гонтарь

Модуль для коррекции проблем при работа с TPrinter

Исходный текст :

Полное описание модуля (английский язык)

Краткое описание модуля:
Модуль может быть использован в 16-ти и 32-х разрядных приложениях. Он был создан для коррекции следующих проблем :
1. Возникновение исключительных ситуация при обращении к published-свойствам TPrinter, таким как "Orientation"
2. Неверное масштабирование шрифтов при изменении разрешающей способности (resolution) принтера.
3. Некорректная работа "Printer.Canvas.Draw" .

И дополнительно позволяет решать задачи :
1. Доступ к полям структуры "tDevMode", таким как "dmScale", "dmCopies", "dmColor".
2. Специальные настройки для печати различных вариантов
отчета из программы, когда в одном случае требуется качественная, а в другом - быстрая печать.

Автор: "S. Bochkarev"




Начало  Назад  Вперед