Einzelnen Beitrag anzeigen

Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#1

Verschiedene Zeilen im Grid auslesen und wiedergeben

  Alt 12. Okt 2005, 23:29
Moin Moin und grüße aus Hamburg,

hoffe der Titel dieses Topics hat mein Problem ein wenig wiedergegeben.
erstmal wollte ich mich bedanken bei allen die mir bis jetzt geholfen haben, es ist unglaublich wieviel man hier lernen kann. Danke

Nachdem ich meine rankinglist in mein Grid geladen und nach Account Nr's sortiert hab sieht das in etwa so aus:

Account Number--------------------Rank---Name

23-6f739h89/u1-8371065j--------74-----Loom
23-ab648912/4b-96158478-----908-----GL_Omega21487
23-ab648912/4b-96158478-----103-----GL_Omega
23-ab648912/4b-96158478-----501-----Spaceman
23-77467863/98-d7370279-----626-----Frog

( die - hab ich nur gemacht um die leerzeichen zu ersetzten, sonst hätte ich das nicht so posten können, denkt sie euch bitte weg)

ich sehe also die 3 Playercharacter von GL_Omega anhand der gleichen Account Nr.

nun möchte ich das mein Programm folgendes tun soll:

Auf knopfdruck die gesamte Rankinglist sortieren nach den Account Nr's, das es wie folgt aussieht(der rank wird komplett ausser acht gelassen, interessant sind nur name und account nr):

23-ab648912
GL_Omega21487
GL_Omega
Spaceman


daher das der ERSTE teil der Account Nr (vor dem querstrich) angezeigt wird und darunter alle Playernamen die ebenfalls diese Account Nr. haben. zwischen den verschieden Account Nr. sollte eine leerzeile sein, also das die gesamte rankinglist in etwa wie das hier aussieht:

23-ab648912
GL_Omega21487
GL_Omega
Spaceman

23-45843658
Gondom
Loom

23-32479843
Tondor
Rankor
Erasor
Ilious
Zandra


etc etc.

der code mit dem ich meine stringlist lade:

Delphi-Quellcode:
procedure TForm1.butnGetClick(Sender: TObject);
var
datei : TextFile;
  dateiname : String;
  zeile : String;
  inhalt : String;
  perslist : Sarr;
  pers : Sarr;
i, j : integer;
begin
  dateiname := ('c:\rankinglist.htm');
  AssignFile(datei, dateiname);
  reset(datei);
  inhalt := '';
  repeat
    Readln(datei, zeile);
    inhalt := inhalt + zeile;
  until eof(datei);
  CloseFile(datei);
  inhalt := getTable(inhalt);
  perslist := getEntries(inhalt);

  i := 0;
  while (perslist[i] <> '') do
  begin
    pers := processAccount(perslist[i]);
    // neu
    if i+2>10 // oder was Du eben eingestellt hast
      then Stringgrid1.RowCount:=i+2;
    // weiter
    for j := 0 to 11 do
    begin
      Stringgrid1.cells[j+1,i+1]:=pers[j];
    end;
    inc(i);
  end;
 reloadtable.Enabled := true;
      reloadhtml.Enabled := true;
end;
end;
und sortiere:

Delphi-Quellcode:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const
  // Define the Separator
  TheSeparator = '@';
var
  CountItem, I, J, K, ThePosition: integer;
  MyList: TStringList;
  MyString, TempString: string;
begin
  // Give the number of rows in the StringGrid
  CountItem := GenStrGrid.RowCount;
  //Create the List
  MyList := TStringList.Create;
  MyList.Sorted := False;
  try
    begin
      for I := 1 to (CountItem - 1) do
        MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator +
          GenStrGrid.Rows[I].Text);
      //Sort the List
      Mylist.Sort;

      for K := 1 to Mylist.Count do
      begin
        //Take the String of the line (K – 1)
        MyString := MyList.Strings[(K - 1)];
        //Find the position of the Separator in the String
        ThePosition := Pos(TheSeparator, MyString);
        TempString := '';
        {Eliminate the Text of the column on which we have sorted the StringGrid}
        TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
        MyList.Strings[(K - 1)] := '';
        MyList.Strings[(K - 1)] := TempString;
      end;

      // Refill the StringGrid
      for J := 1 to (CountItem - 1) do
        GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
    end;
  finally
    //Free the List
    MyList.Free;
  end;
end;
Zum größten Teil hab ich es u.a eurer Hilfe zu verdanken das ich mein programm bis hierhin fertigstellen konnte, danke dafür.
Allerdings hab ich keinen blassen schimmer wie ich das oben beschriebene bewerkstelligen kann, könnte mir vorstellen das es ein wenig komplizierter ist als das vorangegangene.
Bin relativ neu in Delphi, einiges hab ich bereits gelernt aber mit dem grid kenn ich mich noch nicht so aus. Suchfunktion hat mir keine Hilfe gebracht leider.

So hoffe ich das mir jemand hierbei behilflich sein kann, vielleciht an hand meines codes

Ich sag mal Danke im voraus Delphi-Freunde, hoffe ihr versteht mein Problem.

Rhodan
  Mit Zitat antworten Zitat