Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In Listview enthaltene Werte Prüfen und einfärben (https://www.delphipraxis.net/59468-listview-enthaltene-werte-pruefen-und-einfaerben.html)

SvenK 22. Dez 2005 20:54


In Listview enthaltene Werte Prüfen und einfärben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!

vorab: keine ahnung ob der Titel so richtig gewählt ist, wenn nein dann sry.

Also kurz zur Erklärung:
Ich schreibe an einem Programm was eine Webseite nach internen Links durchsucht und diesen Links dann folgt. Alle gefundenen Seiten speichere ich in das ListView. Caption ist meine URL, subItem[0] ist der Seitentitel und SubItem[1] ist der MD5Diggest aus dem Quelcode.


Ziel von mir ist es nun mit dem Programm zum einen eine Liste aller Unterseiten der Webseite anzufertigen. Das Funktioniert bereits wunderbar! Jetzt würde ich gerne wegen Suchmaschinen (daher der MD5Diggest) dem Benutzer anzeigen welche Seiten den gleichen Inhalt haben. Dies soll aber nur Optional gemacht werden was ja nichs hier zur Sache beiträgt :)

Also wie gesagt habe ich wie im angehängten Screenshot ein Listview mit den 3 Spalten.

Wie müsste ich nun vorgehen um möglichst resourcen schonend alle Items einzufärben die doppelt vorkommen. dabei sollen die Items die nur einmal vorkommen unberührt bleiben.

Am allerbesten wäre jetzt sogar noch das alle möglcihen doppelte Seiten immer mit einer anderen Farbe gemalt werden. Wie das beispiel im 2. Scrreenshot.

Über gute anregungen würde ich mich sehr freuen, weil ich steh komplett aufm schlauch wie ich das angehen soll :(

ps: schönes forum :)

Grüße
Sven

marabu 22. Dez 2005 21:30

Re: In Listview enthaltene Werte Prüfen und einfärben
 
Hallo Sven,

wenn du Gleichheit über den Hash feststellst, dann ist es wohl das Beste, wenn du eine invertierte Liste erzeugst, in der du über den Hash-Wert schnell die Anzahl der URLs bestimmen kannst. Eine sortierte StringList könnte dir da nützlich sein, in deren Objects du einfach den Zähler unterbringst.

Delphi-Quellcode:
// getippt und nicht getestet

var
  sl: TStringlist; // sorted = true; duplicates = dupIgnore

procedure Checkin(s: TStrings; hash: string);
var
  index: integer;
begin
  index := s.IndexOf(hash);
  if index < 0
    then s.AddObject(hash, Pointer(1))
    else s.Objects[index] := Pointer(Succ(Integer(s.Objects[index])));
end;

begin
  CheckIn(sl, hash);
end;
Zum Färben kannst du dann schnell auf die Anzahl zugreifen:

Delphi-Quellcode:
function IsUnique(s: TStrings; hash: string): boolean;
begin
  with s do
    Result := not Assigned(Objects[IndexOf(hash)]);
end;
Grüße vom marabu

SvenK 22. Dez 2005 23:19

Re: In Listview enthaltene Werte Prüfen und einfärben
 
Besten dank!

ich habs zwar nicht genau so gemacht wie du es mir geschrieben hast, aber das war der denkanstoß den ich brauchte! nun färbt er die richtigen dinge ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz