Форум: "Основная";
Текущий архив: 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", "<", ">", "?", "¸", "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("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