Witam
Mam problem w delphi i nie wiem gdzie jest bład. Otóż piszę program do monitorowania schowka i zapisywaniu przechwyconego tekstu do pliku INI. Wszystko działało dobrze, dopóki nie zaczałem się męczyć z usuwaniem przechwyconego tekstu z tabeli. Usuwanie mi działa, ale chyba mam coś z zapisem lub wstawianiem do tabeli. Usunę jakiś element, uruchomie ponownie program, i dalej mam ten element, który usunałem, a nie mam innego, którego nie usuwałem. Co gorsza jeśli usune coś, co jest na poczatku lub na końcu listy, po ponownym uruchomieniu to dalej jest na liście.
Na formie mam 3 komponenty:
Timer: TTimer;
Tabela: TListBox;
Usun: TButton;
oto kod
unit Rcode;
interface
uses
Windows, Messages, SysUtils, Variants, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ClipBrd, Classes, INIFiles, StrUtils;
type
TMainForm = class(TForm)
Timer: TTimer;
Tabela: TListBox;
Usun: TButton;
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure UsunClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
Z1, Z2: String;
sciezka: ShortString;
i, i2, i3, i4, i5, i6: integer;
INI: TIniFile;
zapisItem, odczytItem: string;
Tablica: array[1..1000000] of string;
odczytIteracji: string;
wskaznikOdczytu: Integer;
implementation
{$R *.dfm}
procedure TMainForm.TimerTimer(Sender: TObject);
begin
Z2 := Clipboard.AsText;
if Z2 <> Z1 then
begin
i := i + 1;
Z1 := Clipboard.AsText;
Tabela.items.Add(Z1);
Tablica[i] := Z1;
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
if FileExists(ExtractFilePath(Application.ExeName) + 'setup.ini') then
begin
for i4 := 1 to wskaznikOdczytu do
begin
if Tablica[i4] <> '' then
Tabela.Items.Add(Tablica[i4]);
end;
end;
Z1 := Clipboard.AsText;
end;
procedure TMainForm.UsunClick(Sender: TObject);
begin
try
for i5 := 0 to 1000000 do
begin
if Tabela.Selected[i5] = true then
begin
Tabela.Items.Delete(i5);
Tablica[i5] := '';
end;
end;
except
end;
end;
initialization
if FileExists(ExtractFilePath(Application.ExeName) + 'setup.ini') then
begin
sciezka := ExtractFilePath(Application.ExeName);
INI := TINIFile.Create(sciezka + 'setup.ini');
odczytIteracji := INI.ReadString('Setup', 'i2', '1000000');
wskaznikOdczytu := StrToInt(odczytIteracji);
wskaznikOdczytu := wskaznikOdczytu - 1;
try
for i3 := 1 to wskaznikOdczytu do
begin
i := i + 1;
odczytItem := INI.ReadString('Koordynaty', IntToStr(i3), 'brak');
Tablica[i3] := odczytItem;
end;
finally
INI.Free;
end;
end;
finalization
sciezka := ExtractFilePath(Application.ExeName);
INI := TINIFile.Create(sciezka + 'setup.ini');
try
for i2 := 1 to i do
begin
zapisItem := Tablica[i2];
INI.WriteString('Koordynaty', IntToStr(i2), zapisItem);
end;
INI.WriteString('Setup', 'i2', IntToStr(i2));
finally
INI.Free;
end;
end.