Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2007, 15:35   #1
Regloger
Пользователь
 
Регистрация: 15.11.2007
Сообщений: 16
Восклицание Проблема с полем TMemo...

Еще раз здравствуйте уважаемые форумчане!
Опять я к вам с своими траблами… ))) на этот раз суть проблемы в том, что имеется прога, которая работает по алгоритму RC4, но проблема не с ней, а с полем TMemo. Это поле, почему то после шифрования урезает входной текст до нескольких строчек(за место целого абзаца текста)… на скринах все это безобразие видно…( не как не могу понять, в чем проблема… подскажите, пожалуйста, как быть? или может, посоветуете какой нибудь альтернативный вариант решения проблемы… жду ответов…

на 1.jpg какой текст был а на 2.jpg какой стал(после процедуры шифрования)...

вот исходник проги:
Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;

type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
XPManifest1: TXPManifest;
Label1: TLabel;
function InitRC4Cipher: Boolean;
function GetRC4CharCiphered(ch: AnsiChar): AnsiChar;
function ApplyRC4ToText(tx: AnsiString): AnsiString;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
s: array [0..255] of Byte;
i,j: Byte;

implementation

{$R *.dfm}
/////////////////

//Инициализация S-бокса в зависимости от ключа
function TForm1.InitRC4Cipher: Boolean;
var
x: AnsiString;
k: array [0..255] of Byte;
t: Byte;
l: Cardinal;
i0,j0: Byte;

begin
x := InputBox('RC4','Введите ключ','');

if x = '' then
begin
ShowMessage('Вы не ввели ключ.');
Result := false;
Exit;
end;

for i0 := 0 to 255 do s[i0] := i0;

j0 := 1; l := Length(x);
for i0 := 0 to 255 do
begin
k[i0] := Ord(x[j0]);
if j0 = l then j0 := 1;
Inc(j0);
end;

for i0 := 0 to 255 do
begin
j0 := (j0 + k[i0] + s[i0]) mod 256;

t := s[i0];
s[i0] := s[j0];
s[j0] := t;
end;
i := 0;
j := 0;
Result := true;
end;



//Шифрование конкретного символа
function TForm1.GetRC4CharCiphered(ch: AnsiChar): AnsiChar;
var
t: Byte;

begin
i := (i + 1) mod 256;
j := (j + s[i]) mod 256;

t := s[i];
s[i] := s[j];
s[j] := t;

t := (s[i] + s[j]) mod 256;

Result := Chr(Ord(ch) XOR s[t]);
end; //function TForm1.GetRC4CharCiphered


//Процедура шифрования всего текста
function TForm1.ApplyRC4ToText(tx: AnsiString): AnsiString;
var
i: Cardinal;

begin
if InitRC4Cipher = false then
begin
Result := tx;
Exit;
end;

Result := '';
for i := 1 to Length(tx) do
Result := Result + GetRC4CharCiphered(tx[i]);
end;


//Открыть файл
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute = false then Exit;

Memo1.ReadOnly := true;
Edit1.Text := OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(Edit1.Text );

end;


//Сохраняем в файл
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(OpenDialog1. FileName);
ShowMessage('Сохранение прошло успешно');
end;



//Шифрование данных
procedure TForm1.Button3Click(Sender: TObject);
begin
if Memo1.Lines.Text <> '' then
Memo1.Lines.Text := ApplyRC4ToText(Memo1.Lines.Text)
else
begin
ShowMessage('Поле ввода пусто.');
Exit;
end;
end;



//Вывод исходного текста
procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(Edit1.Text );
end;

end.
Изображения
Тип файла: jpg 1.JPG (60.8 Кб, 125 просмотров)
Тип файла: jpg 2.JPG (17.8 Кб, 146 просмотров)
Regloger вне форума Ответить с цитированием
Старый 07.12.2007, 15:39   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Все до неприличия просто: в этом компоненте нужно вручную установить видимость скроллов, вот и все.
mihali4 вне форума Ответить с цитированием
Старый 07.12.2007, 15:43   #3
Regloger
Пользователь
 
Регистрация: 15.11.2007
Сообщений: 16
По умолчанию

Значит не все так плохо как я думал... ) А как это сделать? как установить видимость скроллов(куда нужно тыкнуть)?

Последний раз редактировалось Regloger; 07.12.2007 в 15:45.
Regloger вне форума Ответить с цитированием
Старый 07.12.2007, 15:50   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

"Тыкнуть" нужно по соответствующему свойству Memo в инспекторе компонентов.
mihali4 вне форума Ответить с цитированием
Старый 07.12.2007, 15:59   #5
Regloger
Пользователь
 
Регистрация: 15.11.2007
Сообщений: 16
По умолчанию

Все бы хорошо... но я не могу найти это свойство... Объясни наподобие этого: Visible ==> True (имеентся свойство визибл и значения тру и фол, так вот нам надо поставить такое то...) плиз...
Regloger вне форума Ответить с цитированием
Старый 07.12.2007, 16:09   #6
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Цитата:
Значит не все так плохо как я думал... ) А как это сделать? как установить видимость скроллов(куда нужно тыкнуть)?
Советую скачать книгу 100 компонентов Delphi А. Я. Архангельский с библиотеки клуба.

Свойство: ScrollBars значение ssVertical
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 07.12.2007, 16:17   #7
Regloger
Пользователь
 
Регистрация: 15.11.2007
Сообщений: 16
По умолчанию

К большому сожалению, эти действия: «ScrollBars значение ssVertical», проблемы не решили… А на сколько я понят проблема в том, что в зашифрованном тексте могут появиться нулевые символы, которые этот компонент считает концом строки… а вот как от них избавиться я не знаю. (
Regloger вне форума Ответить с цитированием
Старый 07.12.2007, 16:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может TMemo для этого не подходит?
или нужно писать собственноручный "загрузчик" символов, который бы рисовал вместо "неугодных символов" ченить другое типа квадратива в ТоталКоммандерских вьюверах
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.12.2007, 17:03   #9
Regloger
Пользователь
 
Регистрация: 15.11.2007
Сообщений: 16
По умолчанию

Возможно и не подходит... НО пока другова варианта у меня не какого нету... (
Regloger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TMemo terminadoor Помощь студентам 10 23.07.2008 19:41
Помогите с Расчетным полем в запросе SQL mana Помощь студентам 9 13.04.2008 15:13
Проблема с Blob полем Constellation БД в Delphi 6 24.01.2008 18:58
ЗАПИСЬ В ФАЙЛ, РАБОТА С ТЕКСТОВЫМ ПОЛЕМ ERASERROR PHP 1 18.01.2008 19:21