Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Если вместо этого вы хотите заменить каждую пару CR-LF или отдельный CR или LF единичным пробелом, попробуйте это:

out, inn: PChar;

out := ваш буфер;

inn := out;

while in^ <> #0 do begin

 if (in^ = #10) then begin

 end

 else if (in^ = #13) then begin

if (in+1)^

Если вместо этого вы хотите заменить каждую пару CR-LF или отдельный CR или LF единичным пробелом, попробуйте

это:

out, inn: PChar;

out := buf;

inn := out;

while inn^ <> #0 do begin

 if (inn^ = #10) or ((inn^ = #13) and ((inn+1)^ <> #10)) then begin

out^ := ' ';

Inc(out);

 end

 else if (inn^ = #13) then

 { только CR, игнорируем }

 else begin

out^ := inn^;

Inc(out);

 end;

 Inc(inn);

end;

out^ := #0;

{ буфер теперь закрыт }

Непроверенное: эффект уменьшения размера (путем установки терминатора #0) этого PChar позволит уменьшить время компиляции массивов и буферов GetMem, что же будет при использовании StrAlloc/StrDispose?

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

procedure TForm1.RemoveSpaces(var InBuf: PChar; Size: Word);

var

 Input, OutPut, Orig: PChar;

begin

 GetMem(Output, Size);

 input := Inbuf;

 Orig := Output;

 while input^ <> #0 do begin

if (input^ <> #10) and (input^ <> #13) then begin

output^ := input^;

inc(output);

end;

inc(input);

 end;

 Output^ := #0;

 Output := Orig;

 InBuf := Output;

end;

Я все еще немало удивлен тому как работает GetData! Я все еще не хочу использовать TMemo! Если кто-то может решить эту проблему, я буду очень рад! Пока же я готовлю для вас материал, включающий новые процедуры печати! Наведем порядок в беспорядке! Я уже имею реализацию вывода текста с любым шрифтом и в любой позиции, выраженной в дюймах, и это только начало! Но что я думаю действительно классно вышло, так это диманическая сетка! Вы можете создавать сетку с любым количеством строк и колонок. Назначьте текст и ячейку, установите горизонтальное и вертикальное выравнивание, выберите стиль границы

для каждой ячейки и изучите множество других способов манипулирования и печати сетки!

Функция, возвращающая тип

Delphi 1

Вы можете сделать это в C++. В ObjectPascal это также можно сделать, смотрите пример:

// функция Chameleon, возвращающая тип сгенерированного исключения

unit Unit1;

interface

uses

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

type

 MyBoolean = class

 public

Value : boolean;

 end;

 MyInteger = class

 public

Value : integer;

 end;

 MyClass = class

 public

Value : TStrings;

 end;

 TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

 private { Private declarations }

 public { Public declarations }

procedure MyProc;

function Chameleon : boolean;

 end;

var

 Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.Chameleon : boolean;

var

 b : MyBoolean;

 i : MyInteger;

 c : MyClass;

 r : integer;

begin

 r := Random(3);

 case r of

 0 : begin

b := MyBoolean.Create;

raise b;

 end;

 1 : begin

i := MyInteger.Create;

raise i;

Поделиться с друзьями: