Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Как работать с property типа TStrings   Найти похожие ветки 

 
Dr.TurboBoa ©   (2006-05-19 12:27) [0]

Люди! Мне нужно написать компонент для шыфрования текста. У меня готов UNIT с процедурами, но хотелось бы зделать его в виде компонента(TCommponent). Когда я это попытался зделать то увидел что при попытке редактирования из среды разработки property типа TStrings, Delphi выдает ошибку с текстом "Cannot assign a nil to a TRichEditStrings" что это значит и как с этим бороться?


 
Dr.TurboBoa ©   (2006-05-19 12:32) [1]

Код исходника в выборочном варианте:

unit Coder;

interface

uses
 SysUtils, Classes;

type
 TCoder = class(TComponent)
private
   { Private declarations }
   FStringsIN  : TStrings;
   FStringsOUT : TStrings;

 //constructor Create;
 //destructor  Destroy;

 function GetStringsIN  : TStrings;
 function GetStringsOUT : TStrings;
 procedure SetStringsIN(New : TStrings);
protected
   { Protected declarations }
   function StrsCoding(Input : TStrings) : TStrings;
   function  StrCoding(Input : String)   : String;
   function CharCoding(Input : char)     : char;
 public
   { Public declarations }
   property StringsIN  : TStrings  read  GetStringsIN
                                   write SetStringsIN;
   property StringsOUT : TStrings  read  GetStringsOUT;
   procedure Execute; overload;
 //  function Execute: TStrings; overload;
   function Execute(Input : TStrings): TStrings; overload;
 published
   { Published declarations }
 end;
const num=187;
var
TableIN  : array[1..187] of char=( "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "\", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "|", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", """, "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", "&#184;", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "\", "&#233;", "&#246;", "&#243;", "&#234;", "&#229;", "&#237;", "&#227;", "&#248;", "&#249;", "&#231;", "&#245;", "&#250;", "&#244;", "&#251;", "&#226;", "&#224;", "&#239;", "&#240;", "&#238;", "&#235;", "&#228;", "&#230;", "&#253;", "&#255;", "&#247;", "&#241;", "&#236;", "&#232;", "&#242;", "&#252;", "&#225;", "&#254;", ".", "&#168;", "!", """, "&#185;", ";", "%", ":", "?", "*", "(", ")", "_", "+", "/", "&#201;", "&#214;", "&#211;", "&#202;", "&#197;", "&#205;", "&#195;", "&#216;", "&#217;", "&#199;", "&#213;", "&#218;", "&#212;", "&#219;", "&#194;", "&#192;", "&#207;", "&#208;", "&#206;", "&#203;", "&#196;", "&#198;", "&#221;", "&#223;", "&#215;", "&#209;", "&#204;", "&#200;", "&#210;", "&#220;", "&#193;", "&#222;", "," );
TableOUT : array[1..187] of char=( "1", "q", "a", "z", "2", "w", "s", "x", "3", "e", "d", "c", "4", "r", "f", "v", "5", "t", "g", "b", "6", "y", "h", "n", "7", "u", "j", "m", "8", "i", "k", ",", "9", "o", "l", ".", "0", "p", ";", "/", "-", "[", "=", "]", "\", "`", "!", "Q", "A", "Z", "@", "W", "S", "X", "#", "E", "D", "C", "$", "R", "F", "V", "%", "T", "G", "B", "^", "Y", "H", "N", "&", "U", "J", "M", "*", "I", "K", "<", "(", "O", "L", ">", ")", "P", ":", "?", "_", "{", """, "+", "}", "|", "~", "1", "&#233;", "&#244;", "&#255;", "2", "&#246;", "&#251;", "&#247;", "3", "&#243;", "&#226;", "&#241;", "4", "&#234;", "&#224;", "&#236;", "5", "&#229;", "&#239;", "&#232;", "6", "&#237;", "&#240;", "&#242;", "7", "&#227;", "&#238;", "&#252;", "8", "&#248;", "&#235;", "&#225;", "9", "&#249;", "&#228;", "&#254;", "0", "&#231;", "&#230;", ".", "-", "&#245;", "&#253;", "=", "&#250;", "\", "&#184;", "!", "&#201;", "&#212;", "&#223;", """, "&#214;", "&#219;", "&#215;", "&#185;", "&#211;", "&#194;", "&#209;", ";", "&#202;", "&#192;", "&#204;", "%", "&#197;", "&#207;", "&#200;", ":", "&#205;", "&#208;", "&#210;", "?", "&#195;", "&#206;", "&#220;", "*", "&#216;", "&#203;", "&#193;", "(", "&#217;", "&#196;", "&#222;", ")", "&#199;", "&#198;", ",", "_", "&#213;", "&#221;", "+", "&#218;", "/", "&#168;" );

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Coding", [TCoder]);
end;

//constructor TCoder.Create;
//begin
//FStringsIN:=TStringList.Create;
//FStringsIN.Add("IN");
//FStringsOUT:=TStringList.Create;
//FStringsOUT.Add("OUT");
//end;

//destructor TCoder.Destroy;
//begin
//FStringsIN.Free;
//FStringsOUT.Free;
//end;

function TCoder.CharCoding(Input : char) : char;
begin
end;

function TCoder.StrCoding(Input : String) : String;
begin
end;

function TCoder.StrsCoding(Input : TStrings) : TStrings;
begin
end;

procedure TCoder.Execute;
begin
FStringsOUT:=StrsCoding(FStringsIN);
end;

function TCoder.Execute(Input : TStrings): TStrings;
begin
Result:=TStringList.Create;
Result:=StrsCoding(Input);
end;

function TCoder.GetStringsIN : TStrings;
begin
Result:=TStringList.Create;
Result:=FStringsIN;
end;

function TCoder.GetStringsOUT : TStrings;
begin
Result:=TStringList.Create;
Result:=FStringsOUT;
end;

procedure TCoder.SetStringsIN(New : TStrings);
begin
FStringsIN:=New;
end;

end.


 
Сергей М. ©   (2006-05-19 13:37) [2]


> при попытке редактирования из среды разработки property
> типа TStrings


Среда разработки (Object Inspector имеется ввиду ?) в дизайн-тайм редактирует лишь те св-ва, которые размещены в секции published компонента, а она у тебя пуста.

?


 
Dr.TurboBoa ©   (2006-05-20 14:41) [3]

Переместил, ничего не получилось. Все та же ошибка!


 
Яся   (2006-05-20 17:40) [4]

Кошмар
Result:=TStringList.Create;
Result:=FStringsIN;
Зачем создавать TStringList, чтобы тут же потерять на него ссылку?
FStringsIN:=New;
FStringsIN.Assign(New) своя копия надежнее будет


 
Dr.TurboBoa ©   (2006-05-21 12:43) [5]


> Кошмар
> Result:=TStringList.Create; - без этого exeption при получении значения(Как можно получать ссылка на не существующею область памяти!)
> Result:=FStringsIN;
> Зачем создавать TStringList, чтобы тут же потерять на него
> ссылку?
> FStringsIN:=New;
> FStringsIN.Assign(New) своя копия надежнее будет - разницы никакой! Просто некоторые думают что метод Assign коректней!

А что конкретно ты предлагаеш зделать? Я пытался переделать код с учетом твоего совета. Все та же ошибка!!! Проблема в том, что из Object Inspector не редактируеться хотя при запуске работаэт нормально!


 
Яся   (2006-05-21 16:25) [6]

С телепатией проблема.
То, что я вижу - это не код, а какой-то черновик.
Для начала в нем вообще нет никаких published свойств, а значит OI и показывать нечего, не то что редактировать.
> "Cannot assign a nil to a TRichEditStrings

Откуда здесь RichEdit взялся?
Что еще осталось за кадром?


 
Dr.TurboBoa ©   (2006-05-24 17:24) [7]

Код в полном варианте. Попробуй вставить на форму компонент и отредактировать свойства StringsIN:
unit Coder;

interface

uses
 SysUtils, Classes;

type
 TCoder = class(TComponent)
 private
   { Private declarations }
   FStringsIN  : TStrings;
   FStringsOUT : TStrings;

 //constructor Create;
 //destructor  Destroy;

 function GetStringsIN  : TStrings;
 function GetStringsOUT : TStrings;
 procedure SetStringsIN(New : TStrings);

 protected
   { Protected declarations }
   function StrsCoding(Input : TStrings) : TStrings;
   function  StrCoding(Input : String)   : String;
   function CharCoding(Input : char)     : char;
 public
   { Public declarations }
   procedure Execute; overload;
    function Execute(Input : TStrings): TStrings; overload;
 published
   { Published declarations }
    property StringsIN  : TStrings  read  GetStringsIN
                                   write SetStringsIN;
    property StringsOUT : TStrings  read  GetStringsOUT;
 end;
const num=187;
var
TableIN  : array[1..187] of char=( "`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "\", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "|", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", """, "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", "ё", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "\", "й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю", ".", "Ё", "!", """, "№", ";", "%", ":", "?", "*", "(", ")", "_", "+", "/", "Й", "Ц", "У", "К", "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "Ф", "Ы", "В", "А", "П", "Р", "О", "Л", "Д", "Ж", "Э", "Я", "Ч", "С", "М", "И", "Т", "Ь", "Б", "Ю", "," );
TableOUT : array[1..187] of char=( "1", "q", "a", "z", "2", "w", "s", "x", "3", "e", "d", "c", "4", "r", "f", "v", "5", "t", "g", "b", "6", "y", "h", "n", "7", "u", "j", "m", "8", "i", "k", ",", "9", "o", "l", ".", "0", "p", ";", "/", "-", "[", "=", "]", "\", "`", "!", "Q", "A", "Z", "@", "W", "S", "X", "#", "E", "D", "C", "$", "R", "F", "V", "%", "T", "G", "B", "^", "Y", "H", "N", "&", "U", "J", "M", "*", "I", "K", "<", "(", "O", "L", ">", ")", "P", ":", "?", "_", "{", """, "+", "}", "|", "~", "1", "й", "ф", "я", "2", "ц", "ы", "ч", "3", "у", "в", "с", "4", "к", "а", "м", "5", "е", "п", "и", "6", "н", "р", "т", "7", "г", "о", "ь", "8", "ш", "л", "б", "9", "щ", "д", "ю", "0", "з", "ж", ".", "-", "х", "э", "=", "ъ", "\", "ё", "!", "Й", "Ф", "Я", """, "Ц", "Ы", "Ч", "№", "У", "В", "С", ";", "К", "А", "М", "%", "Е", "П", "И", ":", "Н", "Р", "Т", "?", "Г", "О", "Ь", "*", "Ш", "Л", "Б", "(", "Щ", "Д", "Ю", ")", "З", "Ж", ",", "_", "Х", "Э", "+", "Ъ", "/", "Ё" );

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("My", [TCoder]);
end;

function TCoder.CharCoding(Input : char) : char;
var
c : integer;
begin
CharCoding:="0";
for c:=1 to num do
begin
 if TableIN[c]=Input then
  begin
   CharCoding:=TableOUT[c];
  end;
end;
end;

function TCoder.StrCoding(Input : String) : String;
var
f      : textfile;
fn     : String;
buf    : char;
OutStr : String;
begin
OutStr:="";
StrCoding:="Nothing was coded";
fn:="D:\1.txt";
AssignFile(f, fn);
Rewrite(f);
 Write(f, Input);
CloseFile(f);

Reset(f);
While not Eof(F) do
begin
 Read(f, buf);
 OutStr:=OutStr+CharCoding(buf);
end;
closefile(f);
StrCoding:=OutStr;
end;

function TCoder.StrsCoding(Input : TStrings) : TStrings;
var
c     : integer;
begin
Result:=TStringList.Create;
for c:=0 to input.Count do
 begin
  Result.Add(StrCoding(Input.Strings[c]));
 end;
end;

procedure TCoder.Execute;
begin
FStringsOUT:=StrsCoding(FStringsIN);
end;

function TCoder.Execute(Input : TStrings): TStrings;
begin
Result:=TStringList.Create;
Result:=StrsCoding(Input);
end;

function TCoder.GetStringsIN : TStrings;
begin
Result:=TStringList.Create;
Result:=FStringsIN;
end;

function TCoder.GetStringsOUT : TStrings;
begin
Result:=TStringList.Create;
Result:=FStringsOUT;
end;

procedure TCoder.SetStringsIN(New : TStrings);
begin
FStringsIN:=New;
FStringsIN.Assign(New);
end;

end.


 
Сергей М. ©   (2006-05-25 09:11) [8]


> Dr.TurboBoa ©   (24.05.06 17:24) [7]


Код никуда не годится - в нем масса грубых ошибок.
См. [4]


 
Сергей М. ©   (2006-05-25 09:15) [9]


> Как работать с property типа TStrings


Посмотри на св-во TMemo.Lines в stdctrls.pas и разберись, как это д.б. реализовано в коде компонента и как это в итоге работает


 
Loginov Dmitry ©   (2006-05-25 11:54) [10]

Dr.TurboBoa ©   (24.05.06 17:24) [7]
function TCoder.GetStringsIN : TStrings;
begin
Result:=TStringList.Create;
Result:=FStringsIN;
end;

function TCoder.GetStringsOUT : TStrings;
begin
Result:=TStringList.Create;
Result:=FStringsOUT;
end;


Что енто все означает? Кашмааар!

Нужно примерно следующее:

constructor TCoder.Create;
begin
 FStringsIN := TStringList.Create;
end;

procedure TCoder.SetStringsIN(New : TStrings);
begin
 FStringsIN.Assign(New);
end;

function TCoder.GetStringsIN : TStrings;
begin
 Result := FStringsIN;
end;



Страницы: 1 вся ветка

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.027 c
2-1149770488
Иван123
2006-06-08 16:41
2006.07.02
IDPOP3 - прочитано ли письмо


15-1149755789
Ega23
2006-06-08 12:36
2006.07.02
Sybase PowerDesigner - что-то туплю


1-1148452967
.ruslan
2006-05-24 10:42
2006.07.02
Сохранение содержимого TListView


2-1149773308
Serzh
2006-06-08 17:28
2006.07.02
System Tray


2-1150286067
parovoZZ
2006-06-14 15:54
2006.07.02
Class type required - что значит?