![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Помогите перенести элементы в мемо в очередности, которую задает пользователь. Есть Listbox, в котором просто отображаются элементы, которые мы вводим и есть мемо, в которое должны переноситься элементы с листбокса только в правильной очередености. Это двусвязный список и в data хранится информация про предыдущий и следующий элемент. 
		
	
		
		
		
		
		
		
			Я думала как-то так записать, но выдает ошибку: Код: 
	procedure TForm1.Button10Click(Sender: TObject); var L: dlistVar; p : pdlistEl; begin p:=L.head; memo1.lines.add(listbox1.items[p.data]) end; Вот весь код: Код: 
	unit Unit1;
  
interface
  
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
  
type
PdlistEl = ^dlistEl;
  dlistEl = record
    next : PdlistEl;
    prev : PdlistEl;
    data : integer;
  end;
  
  dlistVar = record
    head  : PdlistEl;
    tail  : PdlistEl;
    count : cardinal;
  end;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button7: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button6: TButton;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Button5: TButton;
    Button8: TButton;
    Button9: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    
  
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  
var
  Form1: TForm1;
  
implementation
  
{$R *.dfm}
  
procedure l_init (var L:dlistVar);
begin
L.head:=nil;
L.tail:=nil;
L.count:=0;
end;
  
procedure l_push_front ( var L:dlistVar; v:integer);
var p: PdlistEl;
begin
new(p);
p^.data:=v;
p^.prev:=nil;
p^.next:=L.head;
L.head:=p;
inc(L.count);
if p^.next<>nil then
p^.next^.prev:=p
else
L.tail:=p;
end;
  
procedure l_push_back ( var L:dlistVar; v:integer);
var
p:pdlistEl;
begin
new(p);
p^.data:=v;
p^.next:=nil;
p^.prev:=L.tail;
L.tail:=p;
inc(L.count);
if p^.prev<>nil then
p.prev.next:=p
else
L.head:=p;
end;
  
procedure l_insert_before( var L : dlistVar; e : PdlistEl; v : integer );
var
  p : PdlistEl;
begin
  
  if e = L.head then l_push_front ( L, v )
  else
  begin
    new ( p );
    p^.data := v;
    p^.next := e;
    p^.prev :=e.prev;
    inc ( L.count );
    e.prev.next:=p;
    e.prev:=p;
  end;
end;
  
procedure l_insert_after ( var L : dlistVar; e : PdlistEl; v : integer );
var
  p : PdlistEl;
begin
  
  if e = L.tail then l_push_back ( L, v )
  else
  begin
    new ( p );
    p^.data := v;
    p^.next := e^.next;
    p^.prev := e;
    inc ( L.count );
    e^.next^.prev := p;
    e^.next := p;
  end;
end;
  
  
procedure l_pop_front ( var L : dlistVar );
begin
  if L.count > 0 then l_remove ( L, L.head );
end;
  
procedure l_pop_back ( var L : dlistVar );
begin
  if L.count > 0 then l_remove ( L, L.tail );
end;
  
procedure l_printl ( var L : dlistVar );
var
  p : pdlistEl;
begin
    p :=L.head;
    while (p <> nil) do
      begin
       Form1.ListBox1.Items.Add(IntToStr(p^.data));
    p := p^.next;
  end;
  
end;
  
  
procedure TForm1.Button1Click(Sender: TObject);
var
L : dlistVar;
begin
l_init(L);
l_push_front(L,strtoint(Edit1.text));
l_printl(L);
end;
  
procedure TForm1.Button2Click(Sender: TObject);
var
L : dlistVar;
begin
l_init(L);
l_insert_before(L,L.tail,strtoint(Edit1.text));
l_printl(L);
end;
  
procedure TForm1.Button3Click(Sender: TObject);
var
L : dlistVar;
begin
l_init(L);
l_insert_after(L,L.head,strtoint(Edit1.text));
l_printl(L);
end;
  
procedure TForm1.Button4Click(Sender: TObject);
var
L : dlistVar;
begin
l_init(L);
l_push_back(L,strtoint(Edit1.text));
l_printl(L);
end;
   
  
procedure TForm1.Button8Click(Sender: TObject);
var
L : dlistVar;
begin
l_init(L);
l_pop_front(L);
l_printl(L);
end;
  
procedure TForm1.Button9Click(Sender: TObject);
var
L : dlistVar;
begin
l_init(L);
l_pop_back(L);
l_printl(L);
end;
  
procedure TForm1.Button10Click(Sender: TObject);
var
L: dlistVar;
  p : pdlistEl;
begin
p:=L.head;
    memo1.lines.add(listbox1.items[p.data])
 
end; 
 
end.Последний раз редактировалось Admin, 06.01.2021 в 11:20.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	Memo1.Lines.Text := ListBox1.Items.Text; Если ты хранишь и Итемах ListBox'а ссылки на элементы, то они будут утеряны.  |