Avatar billede j.hansen Nybegynder
06. juli 2002 - 19:15 Der er 4 kommentarer

Finde foreskelle (2)

Jeg har to StringList's, hvor den ene skal bruges til at logge alt der der står i den anden...

I StringList1 er der konstant 16 linier, dvs. når der tilføjes en ny i toppen, forsvinder den nederste...

StringList2 ta'r så og logger det hele - dvs. at hvis der tilføjes linier øverst i StringList1, såtilføjes de også øverst i StringList2, men der bli'r ikke fjernet noget fra bunden..

problemet er så, at der til tider bli'r tilføjet 2, 3 eller 4 linier i toppen på en gang (en opdatering), men det har jeg løst ved at bruge denne funktion:

function TMainForm.GetNewLines(): Integer;
var
  I: Integer;
begin
  Result := -1;
  for I := 0 to StringList1.Count -1 do
    if StringList1.Strings[I] = StringList2.Strings[0] then
    begin
      Result := I;
      Break;
    end;
end;

Men men men... Hvis der er nogle af linierne i StringList1 der er ens, så går det galt, for så får den ikke alle linier med... det er lidt noget bøv..

kan det gøres på en anden måde?
Avatar billede speedy Nybegynder
07. juli 2002 - 12:55 #1
Når du tilføjer linier i den listbox hvor der altid er 16 items, kan du jo samme sted tilføje de samme linier i den anden listbox.

Er det mig der har misforstået noget ?

/SpEeDy
Avatar billede borrisholt Novice
08. juli 2002 - 08:25 #2
prøv det her :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    StringList1 : TStringList;
    StringList2 : TStringList;
  public
    Counter : Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  Randomize;
  StringList1 := TStringList.Create;
  StringList2 := TStringList.Create;
  for i := 0 to 15 do
    StringList1.Add(IntToStr(i));
StringList2.Assign(StringList1);
Counter := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,k : Integer;
begin
  j := random(4);
  for i := 0 to j do
  begin
    inc(Counter);
    Counter := Counter mod 15;
    k := Random(15);
    StringList1[counter] := IntToStr(k);
  end;

  for i := 0 to 15 do
    if StringList2.IndexOf(StringList1[i]) = -1  then
      StringList2.Add(StringList1[i]);
end;

end.


Jens b
Avatar billede borrisholt Novice
20. juli 2002 - 14:17 #4
er du død `?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester