Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Вниз

Как работать с 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.011 c
2-1150385245
Apollon_604
2006-06-15 19:27
2006.07.02
Подскажите компонент


3-1146807403
seregarem
2006-05-05 09:36
2006.07.02
Изменение поля


2-1150096295
RzCoDer
2006-06-12 11:11
2006.07.02
Ашипка при освобождении DLL


1-1147985639
allrussia
2006-05-19 00:53
2006.07.02
Спецам по Excel: Размер примечания


2-1149930887
Exile
2006-06-10 13:14
2006.07.02
перевести из Text в String или в Char





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский