unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Dialogs, StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
btnStart: TButton;
btnGenerate: TButton;
btnMove: TButton;
cbbFrom: TComboBox;
cbbTo: TComboBox;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
Panel1: TPanel;
procedure btnGenerateClick(Sender: TObject);
procedure btnMoveClick(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
public
procedure ShowData;
end;
TMyItem = record
FirstName: string[10];
LastName: string[10];
Phone: string[10];
Hobby: string[10];
end;
PMyItem = ^TMyItem; // <<<----- Pointer is needed for TList
var
Form1: TForm1;
MyData: TList; // <<<----- TList is used store you data
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.btnStartClick(Sender: TObject);
begin
btnStart.Enabled := False;
Panel1.Enabled := True;
MyData := TList.Create;
end;
procedure TForm1.btnGenerateClick(Sender: TObject);
var
TempStorage: PMyItem;
NewFirstname, NewLastName, NewPhone, NewHobby: string;
ComboboxItems: TStringList;
i: Integer;
begin
for i := 1 to 5 do
begin
// Randomly choose a first name
case Random(10) of
0: NewFirstName := 'Amelia';
1: NewFirstName := 'Harry';
2: NewFirstName := 'Linda';
3: NewFirstName := 'Charlie';
4: NewFirstName := 'Tara';
5: NewFirstName := 'Nicky';
6: NewFirstName := 'Bob';
7: NewFirstName := 'Lucy';
8: NewFirstName := 'Tommy';
9: NewFirstName := 'Susan';
end;
// Randomly choose a last name
case Random(10) of
0: NewLastName := 'Brown';
1: NewLastName := 'Strong';
2: NewLastName := 'Jackson';
3: NewLastName := 'Stone';
4: NewLastName := 'Smith';
5: NewLastName := 'Page';
6: NewLastName := 'Parker';
7: NewLastName := 'Lee';
8: NewLastName := 'Wilson';
9: NewLastName := 'Fox';
end;
// Randomly generate a phone number
NewPhone := IntToStr(Random(800000)+100000);
// Randomly choose a hobby
case Random(10) of
0: NewHobby := 'Singing';
1: NewHobby := 'Painting';
2: NewHobby := 'Travelling';
3: NewHobby := 'Cooking';
4: NewHobby := 'Cycling';
5: NewHobby := 'Dancing';
6: NewHobby := 'Writing';
7: NewHobby := 'Shopping';
8: NewHobby := 'Fishing';
9: NewHobby := 'Watching';
end;
// Add the new data to the list
New(TempStorage);
TempStorage^.FirstName := NewFirstname;
TempStorage^.LastName := NewLastName;
TempStorage^.Phone := NewPhone;
TempStorage^.Hobby := NewHobby;
MyData.Add(TempStorage); // You can't add data to a list directly, you need to use a temp storage
end;
// Show the data on Memo1
ShowData;
// Refresh the items inside the comboboxes
ComboboxItems := TStringList.Create;
for i := 1 to MyData.Count do ComboboxItems.Add(IntToStr(i));
cbbFrom.Items := ComboboxItems;
cbbTo.Items := ComboboxItems;
ComboboxItems.Free;
end;
procedure TForm1.btnMoveClick(Sender: TObject);
var
TempData: PMyItem;
begin
if (cbbFrom.ItemIndex < 0) then
begin
ShowMessage('From cannot be empty!');
Exit;
end;
if (cbbTo.ItemIndex < 0) then
begin
ShowMessage('To cannot be empty!');
Exit;
end;
if (cbbFrom.ItemIndex = cbbTo.ItemIndex) then
begin
ShowMessage('From and To cannot be the same!');
Exit;
end;
// Save the 'From' data to a temporary pointer
TempData := MyData.Items[cbbFrom.ItemIndex];
// Delete the data from the list
MyData.Delete(cbbFrom.ItemIndex);
// Save the data back to the list
MyData.Insert(cbbTo.ItemIndex, TempData);
// Show the result on Memo1
ShowData;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
MyData.Free;
end;
procedure TForm1.ShowData;
function MakeLeftString(const StrInput: string; StrLength: Byte): string;
var
S: string;
begin
S := StrInput;
while (Length(S) < StrLength) do S := S + ' ';
Result := S;
end;
function MakeRightString(const StrInput: string; StrLength: Byte): string;
var
S: string;
begin
S := StrInput;
while (Length(S) < StrLength) do S := ' ' + S;
Result := S;
end;
var
i: Integer;
begin
Memo1.Clear;
Memo1.Lines.Add(
' First Name Last Name Phone Hobby' +' '+
'-----------------------------------------------'
);
for i := 0 to (MyData.Count-1) do
Memo1.Lines.Add(
MakeRightString(IntToStr(i+1), 3) +' '+
MakeLeftString(PMyItem(MyData.Items[i])^.FirstName, 10) +' '+
MakeLeftString(PMyItem(MyData.Items[i])^.LastName, 10) +' '+
MakeLeftString(PMyItem(MyData.Items[i])^.Phone, 10) +' '+
MakeLeftString(PMyItem(MyData.Items[i])^.Hobby, 10)
);
end;
end.