Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.01.2021, 18:17
Katryn Katryn вне форума
Прохожий
 
Регистрация: 03.01.2021
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Перенести элементы в Memo

Помогите перенести элементы в мемо в очередности, которую задает пользователь. Есть 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  
Старый 07.01.2021, 04:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,674
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
Memo1.Lines.Text := ListBox1.Items.Text;
Но это просто перенесет текст из ListBox в Memo.
Если ты хранишь и Итемах ListBox'а ссылки на элементы, то они будут утеряны.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter