Wednesday, January 5, 2011

Read and Write on TMemo

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.

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Kang Iwan K-sev | Thank's for your visit To My Site - Ridwan Mulyana | Cibeureum