[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]


My small contribution to DELPHI programmers:
Here follows a small unit that helps you use any derivative of TCustomEdit for 
standard Pascal Input/Output.  Hope you find it useful.  It works the fine 
with the TP yacc and lex for parsing the contents of a TMemo.  Could also 
replace the need for WinCRT.

How to use it:

Uses
   ...., EditText;

Var
   F : Text;
   Memo1, Memo2: TMemo;
   S : String;
   i : Integer;

Begin

  {Assumes the Memos have been created and exist on the form}
   AssignDevice(System.Input, Memo1);
   Reset(System.Input);
   AssignDevice(System.Output, Memo2);
   Rewrite(System.Output);

  {Now normal Reads and Writes work with Memo1 and Memo2.  ie.}
  Writeln(S); Write(i:2);


  {Also}
   AssignDevice(F, Memo2);
   Rewrite(F);
   Writeln(F,S); Write(F,i:2);

end;


Source:

unit EditText;
{

      Written by Kiriakos Vlahos (kvlahos.@lbs.lon.ac.uk)
      Freeware   -  Please send comments of improvements.
   
}

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  StdCtrls, Forms, Dialogs;

  procedure AssignDevice(var T: Text; NewEditComponent: TCustomEdit);

implementation

type
  EditData = record
    Edit: TCustomEdit;
    Filler: Array [1..12] of Char;
  end;

function EditWrite(var F: TTextRec): Integer; far;
begin
  with F do
  begin
    BufPtr^[BufPos] := #0;
    EditData(F.UserData).Edit.SetSelTextBuf(PChar(BufPtr));
    BufPos := 0;
  end;
  EditWrite := 0;
end;

function EditRead(var F: TTextRec): Integer; far;
Var
  CurPos : Integer;
begin
  with F do
    with EditData(UserData) do begin
      BufPos := 0;
      Edit.SelLength := BufSize;
      Edit.GetSelTextBuf(PChar(BufPtr), BufSize);
      BufEnd := StrLen(PChar(BufPtr));
      Edit.SelStart := Edit.SelStart + BufEnd;
    end;
  EditRead := 0;
end;

function EditFlush(var F: TTextRec): Integer; far;
begin
  F.BufPos := 0;
  F.BufEnd := 0;
  EditFlush := 0;
end;

function EditOpen(var F: TTextRec): Integer; far;
begin
  with F do
  begin
    if Mode = fmInput then
    begin
      InOutFunc := @EditRead;
      FlushFunc := nil;
      EditData(F.UserData).Edit.SelStart := 0;
    end
    else
    begin
      Mode := fmOutput;
      InOutFunc := @EditWrite;
      FlushFunc := @EditWrite;
    end;
    EditOpen := 0;
  end;
end;

function EditIgnore(var F: TTextRec): Integer; far;
begin
  EditIgnore := 0;
end;

procedure AssignDevice(var T: Text; NewEditComponent: TCustomEdit);
begin
  with TTextRec(T) do
  begin
    Handle := $FFFF;
    Mode := fmClosed;
    BufSize := SizeOf(Buffer)-1;
    BufPtr := @Buffer;
    OpenFunc := @EditOpen;
    CloseFunc := @EditIgnore;
    Name[0] := #0;
    EditData(UserData).Edit:= NewEditComponent;
  end;
end;

end.


[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]