
20.03.2010, 00:51
|
Прохожий
|
|
Регистрация: 29.12.2008
Сообщения: 15
Репутация: 10
|
|
Стэк. прорисовка в Memo
Доброго времени суток,
подскажите пожалуйста как в приведенном коде сделать, чтобы стэк сразу добавлялся в Memo, а не считывался с Edit. Нужно сделать прорисовку. И ещё как задать максимальное количество символов в строке в мемо - 10 ? вообще как оно задается ? или нужно писать отдельную процедуру ? Я новичёк в этом деле, подскажите пожалуйста на доступном языке что мне исправить.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, stack2, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Memo1: TMemo;
Label4: TLabel;
Button1: TButton;
Button4: TButton;
Label2: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
stack:tstack;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
if edit1.text<>'' then
if length(edit1.text)=10 then
begin
s:=edit1.Text;
memo1.Lines.Add(s);
stack.AddToStack(s);
edit1.Text:=''
end
else
showmessage('Длина строки меньше 10')
else
showmessage('Введите значение');
end;
procedure TForm1.Button3Click(Sender: TObject);
var n:integer;
begin
if not stack.EmptyStack then
begin
stack.LastOfStack;
stack.DelFromStack;
n:=memo1.Lines.Count;
memo1.Lines.Delete(n-1);
end
else
showmessage('Стек пуст');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
stack:=tstack.Create;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
stack.Free;
form1.Close;
end;
end.
unit Stack2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
StackEmpty =nil;
type
T = string;
TStackEl=^Stackel;
StackEl=record
el:T;
prev:TStackEl;
end;
TStack = class
private
StackTop:TStackEl;
public
Constructor Create; //конструктор
Function EmptyStack:boolean; //перевірка, чи порожній стек
Procedure AddToStack(elem:T); //додавання елементу до стека
Procedure DelFromStack; //видалення елементу зі стека
Function LastOfStack:T; //останній елемент стеку
end;
implementation
Constructor TStack.Create;
begin
Inherited Create
end;
Function TStack.EmptyStack;
begin
EmptyStack:=StackTop = StackEmpty
end;
procedure TStack.AddtoStack;
var
tmp:TStackEl;
begin
new(tmp);
tmp^.el:=elem;
tmp^.prev:=STackTop;
STackTop:=tmp;
end;
procedure TStack.DelFromStack;
var
help:TStackEl;
begin
if StackTop<>STackEmpty then
begin
help:=StackTop;
StackTop:=StackTop^.prev;
dispose(help);
end
else
showmessage('error stack pust');
end;
function TStack.LastOfStack;
begin
if StackTop<>StackEmpty then
result:=StackTop^.el;
end;
end.
|