
Witam mam taki problem potrzebuje przerobić kod aby mi sortował w tabeli TstringGrid nazwy alfabetycznie sortowanie numeryczne działa ok ale niestety nie wiem jak zrobić aby działało alfabetycznie.
Próbowałem wklepać tego gotowca:
http://4programmers.net/Delphi/Gotowce/Alfabetyczne_sortowanie_b%C4%85belkowe
Jednak wywala mi błąd praktycznie od początku do końca oczywiście stringlista zamieniłem z nazwa mojej.
Tak wygląda kod programu możne ktoś mi napisać jak ma to poprawnie wyglądać jestem bardzo początkujący i nie wiem a na środę muszę oddać na zaliczenie. Interesują mnie kolumny Nazwa Gatunku i Zamieszkanie.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, jpeg, ExtCtrls, ImgList, ComCtrls, ToolWin,
Menus, XPMan;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
ImageList1: TImageList;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
PopupMenu1: TPopupMenu;
SortujwgNazwyGatunku1: TMenuItem;
SortujwgWieku1: TMenuItem;
SortujwgWagi1: TMenuItem;
SortujwgRozmiaru1: TMenuItem;
SortujwgZamieszkania1: TMenuItem;
ToolButton9: TToolButton;
XPManifest1: TXPManifest;
MainMenu1: TMainMenu;
procedure FormCreate(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure SortujwgNazwyGatunku1Click(Sender: TObject);
procedure SortujwgRozmiaru1Click(Sender: TObject);
procedure SortujwgWieku1Click(Sender: TObject);
procedure SortujwgWagi1Click(Sender: TObject);
procedure SortujwgZamieszkania1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
dane=record
Nazwa_Gatunku:string[20];
Wiek:integer;
Waga:integer;
Rozmiar:integer;
Zamieszkanie:string[30];
end;
rekordy=array of dane;
var
Form1: TForm1;
zwierzeta:rekordy;
plik:file of dane;
plik1:file of integer;
n:byte;
otwarto:boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
otwarto:=false;
StringGrid1.colwidths[0]:=35;
StringGrid1.colwidths[1]:=300;
StringGrid1.colwidths[2]:=100;
StringGrid1.colwidths[3]:=100;
StringGrid1.colwidths[4]:=100;
StringGrid1.colwidths[5]:=305;
StringGrid1.Cells[0,0]:='L.P.';
StringGrid1.Cells[1,0]:='Nazwa Gatunku';
StringGrid1.Cells[2,0]:='Wiek';
StringGrid1.Cells[3,0]:='Waga';
StringGrid1.Cells[4,0]:='Rozmiar';
StringGrid1.Cells[5,0]:='Zamieszkanie';
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
var
i:integer;
begin
n:=Strtoint(inputbox('Dane','Określ liczbę gatunków:',''));
setlength(zwierzeta,n);
for i:=0 to n-1 do
begin
zwierzeta[i].Nazwa_Gatunku:=inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Nazwa_Gatunku ' ,' ' );
zwierzeta[i].Wiek:=Strtoint(inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Wiek ' ,' ' ));
zwierzeta[i].Waga:=Strtoint(inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Waga ' ,' ' ));
zwierzeta[i].Rozmiar:=Strtoint(inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Rozmiar ' ,' ' ));
zwierzeta[i].Zamieszkanie:=inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Zamieszkanie ' ,' ' );
end;
StringGrid1.RowCount:=n+1;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
var
i:integer;
begin
n:=Strtoint(inputbox('Dane','Okresl liczbę gatunków które chcesz dodac',''));
setlength(zwierzeta,n);
for i:=0 to n-1 do
begin
zwierzeta[i].Nazwa_Gatunku:=inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Nazwa_Gatunku ' ,' ' );
zwierzeta[i].Wiek:=Strtoint(inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Wiek ' ,' ' ));
zwierzeta[i].Waga:=Strtoint(inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Waga ' ,' ' ));
zwierzeta[i].Rozmiar:=Strtoint(inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Rozmiar ' ,' ' ));
zwierzeta[i].Zamieszkanie:=inputbox('dane '+inttostr(i+1)+' zwierzeta ' ,' Zamieszkanie ' ,' ' );
end;
StringGrid1.RowCount:=n+1;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
if savedialog1.execute then
begin
assignfile(plik,savedialog1.FileName);
reset(plik);
seek(plik,filesize(plik));
for i:=0 to n-1 do
write(plik,zwierzeta[i]);
closefile(plik);
end
else showmessage('Nie dopisano do pliku');
assignfile(plik,savedialog1.FileName);
reset(plik);
n:=filesize(plik);
setlength(zwierzeta,n);
stringgrid1.RowCount:=n+1;
for i:=0 to n-1 do
read(plik,zwierzeta[i]);
closefile(plik);
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
procedure TForm1.ToolButton4Click(Sender: TObject);
var
i:integer;
begin
if savedialog1.Execute then
begin
assignfile(plik,savedialog1.FileName);
rewrite(plik);
for i:=0 to n-1 do
write(plik,zwierzeta[i]);
closefile(plik);
end
else
showmessage('Nie wskazano pliku');
end;
procedure TForm1.ToolButton3Click(Sender: TObject);
var
i:integer;
begin
if opendialog1.Execute then
begin
assignfile(plik,opendialog1.FileName);
reset(plik);
n:=filesize(plik);
setlength(zwierzeta,n);
stringgrid1.RowCount:=n+1;
for i:=0 to n-1 do
read(plik,zwierzeta[i]);
closefile(plik);
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
end;
procedure TForm1.ToolButton5Click(Sender: TObject);
begin
close;
end;
procedure TForm1.SortujwgNazwyGatunku1Click(Sender: TObject);
var
i,j:integer;
tmp:dane;
begin
for j:=0 to n-2 do
for i:=0 to n-2 do
if zwierzeta[i].Nazwa_Gatunkuzwierzeta[i+1].Nazwa_Gatunku then
begin
tmp:=zwierzeta[i];
zwierzeta[i]:=zwierzeta[i+1];
zwierzeta[i+1]:=tmp;
end;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
procedure TForm1.SortujwgRozmiaru1Click(Sender: TObject);
var
i,j:integer;
tmp:dane;
begin
for j:=0 to n-2 do
for i:=0 to n-2 do
if zwierzeta[i].Rozmiarzwierzeta[i+1].Rozmiar then
begin
tmp:=zwierzeta[i];
zwierzeta[i]:=zwierzeta[i+1];
zwierzeta[i+1]:=tmp;
end;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
procedure TForm1.SortujwgWieku1Click(Sender: TObject);
var
i,j:integer;
tmp:dane;
begin
for j:=0 to n-2 do
for i:=0 to n-2 do
if zwierzeta[i].wiekzwierzeta[i+1].wiek then
begin
tmp:=zwierzeta[i];
zwierzeta[i]:=zwierzeta[i+1];
zwierzeta[i+1]:=tmp;
end;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
procedure TForm1.SortujwgWagi1Click(Sender: TObject);
var
i,j:integer;
tmp:dane;
begin
for j:=0 to n-2 do
for i:=0 to n-2 do
if zwierzeta[i].Wagazwierzeta[i+1].Waga then
begin
tmp:=zwierzeta[i];
zwierzeta[i]:=zwierzeta[i+1];
zwierzeta[i+1]:=tmp;
end;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
procedure TForm1.SortujwgZamieszkania1Click(Sender: TObject);
var
i,j:integer;
tmp:dane;
begin
for j:=0 to n-2 do
for i:=0 to n-2 do
if zwierzeta[i].Zamieszkaniezwierzeta[i+1].Zamieszkanie then
begin
tmp:=zwierzeta[i];
zwierzeta[i]:=zwierzeta[i+1];
zwierzeta[i+1]:=tmp;
end;
for i:=0 to n-1 do
begin
StringGrid1.Cells[0,i+1]:=inttostr(i+1);
StringGrid1.Cells[1,i+1]:=zwierzeta[i].Nazwa_Gatunku;
StringGrid1.Cells[2,i+1]:=inttostr(zwierzeta[i].Wiek);
StringGrid1.Cells[3,i+1]:=inttostr(zwierzeta[i].Waga);
StringGrid1.Cells[4,i+1]:=inttostr(zwierzeta[i].Rozmiar);
StringGrid1.Cells[5,i+1]:=zwierzeta[i].Zamieszkanie;
end;
end;
end.
Tagi: tstringgrid,graphics controls,unit unit1,windows messages,gotowce,grids,kod,c4,delphi,aby,menus,interface